go to post Oliver Wilms · Mar 21, 2023 I created a class for dynamic query: Class otw.dynq { ClassMethod prepareQ() As %Status { Set result=##class(%ResultSet).%New("%DynamicQuery:SQL") Set sc=result.Prepare("SELECT %ID, Name, Salary FROM Sample.Employee WHERE Salary > ?") If $$$ISERR(sc) { // here I want to capture the error details in trace , log , that I can see in production web page Try { Do ##class(%SYS.System).WriteToConsoleLog("%ZSTART Routine: "_"Import Users",0,0) } Catch exception { Do BACK^%ETN // Log error in error log } } Quit sc } } I call the Dynamic Query Prepare from BPL and Trace the Status Text from the Prepare: /// Class otw.bplJSON2HL7 Extends Ens.BusinessProcessBPL { /// BPL Definition XData BPL [ XMLNamespace = "http://www.intersystems.com/bpl" ] { <process language='objectscript' request='Ens.Request' response='Ens.Response' height='2000' width='2000' > <context> <property name='dynPrepareStatus' type='%Library.Status' instantiate='0' /> </context> <sequence xend='200' yend='750' > <trace name='request.Stream.Read()' value='request.Stream.Read()' xpos='200' ypos='250' /> <assign name="dynPrepareStatus" property="context.dynPrepareStatus" value="##class(otw.dynq).prepareQ()" action="set" xpos='200' ypos='350' /> <trace name='dynPrepareStatus' value='$System.Status.GetOneStatusText(context.dynPrepareStatus)' xpos='200' ypos='450' /> <transform name='otw.dtlJSON2HL7' class='otw.dtlJSON2HL7' source='request' target='response' xpos='200' ypos='550' /> <call name='HL7FileOperation' target='HL7FileOperation' async='1' xpos='200' ypos='650' > <request type='Ens.Request' > <assign property="callrequest" value="response" action="set" /> </request> <response type='Ens.Response' /> </call> </sequence> </process> } Storage Default { <Type>%Storage.Persistent</Type> } } The code is in this GitHub repo: https://github.com/oliverwilms/HL7
go to post Oliver Wilms · Mar 21, 2023 Joe, I just realized I had not updated the Production class with the business process in GitHub. It is now here: https://github.com/oliverwilms/HL7/commit/ce501e84f603ecb30085cd41957b78...
go to post Oliver Wilms · Mar 21, 2023 Joe, I created a HL7 production, added JSON Passthrough File Service. Use BPL and DTL to transform Ens.StreamContainer to HL7 Message. Code is here: https://github.com/oliverwilms/HL7 Input test file I use this (no double double quotes): {"Doctype":"ADT^A01","PatientId":"123","PatientName":"Alex"} I see PatientId in HL7 message, but not PatientName. Need to review the DTL ...
go to post Oliver Wilms · Mar 21, 2023 I think I get parsing error because of bad data in my input file: {""Doctype"":""ADT^A01"",""PatientId"":""123"",""PatientName"":""Alex""} I will try with removing the extra quotes.
go to post Oliver Wilms · Mar 20, 2023 I tried to implement in HL7 production created by New Production wizard. I think we cannot process Ens.StreamContainer using RoutingRule because Ens.StreamContainer does not have DocType property. Going to try with a BPL Business Process ...
go to post Oliver Wilms · Mar 14, 2023 Class HS.Local.Example.ProcessBPL Extends Ens.BusinessProcessBPL{ Storage Default{<Type>%Storage.Persistent</Type>} /// BPL DefinitionXData BPL [ XMLNamespace = "http://www.intersystems.com/bpl" ]{<process language='objectscript' request='EnsLib.HTTP.GenericMessage' response='EnsLib.HTTP.GenericMessage' height='2000' width='2000' ><context><property name='SuccessResponse' type='%String' instantiate='0' ><parameters><parameter name='MAXLEN' value='50' /></parameters></property><property name='ConvertedStream' type='Ens.StreamContainer' instantiate='0' /></context><sequence xend='200' yend='1000' ><code name='ConvertedStream' xpos='200' ypos='250' ><![CDATA[ If 1=request.%IsA("Ens.StreamContainer") { Set context.ConvertedStream = request } If 1=request.%IsA("EnsLib.HTTP.GenericMessage") { Set context.ConvertedStream = ##class(Ens.StreamContainer).%New() Set context.ConvertedStream.Stream = ##class(%GlobalCharacterStream).%New() Set tSC = context.ConvertedStream.Stream.CopyFrom(request.Stream) Set context.ConvertedStream.OriginalFilename = $Piece(request.HTTPHeaders.GetAt("RawParams"),"=",2) } If 1=request.%IsA("EnsLib.Kafka.Message") { Set context.ConvertedStream = ##class(Ens.StreamContainer).%New() Set context.ConvertedStream.Stream = ##class(%GlobalCharacterStream).%New() Set tSC = context.ConvertedStream.Stream.Write(request.value) Set context.ConvertedStream.OriginalFilename = request.key Set tSC = context.ConvertedStream.%Save() }]]></code><if name='Check Test Transaction' condition='context.ConvertedStream.OriginalFilename="TEST.txt"' xpos='200' ypos='350' xend='200' yend='700' ><false><code name='Store Document' xpos='335' ypos='500' disabled="false"><![CDATA[ Set tSC = ##class(HS.Local.VA.eSCM.FMS.Util).StoreStream(context.ConvertedStream,context.ConvertedStream)]]></code><call name='Call ToIrisMail Operation' target='ToIrisMail' async='0' xpos='335' ypos='600' ><request type='Ens.StreamContainer' ><assign property="callrequest" value="context.ConvertedStream" action="set" /></request><response type='EnsLib.HTTP.GenericMessage' /></call></false></if><code name='setting of success response' xpos='200' ypos='800' ><![CDATA[ Set context.SuccessResponse = "" If 1=request.%IsA("EnsLib.HTTP.GenericMessage") { Set tmp = ##class(%Library.GlobalBinaryStream).%New() Set tSC = tmp.Write("File received successfully") Set tSC = tmp.%Save() Set context.SuccessResponse=##class(EnsLib.HTTP.GenericMessage).%New(tmp,,request.HTTPHeaders) Do context.SuccessResponse.HTTPHeaders.SetAt("HTTP/1.1 200 OK","StatusLine") Set tSC = context.SuccessResponse.%Save() }]]></code><assign name="send response back" property="response" value="context.SuccessResponse" action="set" xpos='200' ypos='900' /></sequence></process>} }
go to post Oliver Wilms · Mar 14, 2023 Hi, Martin, You receive a request via EnsLib.Http.GenericService. I assume you pass the EnsLib.HTTP.GenericMessage request object to a business process. I think you look for an example how to return the response. Let me look for an example ...
go to post Oliver Wilms · Mar 13, 2023 Joe, If your input is a JSON file, the business service could be a File Service which passes Ens.StreamContainer request object to a business process where you could transform the request to an HL7 message which can be sent to a HL7 operation.
go to post Oliver Wilms · Mar 7, 2023 Hello, Scott, ZSTOP can be used to define additional code you want to run at shutdown. The normal shutdown will still happen if you have ZSTOP routine.
go to post Oliver Wilms · Feb 15, 2023 I just logged in containers.intersystems.com from browser. Somehow podman login does not work. I see images under arbiter. I think you should try to add a tag to your run such as arbiter:2023.1.0.185.0 ...
go to post Oliver Wilms · Feb 15, 2023 I just searched history and found these commands somebody else had used. Maybe some could help you: sudo podman login containers.intersystems.com sudo podman search containers.intersystems.com/intersystems/irishealth sudo podman image list containers.intersystems.com/intersystems/irishealth sudo podman pull containers.intersystems.com/intersystems/webgateway-arm64:2022.2.0.372.0 sudo podman search --list-tags containers.intersystems.com/intersystems/arbiter-arm64
go to post Oliver Wilms · Feb 15, 2023 I just tried the same command and I got unauthorized error. The client does not have permission for manifest. Did you login to containers.intersystems.com before you tried the podman run?
go to post Oliver Wilms · Feb 14, 2023 My team uses Podman to build images and run containers. What exactly are you trying to accomplish? podman and docker should be mostly interchangeable. If you have a docker run command, you should be able to do the same using podman instead of docker
go to post Oliver Wilms · Feb 9, 2023 Hello, I tried to add the video link to iris-log-viewer within Open Exchange, but I am not sure why it is not showing. Here is the link: https://youtu.be/VSTVZaC-fp8 Thanks, Oliver
go to post Oliver Wilms · Feb 5, 2023 Thanks, Eduard. I do not need to close the file with file.close()?
go to post Oliver Wilms · Jan 31, 2023 I believe there is a default length for the Read. If you pass in a number large enough or larger, it will read up to the length you specify. I see no harm in having a very large number.
go to post Oliver Wilms · Jan 27, 2023 I am pretty sure that the task needs to completely finish before the next iteration can start. Task manager will not run the same task twice in parallel. The running task will not be stopped just because another iteration is scheduled.