Nick has not published any posts yet.
ClassMethod Opposite(s1 As %String = "", s2 As %String = "") As %Boolean
    write s1_", "_s2_" --> "
    if (($l(s1) '= $l(s2)) || (s1 = "") || (s1'?.1A.A) || (s2'?.1A.A)) { return 0 }
    for cnt=1:1:$l(s1) {
        if (($zabs($a($e(s1,cnt)) - $a($e(s2,cnt))) '= 32)) { return 0 }
    return 1

You can use the Create method of the Security.Users class to do that. Bear in mind that class is in %SYS. Documentation for Create is here: Security.Users.

set $nameSpace = "%SYS"
if '##class(Security.Users).Exists("testuser") {
    // Set properties
    set props("Enabled")=1
    set props("Name")=testuser
    set props("FullName")="Test User"
    set props("SuperUser")=0
    set props("NameSpace")="USER"
    set props("Roles")="%Developer,%Operator,TestRole"
    set props("Password")=userpassword
    set props("PasswordNeverExpires")=0
    set props("ChangePassword")=0
    set props("Routine")=""
    set props("ExpirationDate")=""
    set props("Flags")=1
    set props("EmailAddress")=""
    set status=##class(Security.Users).Create(user, .props)
    if $$$ISERR(status) {
        do $system.Status.DecomposeStatus(status, .err)

We have used Datadog to produce some customer facing dashboards that provide an quick view of general server/application health as well as current license usage, number of Cache process, etc. Additional internal only dashboards allow customer support staff that don't have access to the mgmt portal to identify problematic queries, users with high latency, and other application specific issues which they can then research further if necessary. This is done via a %CSP.Page class that is is configured as the URL in the Datadog configuration. Documentation for that Datadog configuration is here.

Nick has no followers yet.
Nick has not followed anybody yet.
Global Masters badges:
Nick has no Global Masters badges yet.