Additional info: if we change the order of <allergies> and <patientNotes> in the schema, it does not change the order of elements produced in the XML.
- Log in to post comments
Additional info: if we change the order of <allergies> and <patientNotes> in the schema, it does not change the order of elements produced in the XML.
Thanks @Robert Barbiaux, that's really helpful.
If only MSH-18 were set... 🙄 Up-stream system isn't setting it! And until yesterday supplier of upstream system was claiming they were sending UTF-8 when we thought the feed looked awfully like Windows-1252. Yesterday they admitted/confirmed they are sending Windows-1252, so at least now we know!!
We've got the same issue, but with an incoming HL7 feed with embedded, encoded characters - would be nice to be able to detect what's coming in, but I take it from this discussion that's not (reliably) possible. Don't really want to scan the whole text of every incoming message to heuristically look for possible encodings. Upstream say/think they are sending UTF-8, but we seem to be getting Window-1252, for the characters we've seen in the (limited) testing. Who knows what will come through the feed once it goes live!
Never mind, our support people had updated the Java version, despite what the logs said! And because they hadn't restarted Ensemble/the server, it still had the old JAVA_HOME in its environment. We are currently banging their heads against the nearest wall for them! 🙄
Thanks Ben, that confirms what we suspected and gives us a tool to try and remedy the situation if (as we suspect) the supplier of the "interfering" system isn't very interested in fixing something affecting a tiny number of developers!
Auto-adjust / design question 4: we'd find this useful, especially if it handles bulk renames - a bunch of classes implementing a data type, all being moved in one go from one place in the class hierarchy to another and all being consistently renamed.
So files X/Y/A.cls, X/Y/B.cls, X/Y/C.cls, and containing classes X.Y.A, X.Y.B, and X.Y.C being moved to Q/P/A.cls and Q.P.A etc. Especially if Properties defined in X.Y.A as "Property pp As X.Y.B" becomes "Property pp As Q.P.B" when renamed.
Closing off an old question for completeness, we never did get Zen working. In the end we used Apache FOP directly:
This puts the output PDF onto the filesystem from where, in our solution, it is later picked up for onward transmission to a downstream system.
For the sake of closing off this old question, and to answer my own question, in light of more experience and some testing...
Thanks Deepak, that's a neat trick - hadn't thought to go sideways like that. You could even have a more complicated lookup table arrangement with times as well as document send limits encoded in the lookup, so your schedule was encoded in the lookup table values rather than embedded in your code.
Business Operation is one generated by SOAP Wizard. It is being fed by a custom Business Process that runs in response to a scheduled task - the BP queries a database table and extracts a set of documents to send. At certain points in the day we want to query the table like this:
SELECT * from TABLE
while at other points in the day we want to query the table like this:
SELECT TOP NN * from TABLE
Then the documents selected by the query are sent, in turn, to the Business Operation for onward transmission.
We have a situation that looks suspiciously similar:
More detail:
Here's an illustrative screenshot - yellow are first HL7->XML->PDF, green are second HL7->XML->PDF. Yellow produces a PDF, green doesn't. As far as we can tell the FOP commands should be independent (no shared files - unless stylesheets can't be opened by multiple processes simultaneously?)
.png)
Only thing we've seen in documentation that gives us pause is the line: "On a Windows system you should never omit both the /ASYNC and /STDIN flags." (from $ZF(-100) | InterSystems IRIS Data Platform 2024.2) - but when only one copy is running it appears to be fine with "" as the flags argument.
Is this a $ZF/Ensemble issue, or is it something about FOP specifically?
Sorry Sandeep, no real resolution. As I indicated, it was a development server and we scrubbed it and reinstalled Ensemble - haven't seen the issue since.
7 years after it was written, this comment helped us sort our problem - we are disabling components to prevent further attempts at processing on certain error conditions, and were struggling to get the EnableConfigItem() call to take effect immediately... Sorted now.
Say you have the same code (Production) running on different servers - for example, a local instance on a developers own machine, a test server used for system testing and a production server.
Your code accesses an external web-service. The actual web-service will be different for each system - maybe a mock service for the developer, a test version of the web-service for the test system and a production version for your production server. Then the URL for accessing the web-service would be different for each one.
In your code you have a setting on the business operation in your production that connects to the web-service. The value of this setting can be set from the System Defaults Settings page, and will contain different values between the servers.
This allows you to separate out settings that will be the same across all servers, and settings that will differ between servers - settings that are the same on all servers can be set on the services/processes/operations themselves, settings that differ will be set via system defaults.
Not sure it counts as an answer, but what we did to step round this issue was to move the bulk of the functionality - where the error handling was required - into a new business process, leaving only the most basic "pass the trigger message along" functionality in the business service. Added an extra component to the production, but we can now see errors in the log when they occur, and they are passed appropriately to Ens.Alert.
Never mind, I'm an idiot. One of my colleagues found the issue - I thought I had, but I hadn't managed to add both:
I think I'd added one to TNHS.SOAPclassExtra, hadn't worked, tried the other, but somehow failed to check both together...🙄 Working now.
Follow-up/solution: we can do:
set message2 = message.%ConstructClone(1)
and then use message for the XML generation and message2 for calls to GetValueAt, and that works OK.
Still don't know why GetValueAt appears to change the content of the message...
Follow-up, as a quick and dirty check, I replaced the call to GetValueAt above with:
set step1 = $PIECE(message.RawContent,"OBR|")
set step2 = $PIECE(part1, "ORC|", *)
set ReportId = $PIECE(part2, "|", 3, 3)This works before calling the XML generation code when GetValueAt doesn't - so GetValueAt is definitely doing something to the contents of the HL7 message....
Thanks Eduard, that answered my question without me having to ask it!
I'm interested in finding out more about the GitLab CI/CD pipeline options that might be available outside of the Cloud offering.
We are currently Ensemble 2018.1, though hopefully moving to Iris soon. Our development workflow is:
So we'd be really interested in the CI/CD options mentioned in the GitLab instance offered as part of the Iris/Health Connect Cloud - the dev, test and production deployment deployments. Is the stuff offered on the Cloud available on prem? Is there more information available somewhere about the CI/CD options in GitLab and integrating with Iris?
Thanks, helpful to explore another potential option. If I'm reading https://docs.intersystems.com/iris20233/csp/docbook/DocBook.UI.Page.cls… correctly then we'd need to use the OnProductionStart method of the business process to run when the job is scheduled - and not sure that's obviously accessible in a BPL business process. There are otherwise no incoming messages to trigger action.
Can I clarify: "Run at a scheduled time" could mean either:
We are interested in the second of these - we want a batch job to run at 0800, at 1300, and at 1600 each day. When it runs it will scoop all the current labs results out of the database table where they have been accumulating, and send them on to the downstream system.
Thanks for this. Yes, Schedule is there in Ensemble 2018.1 as an additional setting. We will investigate and see whether its a suitable/cleaner alternative to Ashok's suggestion.
Thanks @Ashok Kumar T , with a bit of tweaking that got us to where we needed to go. For clarity for anyone coming along and reading this later the steps would be:
Once all this is in place, you can call a BPL Business Process from a scheduled task.
Thanks Ben, helpful answer. Another reason to try and kick our organisation towards upgrading to Iris 😉
Keren, great, thanks - this has allowed me to see the content of the messages and I can dig further.
Thanks, yes, this is what it needed to be - got there myself, as it happens, but thanks. Documentation wasn't very clear.
I asked a related question a few months ago - I'll link to answers here. There is some overlap, eg Alex Woodhead's comparison tool, but hopefully helpful. Comparing code on running servers | InterSystems Developer Community |
Carmen, thanks, that's really helpful. If we need further information we'll reach out - as is so often the case, I'm doing some technical investigation for a development that may not ever be tackled, or may be tackled in a different way, or whose specifications will change wildly before we tackle it, or...!!!