Marc Mundt · May 11, 2016 go to post

I retract my question.

It seems that the installer encountered a permissions problems during the upgrade so a number of things got broken, including Atelier support.

After re-upgrading, /api/atelier was created correctly and Atelier can connect to the instance.

Marc Mundt · Jul 13, 2016 go to post

This is more of a Squirrel question so I can't offer specific steps, but on Windows, Java desktop apps are generally started by a .bat file or shortcut which include logic to find the location of the JRE. Usually this just checks if the environment variable JAVA_HOME is set, which I believe is also what Caché does. You could try hardcoding the Squirrel .bat file/shortcut to point to a different JRE.

Marc Mundt · Jul 15, 2016 go to post

It looks like this doesn't work for incoming files. I specified "%Y.txt" as the file spec for EnsLib.HL7.Service.FileService and it fails to pickup a file named "2016.txt".

It's too bad -- these time stamp strings would be perfect, but they seem to only be used when outputting files:

  • Specifying filename for files created by business operations
  • Timestamps appended when a business service archives a file

EnsLib.HL7.Service.FileService

Marc Mundt · Jul 26, 2016 go to post

You can see this schema/table in management portal if you tick the "System" checkbox to display Caché system tables. Queries against this table will work even if the table doesn't appear in the list.

Marc Mundt · Dec 8, 2016 go to post

Hi BN,

Can you share some more information about this? 

- What error do you get in SoapUI?
- What does the WSDL generated by your SOAP service look like?

Best,
Marc

Marc Mundt · Jun 6, 2017 go to post

Yes, you just need to wrap them in parentheses and use "||" for "or":

