interesting theory to try, someone on my team changed it to cover it to stream, and put it back into the message before this answer. the Physician memory usage went down, the virtual memory usage went up. However, the error seemed more at the Routing than the DTL. It may have something to do with Locking and trying to send to multiple locations in a single send.
With the way that we built our namespaces, I had to create a smaller namespace that included all of our nuances that we do like... BPL making JDBC MS SQL Stored Procedure calls, making internal cache calls, making linked table/store procedure calls.
Larger namespaces will cause the comparison run to take longer to run.
So, my mini namespace is used to test new versions of HealthShare Health Connect.
I ended up doing a BS for each query that I was pulling into an Internal Cache Table. Adding a Service and BP would cause more overhead system resource wise.
I thought the EnsLib.JavaGateway.Service is its own JVM. I have many different JavaGateway Services build 1 for each database I connect to so I can make MS SQL Query/Stored procedure calls.
But you want to make sure the %JDBC Server is running at the Server Level as well.
Within a BP, you can create a Variable list, and just call
do context.<variable>.Insert(<value>)
ObjectScript
ObjectScript
and it will add it to the list. Now that I have that piece working, I need to figure out how to extract that list so I can create some logic around it.
Nice comparison, also you have to take in account the processing speed as well. I found using Embedded SQL through a SQL Outbound Adapter can slow processing significantly down as it has to build the SQL in the connection to get results. I have a high-volume Business Process that required us to build a Stored Procedure on MS SQL instead of the Embedded SQL so that the SQL Server has the query already built.
ClassMethod GroupIDExists(pHL7Msg As EnsLib.HL7.Message, pSegment As%String, pField As%String, pLookupTable As%String) As%Boolean
{
#dim tSeg as EnsLib.HL7.Segment
set tSegCount = pHL7Msg.SegCountGet()
set i = 1Set tFound = 0//get new valuesset tval=""while ((i <= tSegCount) && (tval="")) {
set tSeg = pHL7Msg.GetSegmentAt(i)
if (tSeg.Name = pSegment) {
set tID = tSeg.GetValueAt(pField)
set tval= ..Lookup(pLookupTable, tID)
}
set i = i + 1
}
if (tval '= "")
{
Q1
}
quit0
}
go to post
The rule was just routing the message through a DTL and sending it to two places in the same line.
The message size was 12661.
My team member just ended up splitting up the send line into multiple send lines instead of a single send line with two destinations.
go to post
interesting theory to try, someone on my team changed it to cover it to stream, and put it back into the message before this answer. the Physician memory usage went down, the virtual memory usage went up. However, the error seemed more at the Routing than the DTL. It may have something to do with Locking and trying to send to multiple locations in a single send.
go to post
With the way that we built our namespaces, I had to create a smaller namespace that included all of our nuances that we do like... BPL making JDBC MS SQL Stored Procedure calls, making internal cache calls, making linked table/store procedure calls.
Larger namespaces will cause the comparison run to take longer to run.
So, my mini namespace is used to test new versions of HealthShare Health Connect.
go to post
I ended up doing a BS for each query that I was pulling into an Internal Cache Table. Adding a Service and BP would cause more overhead system resource wise.
go to post
The issue was with the query I was using. Those that wrote the query were renaming columns with ' ' but putting spaces in the new names.
SELECT A AS 'ABC CDE' FROM TableName
I think there was the Typo in my service code, because I never use spaces and assumed that the column names did not have spaces.
go to post
I am connecting to a MS SQL Server Database using JDBC. These columns can be up to 255 characters.
go to post
I thought the EnsLib.JavaGateway.Service is its own JVM. I have many different JavaGateway Services build 1 for each database I connect to so I can make MS SQL Query/Stored procedure calls.
But you want to make sure the %JDBC Server is running at the Server Level as well.
go to post
Within a BP, you can create a Variable list, and just call
do context.<variable>.Insert(<value>)
and it will add it to the list. Now that I have that piece working, I need to figure out how to extract that list so I can create some logic around it.
go to post
do I have to call
foreach(<field>) { set list = $LB(<field>) }
or can I
foreach(<field>) { set list= $LI(<field>,<counter>) }
go to post
Nice comparison, also you have to take in account the processing speed as well. I found using Embedded SQL through a SQL Outbound Adapter can slow processing significantly down as it has to build the SQL in the connection to get results. I have a high-volume Business Process that required us to build a Stored Procedure on MS SQL instead of the Embedded SQL so that the SQL Server has the query already built.
go to post
Within our DTC...
<assign value='source.GetFieldStreamRaw(.tStream,"ORCgrp(1).OBRgrp(1).OBXgrp(1).OBX:ObservationValue(1).AlternateText",.tRemainder)' property='tSC' action='set' /> <assign value='##class(osuwmc.Utils.Functions).DecodeBase64HL7ToFileFaxing(tStream,source.{MSH:SendingApplication.NamespaceID},source.{PID:PatientIdentifierList(1).IDNumber}_context.TextIDTemp_".PDF")' property='a' action='set' />
go to post
With some help from the Developer community, below is a Function I wrote for our needs to take a Base64 and write it out to a PDF.
ClassMethod DecodeBase64HL7ToFileFaxing(base64 As %Stream.GlobalBinary, Ancillary As %String, FileName As %String) As %String { set ArchDir = <directory> set ArchAncDir = ArchDir_Ancillary_"/" set FaxDateDir = ArchAncDir_$PIECE($ZDATE($HOROLOG,7)," ",1)_"-"_$PIECE($ZDATE($HOROLOG,7)," ",2)_"-1/" if '##class(%Library.File).DirectoryExists(ArchDir) { do ##class(%Library.File).CreateDirectory(ArchDir) } if '##class(%Library.File).DirectoryExists(ArchAncDir) { do ##class(%Library.File).CreateDirectory(ArchAncDir) } if '##class(%Library.File).DirectoryExists(FaxDateDir) { do ##class(%Library.File).CreateDirectory(FaxDateDir) } set Oref = ##class(%Stream.FileBinary).%New() $$$LOGINFO(FaxDateDir_FileName) set Oref.Filename = FaxDateDir_FileName Do base64.Rewind() While 'base64.AtEnd { set ln = base64.ReadLine() set lnDecoded = $system.Encryption.Base64Decode(ln) do Oref.Write(lnDecoded) } Do Oref.%Save() do ##class(%File).SetAttributes(Oref,33261,.return) set Oref = "" // Close file set PDFFilePath = "/Fax/PDFFiles/"_Ancillary_"/"_$PIECE($ZDATE($HOROLOG,7)," ",1)_"-"_$PIECE($ZDATE($HOROLOG,7)," ",2)_"-1/"_FileName return PDFFilePath }
go to post
I can't recall if we ever went live with this conversion.
go to post
Thanks, I was able to resolve my issues with JDBC and using Active Directory Password Authentication through Microsoft Entra. Connecting using JDBC to MS Azure SQL through Microsoft Entra and Active
go to post
I published an article based on my findings...
Connecting using JDBC to MS Azure SQL through Microsoft Entra and Active
go to post
ClassMethod GroupIDExists(pHL7Msg As EnsLib.HL7.Message, pSegment As %String, pField As %String, pLookupTable As %String) As %Boolean { #dim tSeg as EnsLib.HL7.Segment set tSegCount = pHL7Msg.SegCountGet() set i = 1 Set tFound = 0 //get new values set tval="" while ((i <= tSegCount) && (tval="")) { set tSeg = pHL7Msg.GetSegmentAt(i) if (tSeg.Name = pSegment) { set tID = tSeg.GetValueAt(pField) set tval= ..Lookup(pLookupTable, tID) } set i = i + 1 } if (tval '= "") { Q 1 } quit 0 }
An example.....png)
go to post
I ended up putting statements into my BP that set the EnsLib.SQL.Snapshot variable = "" after use.
go to post
I am still working with WRC and Microsoft to determine where the issue is.
go to post
According to Microsoft, I had to download the 12.8 driver. But that did not work either, Microsoft is saying I need to install Maven and POM.
go to post
We use the Gateway to make Queries and Stored Procedure calls from our Business Processes/Business Operations.