Marc Mundt · Jan 15, 2021 go to post

Yes, it's possible. Your input message is HL7, so you can just paste raw HL7 into the test tool.

Marc Mundt · Jan 14, 2021 go to post

You need to literally use %Ensemble("%Process")... Don't replace "%Process" with the name of your component.

Marc Mundt · Jan 14, 2021 go to post

A reference to the business process (our message router) that the DTL is being run from is stored in %Ensemble.("%Process") and you can use that to do a SendRequestSync.

Be sure to add lots of error handling. DTLs throwing strange errors can be a pain to troubleshoot.

    if '$D(%Ensemble("%Process")) {
        write "This doesn't work in DTL test mode",!
        quit $$$OK
    } else {
        #dim bp as Ens.BusinessProcess

        set req = ##class(Ens.Request).%New()

        set bp=%Ensemble("%Process")
        set tSC=bp.SendRequestSync("My.Operation",req,.resp)
        
        if $$$ISERR(tSC) {
            // Oops... error!
        }
        
        quit tSC
    }
Marc Mundt · Jan 7, 2021 go to post

I didn't read your post carefully enough -- I see that you're passing the column name as a variable named "index". Embedded SQL doesn't allow using host variables (e.g. :myVar ) in place of an identifier:

A host variable cannot be used to specify an SQL identifier, such as a schema name, table name, field name, or cursor name. A host variable cannot be used to specify an SQL keyword.

The alternative would be to switch from embedded SQL to Dynamic SQL, which would allow you to manually construct your query string before executing it:

set myQuery="SELECT "_index_" FROM osuwmc_Tecsys.UnitReference WHERE "_index_" = ?"

"value" would then be passed as a parameter when executing the statement and you would use "%Get" in the result set to fetch the value for ValidUnitID.

Marc Mundt · Jan 7, 2021 go to post

If "index" is a column name in the table then it shouldn't have a colon at the front.

Also, it's best to check the SQLCODE in order to handle errors:

if SQLCODE < 0 {
   // Do something about an error
} else {
   quit myReturnValue
}
Marc Mundt · Jan 5, 2021 go to post

Hi Yone,

I see two possible problems:

It seems like "Do ImagenMIMEPart.Body.Write(linea)" should be inside the while loop. No? In this case after the final read() linea may be empty and that is what is set as the content of the mime part.

While 'stream.AtEnd {
          Set linea=stream.Read()
      }
      $$$LOGINFO("linea: "_linea)
      //Escribir la imagen en el mensaje MIME
     Do ImagenMIMEPart.Body.Write(linea)

And here you are using a character stream to read the jpeg, but jpeg is a binary format. You'll want to use %Stream.FileBinary instead.

Set stream=##class(%Stream.FileCharacter).%New()
      Set sc=stream.LinkToFile("C:\Users\ext-ymorjim\Pictures\miSCS.jpg")
Marc Mundt · Dec 8, 2020 go to post

Yes, from system management portal System Explorer >> SQL you can enter a query and instead of executing it click "Show Plan".

Marc Mundt · Dec 2, 2020 go to post

%K(-5) wouldn't take care of DST automatically. $ZDATETIMEH(myUTCTime, -3) will convert a $HOROLOG format (actually $ZTIMESTAMP format) value of UTC time into a $HOROLOG value in local time. So you can first use ConvertDateTime with %q(4) to convert to $ZTIMESTAMP format, then use $ZDATETIMEH with -3 to convert to local time, then use ConvertDateTime (or $ZDATETIME) to convert the $HOROLOG format back into a formatted date/time string.

https://docs.intersystems.com/healthconnectlatest/csp/docbook/Doc.View…

https://docs.intersystems.com/healthconnectlatest/csp/docbook/Doc.View…

Marc Mundt · Dec 2, 2020 go to post

Yes, this can be done through configuration and is a standard feature of the HL7 HTTP business operation (EnsLib.HL7.Operation.HTTPOperation).

Details on settings for the HTTP operation. Look in particular at SSLConfiguration:
https://docs.intersystems.com/healthconnectlatest/csp/docbook/Doc.View…

Details on creating an SSL/TLS config (with or without cert) to be used by the operation:
https://docs.intersystems.com/healthconnectlatest/csp/docbook/DocBook.U…
 

Marc Mundt · Nov 20, 2020 go to post

A few people have suggested using web services, which seems like the most straightforward approach to me. Anna, is there a reason not to use a web service?

Marc Mundt · Nov 15, 2020 go to post

Yes, it's possible by editing the chartbook. Each chart in the chartbook can be assigned a sequence number, charts are then displayed in numerical order of the sequence number.

Marc Mundt · Nov 6, 2020 go to post

Have a look at %Regex.Matcher. Since you always want the 2nd capitalized section you can just make that your regex capture group:

    set matcher=##class(%Regex.Matcher).%New("^[A-Z][a-z]*([A-Z][a-z]*)")                             
    set matcher.Text="ToVendornameORM"
    if matcher.Locate() {
        write "Found ",matcher.Group(1)," at position ",matcher.Start,!
    }

This gives me the output:

Found Vendorname at position 1
Marc Mundt · Nov 4, 2020 go to post

During a period when messages are processing slowly, can you check the queues page (Ensemble >> Monitor >> Queues) and see if there are messages waiting to be processed?

The next step would be to collect some pButtons data to see if there's a performance bottleneck on the system:
https://community.intersystems.com/post/intersystems-data-platforms-and…

Even before running the pButtons it would be worth doing a quick check in the OS to see which processes (Ensemble and non-Ensemble processes) are using the most CPU and RAM.

Marc Mundt · Nov 4, 2020 go to post

This may not mean that the rules are processing slowly. Is it possible that there were a large number of messages queued for HisEmrRouter?

Marc Mundt · Oct 16, 2020 go to post

For any new application you'll want to select Unicode. 8-bit would be used for legacy applications that were designed for 8-bit character sets.

Marc Mundt · Oct 16, 2020 go to post

Yes, you can store the values in a multidimensional array. And the syntax you showed is correct:

for j=0:1:ref.NOK.%Size()-1  
        {
            set MyNOKname(j)=NOK.%Get(j).NOKname
        }

Marc Mundt · Aug 12, 2020 go to post

It's strange that with StayConnected set to 120 the service is not closing the connection. WRC could help figure out why we're not disconnecting.

You can use this method to programmatically disable/stop and re-enable the service:
s tSC=##class(Ens.Director).EnableConfigItem("Demo.HL7.TCPService",0)

Marc Mundt · Aug 12, 2020 go to post

Have you considered setting Stay Connected on the business service? This will cause the service to close the connection automatically after a specified amount of idle time since the last message arrived. The upstream system can then reconnect whenever it wants.

Marc Mundt · Aug 6, 2020 go to post

Since both formats are XML-based, you could write an XSLT to do the conversion. To further automate the process you could create COS that calls the XSLT, creates a new DTL file and inserts the rules into the XData block, and compile the new DTL.