go to post Marc Mundt · May 10 Have a look at the HTTP Passthrough Service/Operation. They work with messages of type EnsLib.HTTP.GenericMessage, which can be used in a similar way to what you described with Interop requests.
go to post Marc Mundt · Jan 18 I've seen Zen reports used extensively for Chinese content, so they can definitely handle the far reaches of the Unicode realm. What happens if you do this? write !,"<PostInfo>My GE: "_$c(8805)_"</PostInfo>" or this? write !,"<PostInfo>My GE: "_$zcvt($c(8805),"O","UTF8")_"</PostInfo>" Some other things to check: Check if the TTF file for the font you're using contains that glyph. Make sure your report is set to use UTF-8 encoding: https://docs.intersystems.com/ens201815/csp/docbook/DocBook.UI.Page.cls?... Look at the intermediary files (the .xml which contains the data in particular) that Zen generates to see if/how that item was output: https://docs.intersystems.com/ens201815/csp/docbook/DocBook.UI.Page.cls?... https://docs.intersystems.com/ens201815/csp/docbook/DocBook.UI.Page.cls?... Check to see if FOP is reporting any errors: https://docs.intersystems.com/ens201815/csp/docbook/DocBook.UI.Page.cls?...
go to post Marc Mundt · Oct 13, 2022 Have you looked into tuning the JVM heap settings? It's possible the JVM is running out of heap space. https://www.baeldung.com/jvm-parameters
go to post Marc Mundt · Oct 13, 2022 There are some open source tools that can convert from XLSX to CSV. You could call out to these from your ObjectScript code:https://csvkit.readthedocs.io/en/latest/tutorial/1_getting_started.html#...https://stackoverflow.com/questions/10557360/convert-xlsx-to-csv-in-linu...
go to post Marc Mundt · Sep 20, 2022 "#" is for referring to a parameter defined in the class. Parameters are similar to static variables in Java. https://docs.intersystems.com/irisforhealth20221/csp/docbook/DocBook.UI....
go to post Marc Mundt · Sep 16, 2022 Hopefully this can save you some work. It uses a much larger chunk size (which is a multiple of 57) and works with or without CR/LFs (set the argument pAddCRLF): Class Example.B64.Util Extends %RegisteredObject { /// Be cautious if changing CHUNKSIZE. Incorrect values could cause the resulting encoded data to be invalid. /// It should always be a multiple of 57 and needs to be less than ~2.4MB when MAXSTRING is 3641144 Parameter CHUNKSIZE = 2097144; ClassMethod B64EncodeStream(pStream As %Stream.Object, pAddCRLF As %Boolean = 0) As %Stream.Object { set tEncodedStream=##class(%Stream.GlobalCharacter).%New() do pStream.Rewind() while ('pStream.AtEnd) { set tReadLen=..#CHUNKSIZE set tChunk=pStream.Read(.tReadLen) do tEncodedStream.Write($System.Encryption.Base64Encode(tChunk,'pAddCRLF)) if (pAddCRLF && 'pStream.AtEnd) { do tEncodedStream.Write($c(13,10)) } } do tEncodedStream.Rewind() quit tEncodedStream } }
go to post Marc Mundt · Jul 21, 2022 My experience with Zebras was quite a few years ago, so this may or may not still apply... Using Zen reports at the time, the print server would end up rendering the label as a bitmap and sending that over to the Zebra. ZPL code to print an equivalent label was much smaller than a bitmap, so ZPL labels tended to print faster than those rendered by a report.
go to post Marc Mundt · Jun 14, 2022 Ok, so the flow would look roughly like this: The GenericService accepts an inbound REST request, populates a GenericMessage, and sends it to your business process Business process extracts the JSON payload from the GenericMessage, and pulls out any relevant details needed for the call to Athena Business process creates a new GenericMessage, populates any items needed by Athena, uses %SYS.OAuth2 (and the OAuth client profile you created) to request an OAuth token and adds it to the GenericMessage, and passes the new GenericMessage to the business operation. Business operation makes the outbound REST call to Athena, and returns a new GenericMessage containing the response to your business process. Business process extracts JSON payload from the GenericMessage, uses a transformation to create the payload required by your internal REST client. Business process creates a new GenericMessage, populates it with the response payload, and returns it to the GenericService GenericService returns response to REST client
go to post Marc Mundt · May 24, 2022 Fortunately it's a simple issue. In your CALL action, you need to add a "Request Action" and set callrequest to the object you want to send to the BO. It looks like you're just modifying the inbound request so you could just set callrequest to request.
go to post Marc Mundt · Apr 29, 2022 You can put something similar to Jeffrey's logic directly in the Value of the Set action. Instead of using $E ($EXTRACT) you would use DTL's built-in SubString function: ..SubString("123456789",1,3)_"-"_..SubString("123456789",4,5)_"-"_..SubString("123456789",6,9)
go to post Marc Mundt · Apr 26, 2022 Since this is a new design you should use persistent classes (SQL tables/objects) instead of writing directly to globals. A Data Transformation can use any persistent class as it's target, so this is also easier than storing directly in globals. https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI...
go to post Marc Mundt · Apr 25, 2022 Have a look at this previous thread. And there's a built-in capability in IRIS to see ports in use by different components.
go to post Marc Mundt · Apr 13, 2022 And does your target message really need to be an ADT_A01? Merges use ADT_A18 messages, so you can just set ADT_A18 as your target message type and it will allow you to add the MRG segment:
go to post Marc Mundt · Apr 13, 2022 Just to add a bit of context to the above:An example use case where you would want to return the operation's response back to the service would be in an HL7 integration where, instead of having the service generate an ACK to return to the upstream sending system, we want to return the ACK or NAK that we got back from the downstream receiving system.
go to post Marc Mundt · Apr 13, 2022 What Response From does is control which responses from a call to an operation (or another component) are returned to the business service that called the router. By default the router won't return the response to the service, but setting Response From will enable responses to be returned from specific operations (or * for all operations). This is how you can control which response gets sent back to the service in a case when a router calls multiple operations. If multiple responses match the Response From setting, then only the first response will be returned to the service. Response Target Config Names allows you to specify additional components (beyond the service that called the router) that should receive a copy of the response that came back from the operation. So you could send a copy of an ACK or other response to another operation for some reason. All of this is probably moot, because I'm guessing your service doesn't need to receive a response. In terms of the NULL responses, these shouldn't become orphans -- the fact that they appear in the message trace tells us that the production knows which session they belong to so they should get deleted along with the rest of the session.
go to post Marc Mundt · Apr 12, 2022 Absolutely. You can do this with two assign actions: First assign action moves the stream pointer to the end of the stream content: The second assign action writes our new content to the end of the stream: And an extra note of explanation: what we're actually doing with these assigns is calling a method in the request class, which returns a status code, and assigning that status code to a temporary variable. It would be best to check this status code to see if there was an error, but I haven't added that here to keep things simple.
go to post Marc Mundt · Apr 11, 2022 Since you don't need to modify the request/response maybe pass-through services and operations will meet your needs?
go to post Marc Mundt · Apr 5, 2022 This section in the docs discusses business processes and routers. You could use either one -- routing rules tend to be faster/easier to create. Basically, your business process or routing rule would create a notification message and send it to a business operation. The process/router could construct the notification message directly or could call a data transformation that would create the notification message. The operation would send the notification to an external system. One example would be to use an email operation to send the notification to an email server. Our online learning portal also has some courses that cover these topics: Integration Architecturehttps://learning.intersystems.com/course/view.php?id=908 Building a Message Routerhttps://learning.intersystems.com/enrol/index.php?id=1745 Building BPL Business Processeshttps://learning.intersystems.com/enrol/index.php?id=1290 Data Transformations Basicshttps://learning.intersystems.com/course/view.php?id=1170
go to post Marc Mundt · Apr 5, 2022 Can you elaborate on the limitations you see in DocumentType that are leading you to think about using Custom Pairs? DocumentType is of type HS.SDA3.CodeTableDetail.DocumentType, which can store a code, description, and the code system. Seems like that's what you need, and it already maps to DocumentReference:type in FHIR.