go to post Jeffrey Drumm · Nov 24, 2021 You can change the message DocType, but you can't change the message content: HICG > s msg=##class(EnsLib.HL7.Message).%OpenId(7463) HICG > w msg.IsMutable 0 HICG > w msg.DocType 2.3.1:ORU_R01 HICG > s msg.DocType="2.5.1:ADT_A01" HICG > d msg.%Save() HICG > w msg.DocType 2.5.1:ADT_A01 HICG > Unfortunately there's no easy way to "reset" the source document type in the DTL editor dynamically. You could, however, dynamically set the document type in either a BPL or COS business process and then invoke the appropriate DTL for translation.
go to post Jeffrey Drumm · Nov 24, 2021 The class query MemberStatusList in SYS.Mirror (found in the %SYS namespace) will give you a list of mirror members and some useful status information: %SYS>d ##class(%ResultSet).RunQuery("SYS.Mirror","MemberStatusList") Member Name:Current Role:Current Status:Journal Transfer Latency:Dejournal Latency:Journal Transfer Latency:Dejournal Latency:Display Type:Display Status: MDCHCNDBSL1.HICGRP.COM/STAGE:Primary:Active:N/A:N/A:N/A:N/A:Failover:Primary: MDCHCNDBSL2.HICGRP.COM/STAGE:Backup:Active:Active:Caught up:Active:Caught up:Failover:Backup: CDCHCNDRSL.HICGRP.COM/STAGE:Async:Async:Caught up:Caught up:Caught up:Caught up:Disaster Recovery:Connected:
go to post Jeffrey Drumm · Nov 22, 2021 Yikes, it appears to just that, John. Chrome worked fine for the other servers, but not the two mentioned above. Switching to Incognito mode, I was able to sign on using both the FQDN and just the hostname. And after clearing cookies/cache, normal mode works as well. Gah, rule number 1 of web troubleshooting and I completely spaced on it.
go to post Jeffrey Drumm · Nov 21, 2021 Hi Robert! I'm not sure how this addresses my issue ... I don't think it's a DNS problem. The IP address resolved is the same regardless of whether the domain portion is appended to the hostname or not. And as I said, I have 4 servers with identical local httpd configurations that work fine, and they're all using the same name resolution servers. The only thing I could find that's different is that the iris.cpf file for the problem servers had a FQDN specified for the WebServerName entry while the working ones had no host specified at all. But changing the entry on one of the problem servers and restarting it made no difference.
go to post Jeffrey Drumm · Nov 18, 2021 The Ens.Director class has a number of useful methods. See specifically GetAdapterSettingValue() and GetHostSettingValue().
go to post Jeffrey Drumm · Nov 6, 2021 Are the values in AIS:3.1 sequential integers ranging from 1 to the number of AIS segments? If yes, it's very easy. If not ... just a little harder. You'd populate a subscripted variable using the values in AIS:3.1 as the index and the segment repetition number as the array element value. Then $ORDER() through it get the source segment repetition number and assign that segment to the target in AIS:3.1 order. For example: The variable tAISArr will be subscripted by the values in AIS:3.1. So now we just $ORDER() through tAISArr in a code action: set tIdx = 1 set tKey = $ORDER(tAISArr("")) while (tKey '= "") { // Grab the segment identified by the value of the array subscript set AISSeg = source.GetValueAt("RGSgrp(1).AISgrp("_tAISArr(tKey)_").AIS") // stuff it into the target segment at the current position of the value of the loop counter tIdx do target.SetValueAt(AISSeg,"RGSgrp(1).AISgrp("_tIdx_").AIS") // Don't forget to renumber the Set ID do target.SetValueAt(tIdx,"RGSgrp(1).AISgrp("_tIdx_").AIS:1") set tIdx = tIdx + 1 set tKey = $ORDER(tAISArr(tKey)) } Sample Input: Sample Output:
go to post Jeffrey Drumm · Nov 5, 2021 Actually, the query EnumerateJobStatus from the same class does exactly what I want, but I'm gonna mark your answer as accepted anyway The use-case here is self-resolving Managed Alerts, in case you were wondering
go to post Jeffrey Drumm · Oct 27, 2021 Looks like I've gotten past the "Driver could not be loaded issue." I'm now getting: Remote JDBC error: com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "Certificates do not conform to algorithm constraints". This appears to be a certificate issue on the SQL Server side, and neither property trustServerCertificate=true nor encrypt=false has any effect.
go to post Jeffrey Drumm · Oct 27, 2021 I've gone over the driver configuration dozens of times, verifying the driver classname, classpath, permissions and tried many different variations of properties. The result from the IRIS terminal test: USER>d $system.SQLGateway.TestConnection("SqlServerJDBC") Connection failed: USER>zw %objlasterror %objlasterror="0 "_$lb($lb(5023,$c(0),,,,,,,,$lb(,"USER",$lb("e^TestJConnection+15^%apiGTW^1","e^TestConnection+25^%apiGTW^1","e^zTestConnection+1^%SYSTEM.SQLGateway.1^1","d^^^0"))))/* ERROR #5023: Remote Gateway Error: */ Doesn't seem to tell me much ...
go to post Jeffrey Drumm · Oct 27, 2021 @Rodolfo Moreira dos Santos, thank you for posting your solution. I've been struggling with getting either ODBC or JDBC configured for communicating with MSSQL ... and while JDBC still isn't working, your post allowed me to establish an ODBC connection to the SQL server. With IRIS 2021.1 on RHEL 8.4, the only steps (performed in <iris-install-dir>/bin) required were: [root@HCSVR bin]# mv odbcgateway.so odbcgateway.so.old [root@HCSVR bin]# cp odbcgatewayur64.so odbcgateway.so [root@HCSVR bin]# chown irisusr:irisusr odbcgateway.so
go to post Jeffrey Drumm · Oct 27, 2021 @Alexander Koblov, can you clarify the relationship between the JDBC Gateway and the SQL Gateway Connection option for JDBC? Is the JDBC Gateway the same thing as the %JDBC.Server located under External Language Servers in IRIS 2021.1, since there is no "JDBC Gateway" menu option in the Management Console? I'm currently attempting to set up a JDBC SQL Gateway connection for MSSQL Server and am unable to get the jre16 (or jre8) driver to load. OpenJDK 1.8 is installed, JAVA_HOME is set, $JAVA_HOME/bin is in the path, and IRIS has been restarted. We're running IRIS/HealthConnect on RHEL 8.4. I noticed that when clicking the "Test" button in the connection configuration page that the %JDBC.Server is started before getting the error "Connection failed. The driver cannot be loaded" so there appears to be some relationship between the two, but even with logging turned on I'm not seeing any reference to the MSSQL driver's failure to load.
go to post Jeffrey Drumm · Oct 26, 2021 Do you have a space character between the ! and SFTP in your service settings? You shouldn't ... I'm not sure that's related to the problem you're having but that's the first thing I would fix. Can you establish a connection to the target system from the HealthConnect server itself, using the command-line sftp utility? I believe you mentioned FileZilla in another post, but it wasn't clear that you were attempting to connect from your own desktop or the HealthConnect server itself (which I suppose could be the same thing for a local, personal installation). Finally, to be clear, you've created a Credentials entry in Ensemble (Interoperability in most recent versions) | Configure | Credentials, called something other than !SFTP, that contains the user ID and password for the remote system? And you've specified that entry name in the Credentials field? You mention "login information in Basic Settings" which I would assume means credentials, but I just want to make sure ...
go to post Jeffrey Drumm · Oct 25, 2021 In the latest versions of HealthConnect/IRIS for Health, sftp is now a specific protocol that can be selected from a drop-down list in the Connection Settings section. And if you are on one of the latest versions, make sure you're selecting the correct Credentials field as there are two: Credentials in the Basic Settings section, and SFTP Passphrase Credentials in the SFTP section. The former is where you want your logon user ID and password credentials selected; the latter is specifically for the passphrase used to unlock the private key when using public/private key authentication. It does nothing for SFTP password-based authentication.
go to post Jeffrey Drumm · Oct 19, 2021 PID:3 is a list, meaning it has the potential to contain multiple ID numbers separated by the repetition character (normally a tilde). If you only want the first ID number to appear on the target field, don't use a for each loop. Just use a single set rule as shown below: Note that there's no repetition indicator in the target path, and we're selecting the first repetition in the source:
go to post Jeffrey Drumm · Oct 18, 2021 Sure, just set the value of target.{PID:3} to source.{PID:3.1}. It will overwrite the entire field with just what was in the first sub-field: Like this (assuming you want the first iteration of PID:3.1 to overwrite all iterations of PID:3):
go to post Jeffrey Drumm · Oct 18, 2021 I don't have access to Ensemble 2013.1, unfortunately. I'm not seeing anything that looks like a Serial adapter/service in the most recent versions of Ensemble/HealthConnect, though. Is the inbound service a custom class? (EDIT: Subject mentions TCP, but reply still mostly applies).You should be able to extend the class, replacing the $C(13) character with $C(13,10) in the the OnProcessInput() callback method before sending the message to the routing process.
go to post Jeffrey Drumm · Oct 10, 2021 I will add that I am very grateful to ISC for finally adding this foreach feature to the routing rule functionality (it appears to have become available with 2020.4). I have one quibble, though ... it would be wonderful to be able to exit the loop without returning from the ruleset (i.e. "break"). The current mechanism forces you to loop through all repetitions regardless of the desired condition being met before the final loop iteration is reached. A design pattern where I might wish to assign a value to a variable and exit the loop when the condition is met (rather than executing a send) is something I can envision doing regularly.
go to post Jeffrey Drumm · Oct 9, 2021 Are you correctly specifying the propertypath for the Document Type of the message? This works as expected for me, where the DocType is 2.5:ORU_R01:
go to post Jeffrey Drumm · Oct 7, 2021 The square bracket notation returns a string containing all of the values for the selected field in the repeating segments, each wrapped in "<...>" characters. So the Length() check is returning false ... This should be closer to what you need:
go to post Jeffrey Drumm · Oct 7, 2021 If you're attempting to determine whether the same value appears in a field for all repetitions of a given repeating segment, the ..RegexMatch() function, virtual document bracket syntax and an appropriately constructed regular expression should be able to handle this: EDIT: My original example included a caret ("^") as the regex begin string anchor, but it appears the RegexMatch() method forces the pattern the pattern to be begin and end anchored. In other words, the pattern supplied as the 2nd argument is automatically wrapped with "^" at the beginning and "$" at the end. You can add them if you like, but doing so doesn't change the behavior.