if ((ReceivingFacility="A") || (ReceivingFacility="B") || (ReceivingFacility="C")) {

Or look at using other functions like $LISTFIND or the "[" (contains) operator:

if ($LISTFIND($LISTBUILD("A","B","C"), ReceivingFacility) {

Marc Mundt · Nov 8, 2017 go to post

Brendan's post is a related issue, but it's important to note that what he describes only applies if you want to update the value of a specific field when that field contains > 32K of data.  The total size of the message isn't an issue.

As an example: if you have an ORU message with a 10 MB PDF stored in OBX:5, you will still be able to update fields in the PID segment using standard DTL functions. But if you want to update OBX:5 you will need to use the functions that Brendan mentioned.

Marc Mundt · Nov 14, 2017 go to post

%ZEN.Auxiliary.jsonProvider can make use of %ZEN.proxyObject to represent the JSON. This wouldn't require a formal class definition for your objects.

Marc Mundt · Nov 15, 2017 go to post

Here's a sample for creating a proxy object and outputting it as JSON:

Set tProxy = ##class(%ZEN.proxyObject).%New()
Set tProxy.Property1 = "Some value 1"
Set tProxy.Property2 = "Some value 2"
Set tSC=##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONStreamFromObject(.tStream,.tProxy)
Write "Result (blank means no error):",$System.Status.GetErrorText(tSC),!
Write "JSON output:",!
Do tStream.OutputToDevice()

This produces the following output:

Result (blank means no error):
JSON output:
{
        "Property1":"Some value 1",
        "Property2":"Some value 2"
}
Marc Mundt · Nov 15, 2017 go to post

Here's a quick example that returns a custom HL7 message back to the upstream system instead of a standard ACK.

Example

Marc Mundt · Nov 20, 2017 go to post

 %syPidtab.inc includes a list of Job Types and their corresponding IDs.

By "configname", are you referring to Ensemble production items or something else?

Marc Mundt · Nov 22, 2017 go to post

Gertjan, can you add your solution to this topic as a new "Answer"?
Thanks,
Marc

Marc Mundt · Feb 8, 2018 go to post

Hi Lorraine,

A few questions to help us get a clearer picture:

  • Which component is generating the 5005 error? Is it the router or the business operation?
  • Can you post a screenshot or the source code for your routing rule?
  • Is your router calling a transformation or just passing the file through unchanged?
  • What happens if you remove all logic from your router and just change it to do a simple "send" with no transformation?

-Marc

Marc Mundt · Feb 8, 2018 go to post

Thanks, this is helpful.

In your routing rule, can you try setting the condition from "Document.OriginalFilename Contains "NTWD33"" to "1"?  Also, can you post a snapshot of the "general" tab in the rule editor?

Marc Mundt · Feb 9, 2018 go to post

Thanks Lorraine.

At this point it would be best to open a WRC ticket so a support rep can help look into this in more detail.

Marc Mundt · Apr 7, 2018 go to post

Mike, can you post a sample of the code you're using and/or details about the utility?

Marc Mundt · Apr 9, 2018 go to post

Archunan,

Can you give some more details about your use case? I'm having trouble picturing what the downstream system should receive.

Should the receiving system just receive a single message that combines the HL7 and flat records together like this?

MSH|^~\&||HC6|||||MDM^T02|||2.5
EVN|T02|20180117094500
PID|||LD572046^^^HC6^MR||Smith^John||19301019|M|||1 Memorial Drive^^Cambridge^MA^02142||||||||063070516
PV1||O|||||ISCGP001^Moore^James|||||||EO|||||HSVN00006|||||||||||||||||||||||||20180117094500|20180117094500
TXA||Progress note||201801170945|JJ021^James^John||||ISCGP001^Moore^James|||19815952^TRANS
OBX||FT|RTF^TRANS||Patient complaining of pain in right big toe. Toe red in colour. To commence on antibiotics.||||||R
FlatFileRow1Field1,FlatFileRow1Field2,FlatFileRow1Field3
FlatFileRow2Field1,FlatFileRow2Field2,FlatFileRow2Field3
FlatFileRow3Field1,FlatFileRow3Field2,FlatFileRow3Field3
Marc Mundt · Apr 10, 2018 go to post

I just read Dave Loveluck's suggestion below and that sounds like a much better option.

Marc Mundt · Jun 27, 2018 go to post

The method signature for OnMessage usually only has two parameters: the inbound request and a response to return.
In your method you have three parameters and two of them seem to be inbound requests. Can you clarify?

Method OnMessage(pREs As TestingEnvironment.ECGTrace.TEST.FSMREQ, pRequest As Ens.StreamContainer, Output pResponse As %Persistent) As %Status

Marc Mundt · Jun 27, 2018 go to post

I see an issue in the first piece of code you posted.

At the top of the method you do this:
set pInput=pRequest.FileStream
But when you write the stream to the file, you do this:
set status=..Adapter.PutStream(..Filename, pInput.Stream)
 
I don't know for certain what type of object pRequest is or pRequest.FileStream, but in the service you posted it looks like pRequest.FileStream is a %Stream.Object.

Method OnProcessInput(pInput As %Stream.Object, Output pOutput As %RegisteredObject) As %Status
...
set pt.filestream=pInput

If pRequest.FileStream is a %Stream.Object, then it won't have a Stream property and passing pInput.Stream to PutStream should fail. Try changing this to:
set status=..Adapter.PutStream(..Filename, pInput)

Marc Mundt · Sep 13, 2018 go to post

Here's an example of what Carlos is suggesting with XECUTE:

ClassMethod CompareValues(val1, val2, operator) as %Boolean {
    set testStatement="set testResult=(val1 "_operator_" val2)"
    XECUTE testStatement
    quit testResult
}

[edited code to fix a typo]

Marc Mundt · Sep 13, 2018 go to post

The "Context" and "Expression" should be wrapped in quotation marks.

Marc Mundt · Sep 20, 2018 go to post

In addition to setting FetchSize, we can also improve the speed with an optimization to how EnsLib.SQL.GatewayResultSet fetches rows for large result sets.
This optimization is planned to be included in a future product version, but it is possible to do this in current versions with custom code. What version of Ensemble are you using?
Guillaume, do you know who the InterSystems Sales Engineer is for your company? We should discuss this by email and we can get you some sample code.

Marc Mundt · Oct 24, 2018 go to post

Joao, just wanted to check with you... did it work after adding quotation marks?

Marc Mundt · Jan 7, 2019 go to post

In the case of moving from AIX to Windows, you're not just changing the OS but also changing the platform (IBM Power to Intel).

As Dmitry said, there's no relation to the OS but there is an important issue when changing platforms: endianness. AIX on Power is big-endian while Windows/Linux/etc. on Intel are little-endian.

The upshot is: when moving a cache.dat from AIX to Windows you'll need to run an included utility to convert it from big-endian to little-endian.

Marc Mundt · Apr 10, 2019 go to post

Have you tried setting "DefCharEncoding" to UTF-8 in the settings for EnsLib.HL7.Operation.HTTPOperation?

Here are the details from the popup-help. Especially note the highlighted line. Using "!UTF-8" will cause the operation to ignore what's in MSH:18 and always use UTF-8.

Default Character Encoding to use when reading or writing HL7 messages.
If MSH field 18 (Character Set) is empty, this encoding will be used. Choices you can use for this setting include:Native: Use the default character encoding of the installed locale of the IRIS server.
latin1: The ISO Latin1 8-bit encoding. This is the default.
ISO-8859-1: The ISO Latin1 8-bit encoding.
UTF-8: The Unicode 8-bit encoding.
Unicode: The Unicode 16-bit encoding (Little-Endian).
UnicodeBig: The Unicode 16-bit encoding (Big-Endian).
Any other NLS definitions installed on this IRIS server.
@<ttable>: <ttable> means a raw InterSystems character translation table name. A prefix of '@' means to use the named table.
Putting ! before the encoding name will force the use of the named encoding and will ignore any value found in MSH:18.