go to post Nick Hershberger · Sep 19, 2022 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 }
go to post Nick Hershberger · Jul 20, 2022 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) } }
go to post Nick Hershberger · May 19, 2022 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.
go to post Nick Hershberger · Apr 14, 2022 In COS create an instance of the License class and run the GetSample method to fetch the current license info. You can then reference the properties directly. set ans = ##class(%Monitor.System.License).%New() set sc = ans.GetSample() write ans.AvailableDist
go to post Nick Hershberger · Mar 10, 2022 There's documentation and examples for searching using JRNDUMP here. Using SELECT^JRNDUMP is very handy to find a specific address(es) which you can then jump straight to in the Management Portal to get a view of what else was going on around that particular entry.
go to post Nick Hershberger · Jan 31, 2022 Kevin, Those appear to be application specific globals. I would suggest reaching out to the support team for the application to request additional information on what those globals are used for.