go to post Marc Mundt · Jun 13, 2022 You'll want to configure the passthrough service to use "Standard Requests". This means REST requests will pass through a web server (IIS, Apache, etc) to get to IRIS:https://docs.intersystems.com/irisforhealth20221/csp/docbook/DocBook.UI.... For TLS, you'll enable HTTPS on your web server. And see this docs on enabling OAuth for web services:https://docs.intersystems.com/irisforhealth20221/csp/docbook/DocBook.UI....
go to post Marc Mundt · Jun 13, 2022 Yes, the GenericService will send an EnsLib.HTTP.GenericMessage object to your business process. The GenericMessage includes the headers and content of the inbound HTTP request. Your DTL can use these fields to transform to another format. Similarly, the GenericOperation accepts the same GenericMessage type and uses the values in it to issue an HTTP request to the downstream system. So all together, this allows you to create a REST web service and/or call out to external REST services using only the GUI. https://docs.intersystems.com/irisforhealth20221/csp/docbook/DocBook.UI....
go to post Marc Mundt · Jun 6, 2022 Here's a sample class to Base64 encode a stream: 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 · 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 · May 20, 2022 If you can assume that the zip is always 5 digits and state is 2 digits, and if you can assume that the separator is always 1 character then you can do it by position: set ZIP=$EXTRACT(x,*-4,*), STA=$EXTRACT(x,*-7,*-6), CTY=$EXTRACT(x,0,*-9)
go to post Marc Mundt · May 5, 2022 Try removing the JsonArayOBJ argument from your call to SendFormDataURL. set st = ..Adapter.SendFormDataURL(..Adapter.URL,.callResponsePat,"POST",HTTPRequestPat)
go to post Marc Mundt · May 5, 2022 Can you give some more details on what's happening? Is there an error message?
go to post Marc Mundt · May 5, 2022 Can you clarify a bit? Do you want to use curl to make an HTTP request to a web service running in Ensemble? Or do you want Ensemble to launch curl to make an HTTP request to an external web service?
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 26, 2022 Is there already a defined structure for these globals/do these globals already exist? Or will you design something new?
go to post Marc Mundt · Apr 26, 2022 Can you explain more about your use case? What is the purpose of copying these fields directly into globals? Is there another application that will read the values from the globals?
go to post Marc Mundt · Apr 25, 2022 All persistent classes will save their data in globals automatically. It will save using the standard structures of the IRIS SQL layer. If you have an existing global structure that you need to maintain you'll need to map your classes to your global structure. See this series of articles on how to do that.
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 22, 2022 I messed up the syntax: &sql(select LIST(MessageName), LIST(Identifier) INTO :tMsgNmList, :tIdentList from GMECC_DocmanConnect_Tables.ParisConnecMessagetSettings)
go to post Marc Mundt · Apr 22, 2022 How about this? Do the values returned in tMsgNmList and tIdentList match the values you're searching for? &sql(select LIST(MessageName) INTO :tMsgNmList, LIST(Identifier) INTO :tIdentList from GMECC_DocmanConnect_Tables.ParisConnecMessagetSettings) write SQLCODE, ":", tMsgNmList,":",tIdentList,!
go to post Marc Mundt · Apr 21, 2022 If you try this what does it return? &sql(select count(*) INTO :tCount from GMECC_DocmanConnect_Tables.ParisConnecMessagetSettings Where MessageName = :tMessageName and Identifier = :tIdentifier) write SQLCODE, ":", tCount,!
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.