go to post Julian Matthews · Sep 17, 2021 Hey Sean. I had considered using the values from Memory and Startup, but was unsure of the exact class to call it, so thank you. I think my approach will be to use a util function which then returns a value based on SystemMode (I say based on, as I would want the same behavior even when failed over in a mirrored setting)
go to post Julian Matthews · Sep 16, 2021 Hey Thomas. EnableConfigItem from Ens.Director should be what you're looking for. You will need to call it twice (once to stop, and a second time to start it again). From Terminal: Do ##class(Ens.Director).EnableConfigItem("ConfigNameHere", 0, 1) Do ##class(Ens.Director).EnableConfigItem("ConfigNameHere", 1, 1) It returns a status, so you may want to evaluate the status when stopping it to ensure it stopped before trying to start it again, or report an error if it fails to stop or start.
go to post Julian Matthews · Aug 17, 2021 Hey Eduard. For question 3 - you could technically group them using managed alerts, as there is a function you can include in the router that is supposed to not raise an alert but instead update an existing managed alert (IsRecentManagedAlert) but this would mean getting alerted on the first message. However, I have found this to be a bit inconsistent as it relies on a match on the AlertText and SourceConfigName within a user defined timeframe. Where this catches me out is when the alert text contains something like a timestamp, as this makes it unique so a new alert is raised anyway. Alternatively, you could create a function that writes the alerts to an internal table, and then poll that table every x minutes to generate a single detailed alert message?
go to post Julian Matthews · Aug 11, 2021 Hey Muhammad. When you say validation, what exactly do you mean? If you are interested in making sure it matches the format of ICD-10-AM codes, then you could use pattern matching to ensure it fits the expected format. At first glance, it looks to be 1 Letter + 2 Numbers + 1 period + 1 or 2 numbers. The pattern match for this would be "1A2N1"."1.2N" For example: USER> Set ICD10 = "K76.3" USER> If ICD10?1A2N1"."1.2N {Write "This is ICD10"} else {write "This is not ICD10"} This is ICD10 If you are looking to actually make sure the code is a real ICD10 code, then you would need to be able to query a data source that contains a full list of valid codes. If this is the direction you're looking to go in, then you may want to look into FHIR based terminology services to be able to query your codes against to see if they're valid? But I'm not familiar with the practicality or cost of something like that. (ps - I have linked to the temporary documentation, however I'm not sure how long that will exist)
go to post Julian Matthews · Aug 9, 2021 Hey Muhammad. This should happen automatically when the message schema is applied. So, if this is based on an inbound HL7 service, then the Schema must be set in service using the setting "MessageSchemaCategory": Alternatively, if you are generating the message using the test option for a process/operation, then you can set the HL7 Document Property from the test options:
go to post Julian Matthews · Aug 6, 2021 It's been a short while since I threw this together, and I ended up adding in two important changes. OS Authentication Use of ##Class(Backup.General).ExternalSetHistory() As Global Masters reminded me of this post, I thought I should at least update it with the latest version: @echo off rem VMTools should pass in either freeze or thaw. if "%1" == "freeze" goto doFreeze if "%1" == "thaw" goto doThaw echo. echo Nothing Matched. Exiting... EXIT /b :doFreeze rem Call external freeze. OS Authentication negates need for login credentials. c:\InterSystems\HealthShare\bin\irisdb -s"C:\InterSystems\HealthShare\Mgr" -U%%SYS ##Class(Backup.General).ExternalFreeze() echo. echo. rem Check errorlevel from highest to lowest here. if errorlevel 5 goto FreezeOK if errorlevel 3 goto FreezeFAIL rem If here, errorlevel did not match an expected output. rem Assume Failure. echo errorlevel returned unexpected value goto FreezeFAIL :FreezeOK echo SYSTEM IS FROZEN rem Error levels from freeze do not match standard convention, so we return 0 when successful. EXIT /b 0 :FreezeFAIL echo SYSTEM FREEZE FAILED EXIT /b 1 :doThaw c:\InterSystems\HealthShare\bin\irisdb -s"C:\InterSystems\HealthShare\Mgr" -U%%SYS ##Class(Backup.General).ExternalThaw() echo. echo SYSTEM IS THAWED echo. c:\InterSystems\HealthShare\bin\irisdb -s"C:\InterSystems\HealthShare\Mgr" -U%%SYS ##Class(Backup.General).ExternalSetHistory() echo. echo BACKUP RECORDED EXIT /b 0
go to post Julian Matthews · Aug 5, 2021 Hey Yone. In the first part of your question, you're converting the hexadecimal to Ascii and then attempting to convert the Ascii string to Base64 (giving you "TFgDBAEBAgF5wyYjMTQ1Oz7DunxMWAcIAQEBAhgkWE1M"). The reason you're getting a different result on the Base64 encoding on ObjectScript is because you're encoding the hexadecimal string "4C5803040101020179C3913EC3BA7C4C580708010101021824584D4C" into Base64 without converting it to Ascii first. If you try the hexadecimal string in an online Base64 encoder, you'll see the same output:
go to post Julian Matthews · Jul 31, 2021 Hey Virat. It's difficult to point you in the direction of documentation that isn't supplied by InterSystems, as the material is generally good and available online. The sidebar on the forum has some great links to various resources, and even has a link to a docker image for the community edition (which is free). If you do look at the community edition, you may find it useful to install the EnsDemo namespace to be able to try a few prebuilt productions and get a feel for things.
go to post Julian Matthews · Jul 30, 2021 It will behave as if it was unauthenticated in the sense that you'll login automatically, however the trust is based on the successful login to the operating system, whereas actual unauthenticated access just lets anyone in. When reviewed within my organisation, it was certainly preferred when compared to leaving user/pass in plaintext in a script.
go to post Julian Matthews · Jul 30, 2021 Would OS Authentication be of use to you? When enabled, you should be able to automatically log in based on the OS user account running the script, however you will need an IRIS account with the exact same username as the OS account, and it will need the appropriate permissions in IRIS for what you're looking to do.
go to post Julian Matthews · Jul 28, 2021 Hey Jay. I appreciate this probably doesn't help you, but thought I would share in case it's of interest to anyone. I had this same issue with Kaspersky a few years ago when installing a preview of Healthconnect on my local machine to review some upcoming features (Does anyone else remember FHIR?). As each attempted install would result in an internal virus response and some light hearted ribbing from colleagues, I was quite keen to get this resolved. I worked with WRC as well as Kaspersky, and we found that the "threat" detected was oddly tied to the build number of Windows 10, and we would not get a detection with the same version of Kaspersky running on different builds of Windows 10 or on any builds of Windows Server Edition we had currently in operation and free to test. At the time, Kaspersky did state that they had updated their definitions which I confirmed worked, however that could easily have been tied to the specific build of the Healthconnect install exe, or could just be something reintroduced over the last 3 years since I had reported this issue to Kaspersky. FWIW - if there was something in the installer that was a red flag to all AV suppliers, then I would suspect that it would be addressed (especially as it'd probably flag up with whatever AV is used by Intersystems). However behavior detection isn't an exact science, and I wouldn't be surprised if adjusting the installer to appease Kaspersky is then detected by another supplier as an attempt to avoid detection by an AV.
go to post Julian Matthews · Jun 18, 2021 Hey Sebastian. I think SetValueAt() is what you're looking for. The pAction parameter defaults to "set", but I think you can also have "clear", "remove", "insert", and "append".
go to post Julian Matthews · Jun 18, 2021 Just to add an alternative to what has already been offered: you could also use the Data Import Wizard and provide the data in a CSV. You could then insert it into your table quite easily and without trying to built up a 100 union query :)
go to post Julian Matthews · Jun 15, 2021 I'm also quite interested in this. If there is an example being shared, I'd love to see it.
go to post Julian Matthews · Jun 11, 2021 I forgot to mention the article from @Murray Oldfield and I really should have considering it was a big help when implementing this myself. I will say that I was caught out when trying the example scripts kindly provided in the comments as they are shown as two distinct scripts, and I found that VMWare would run every script in the folder on the freeze, and then all again but in reverse order for the thaw. This would mean that VMWare was effectively freezing and thawing the environment in a single hit, and then trying to backup before thawing and then freezing the environment.
go to post Julian Matthews · Jun 11, 2021 Hey Nigel. The key take away from any attempts to backup a running environment is to use freeze/thaw scripts. The idea being that the backup solution will prompt the IRIS system to freeze the DBs for the backup to take place, and then thaw after the fact. I recently embarked on this myself, and posted an article showing my journey based on using VMWare and a windows environment. However this should be easily adaptable to other backup solutions. The only change I have made since that article is that I am not passing the login credentials via a separate file, and instead have OS Authentication enabled within my IRIS system so that the user account running the script is able to automatically authenticate at runtime.
go to post Julian Matthews · May 27, 2021 Hey Otto. If you extend your class with "Ens.Rule.FunctionSet", the ClassMethods contained within will be available as a function for the DTL:
go to post Julian Matthews · May 13, 2021 Hey ED Coder. You should be able to just use the EnsLib.HL7.Service.HTTPService class for your Service, and then the request can be sent to the port you define as you would for any other HL7 inbound. You can also then specify the message schema in the same way. The "url" you provide can be the IP of the machine with the port afterwards. For example, I just set up an inbound on a dev environment and then sent a message from Insomnia. I sent it as a post to http://IP:PORT with the HL7 message as the content of the HTTP body:
go to post Julian Matthews · Apr 20, 2021 Ahh, good catch. @Yone Moreno - it'll be called cache.cpf because you're using cache and not iris.