Thank you very much, Eduard :-)
- Log in to post comments
Thank you very much, Eduard :-)
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:
Thanks,
Oliver
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
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?
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
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 ...
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.
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.
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 ...
Class HS.Local.Example.ProcessBPL Extends Ens.BusinessProcessBPL
{Storage Default
{
<Type>%Storage.Persistent</Type>
}/// BPL Definition
XData 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>
}}
I provided a BPL example. Does that help?
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 ...
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.
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 ...
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/ce501e84f603ecb30085cd41957b7…
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:
The error from Prepare will write to messages.log with this change:
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 {
Set x = $System.Status.GetOneStatusText(sc)
Do ##class(%SYS.System).WriteToConsoleLog("otw.dynq prepareQ: "_x)
} Catch exception {
Do BACK^%ETN // Log error in error log
}
}
Quit sc
}
}
pInput As Patient.PatientDBReq is automatically persisted. You do not need to explicitly call %Save()
I understand your original question was why the data was saved twice. I would try to comment out the %Save() and see if you get new data one time.
The object is passed to the SQL Outbound operation. It is a Ens.StreamContainer and Ens.Request which are automatically persisted, meaning saved into the table.
My dynamic object contains three properties, like this:
Set dynObject1.Filename = "myzipfile.gz"
Set dynObject1.SiteId = "123"
But how can I say dynObject1.Stream = request.Stream which contains large binary stream?
I decided to just send the filename and then the compute pod can Read the file on a shared volume.
I fixed the error running audit-consolidator in AWS by adjusting directory permissions. irisowner did not have write permissions on /home/irisowner/irisdev directory until I ran "chmod 777 ."
Hello, I have written two articles and I will write one more. I also deployed online demo for audit-consolidator. Thank you
I like that ZPM Package Manager automatically imports what is defined in requirements.txt for Python.
I do not see any bonus for audit-consolidator. I wrote 3 articles. I created online demo. I am trying to upload my video.
I uploaded YouTube video about audit-consolidator:
Thank you, Evgeny, for pointing out how to update user(s) by using CPF Merge. I still like to have an option to configure a group of users in a single file and import this group of users with their passwords into several different IRIS instances which may use different CFP Merge files already. If there is a change to my users, I just update the XML file which gets imported using %ZSTART routine whenever any IRIS instance starts.
It appears the servers have different hostnames (a and b), but the certificate has only the server a. You need a second SSL certificate for server b or get a certificate that includes both server names.
Date, time, process / job id, log level, event type, log message.
Log level 0 is normal, 2 is warning, 3 is critical