go to post Jeffrey Drumm · Sep 3, 2020 Here's a method that, once created and compiled, will appear in your dropdown list of functions in the rule editor: Class User.Util.DateTime Extends Ens.Rule.FunctionSet { ClassMethod DaysPrior(pDays As %Integer) As %String { Return $ZDATE($H - pDays,8) } } You'd use it in your rule like this: Caveat: The birthdate is assumed to be valid and 8 characters in length. If there's a possibility that you would get an invalid or missing date, the ">" comparison will not be valid.
go to post Jeffrey Drumm · Aug 27, 2020 If you know that there will always be 8 characters at the position of the 2nd "*" character, you should be able to use this pattern instead: TEST_PID*_NDCA_Drug_Utilization_????????_UD.txt
go to post Jeffrey Drumm · Aug 17, 2020 I'm pretty sure that System Default Settings would only solve this issue if you were already using it to "default" the original value for those interfaces. Had you done that, making the update would be a very simple change of one entry in SDS. @Craig.Regester's solution is probably the easiest to implement quickly, but it might also be an opportunity to move to an SDS-based configuration.
go to post Jeffrey Drumm · Jul 1, 2020 Thank you for the clarification. I'm in the middle of a Cache/Ensemble on SUSE -> IRIS for Health on RHEL migration and would prefer to be at the latest available release prior to go-live. But I guess I am, per the release schedule.
go to post Jeffrey Drumm · Jul 1, 2020 Hi Stefan, I'm not seeing the 2020.2 distributions listed for the full kits on the WRC site. Do you know when they will be available?
go to post Jeffrey Drumm · Jun 30, 2020 Would you like us to post feature requests here, on GitHub, or not at all? For example, I want to be able to go back and edit a previously entered line before execution ...
go to post Jeffrey Drumm · Jun 26, 2020 Did you try GetHostSettingValue()? I'm working with 2018.1.2, but I'd be surprised if the API changed.
go to post Jeffrey Drumm · Jun 26, 2020 GetAdapterSettingValue() may give you what you want. The Type parameter isn't needed. Set archiveFilePath=##class(Ens.Director).GetAdapterSettingValue("ReadPDFFileService","ArchivePath",.status) There's a corresponding GetHostSettingValue() method for non-adapter settings that works similarly. Both seem to supply the System Default Setting when the setting is unvalued in the production.
go to post Jeffrey Drumm · Jun 21, 2020 Hi Dmitriy, UPDATE: Also posted as an issue to GitHub Here's the layout in VS Code's Explorer: The code-workspace file from the Workspace top-level directory: Note that I've tried both manually creating the file and adding directories to the workspace using the VS Code menus. The only difference I can see in the result is that the json name value appears in the explorer tree rather than the actual directory name. Hers's a .vscode\settings.json file from one of the directories referenced in the code-workspace file shown above: The oddest symptom is that when I change just one of the settings.json files, all directories change to those value in the OBJECTSCRIPT:EXPLORER view (only the file I've actually edited and saved has the changes in it, though): Thanks for looking into this. PS. Just in case it matters: Version: 1.46.1 (user setup)Commit: cd9ea6488829f560dc949a8b2fb789f3cdc05f5dDate: 2020-06-17T21:13:20.174ZElectron: 7.3.1Chrome: 78.0.3904.130Node.js: 12.8.1V8: 7.8.279.23-electron.0OS: Windows_NT x64 10.0.18362
go to post Jeffrey Drumm · Jun 21, 2020 Hi Dmitriy, I've created the .code-workspace file up as you've described, with the "main" name/path and the "part" names/paths pointing to their respective subdirectories. Each subdirectory has it's own .vscode/settings.json file. However, when I go into Explorer, all of the workspace directories show connections to the same server, not the distinct ones defined for each workspace subdirectory. There are no objectscript.* values defined in the main .code-workspace file or the .vscode/settings.json file in the root of the main workspace directory. I'm obviously missing something, but I've tried a variety of options and I'm stuck. Thanks!
go to post Jeffrey Drumm · Jun 2, 2020 The schema doesn't seem to match the structure of the message you've supplied; the OBRuniongrp group should be a repeating group and indicate such with parentheses (i.e. OBRuiniongrp()). Assuming that's fixed in the schema, you should be able to get at the fields in question in repeating OBR segments with something like: Set tStudy = 0 // Get count of OBR segments Set tOBRCnt = request.GetValueAt("ORCgrp(1).OBRuniongrp(*)") // Loop through OBRs and evaluate field contents For tIter = 1:1:tOBRCnt { If request.GetValueAt("ORCgrp(1).OBRuniongrp("_tIter_").OBRunion.OBR:UniversalServiceIdentifier.Identifier") = "match_value" { Set tStudy = 1 } } If tStudy { ...insert action to take here... } The above may need to be modified to use context variables if it's being used in a BPL.
go to post Jeffrey Drumm · Apr 20, 2020 Rather than: s target.{ORCgrp(k1).OBRgrp(k2).OBXgrp(k3).NTE(iNteCnt)} sTmp Try: d target.SetValueAt(iNteCnt, "ORCgrp("_k1_").OBRgrp("_k2_").OBXgrp("_k3_").NTE("_iNteCnt_"):1") d target.SetValueAt(sTmp, "ORCgrp("_k1_").OBRgrp("_k2_").OBXgrp("_k3_").NTE("_iNteCnt_"):3") Assuming you want the value in the 3rd field of the NTE. You should also change the value stored in sNTE to: source.{ORCgrp(k1).OBRgrp(k2).OBXgrp(k3).NTE(1):3} If there's only one NTE segment in each OBXgrp of the the inbound message.
go to post Jeffrey Drumm · Apr 15, 2020 Building an interface in Ensemble would require essentially emulating the printing protocol used by Meditech (lpr/lpd?). While that might be fun, I don't know that it's the best use of your time Depending on your OS platform, it might be possible to route Meditech's printer output to files. This would be done by configuring a custom printer definition on either the Ensemble host or a host that Ensemble has file (ftp/sftp/cifs/etc.) access to. For Unix/Linux, this isn't terribly hard to do with lpd, and I imagine it can be done with CUPS as well. I know Windows can function as an lpd server, but I'm not sure how you would get its output routed to a file. Once the printed output is in file form, you could then create a file service in Ensemble to pick up and process it.
go to post Jeffrey Drumm · Apr 13, 2020 InterSystems documentation states that this method should never be used in a live, deployed environment. It will remove all messages from queues, along with other state management data. Link
go to post Jeffrey Drumm · Apr 3, 2020 The documentation is available both in the DTL editor when you use the Exists() method in the Expression Editor for a rule: And in the Class Reference for Ens.Rule.FunctionSet -- the Exists() Method: The Class reference is clearer about the table argument being a quoted string.
go to post Jeffrey Drumm · Mar 4, 2020 Hi Brendan, Well, I just tested it with WinSQL and the queries that never returned results previously are now working. They're also working in the application I had originally tested with, so ... not sure what the cause was. I was previously using IRIS for Health CE 2019.1 as the target environment but am now using a "commercial" IRIS 2019.1 license.
go to post Jeffrey Drumm · Feb 25, 2020 Did you get an actual compilation error, or just an error indicator in the expression editor? In my case, the dialog box shows the expression indicated an error, but it doesn't cause a compilation problem. I don't have any sample messages to test with at the moment, so I'm not sure it will actually work ...
go to post Jeffrey Drumm · Feb 25, 2020 It appears as though the answer is no. I would think that the Private property keyword would be the most intuitive way to do this, but it does not appear to have any effect in the DTL editor.
go to post Jeffrey Drumm · Feb 25, 2020 Hi Barry, your syntax is close but not quite right: I don't have a message class handy that has an Observation property defined as %ListOfDataTypes, so I get an error indicator in the rule editor (which I've tried, poorly, to edit out).