go to post Scott Roth · Mar 24, 2022 1. I would stay away from Modifying the current EnsLib.HL7.SearchTable if at all necessary. Modifying the source code could lead to consequences down the road, especially when you upgrade it might get overwritten. What I did was that I copied the existing code and modified it for our use. That way we can add and remove fields anytime we want. Class osuwmc.HL7SearchTable Extends (%Persistent, Ens.VDoc.SearchTable) [ ClassType = persistent, CompileAfter = EnsLib.HL7.Message, Inheritance = right, ProcedureBlock, System = 4 ] { Parameter DOCCLASS = "EnsLib.HL7.Message"; Parameter EXTENTSIZE = 4000000; /* Re-declare indices because the superclass is abstract */ Index indexValue On (PropId, PropValue, DocId) [ IdKey, Unique ]; Index indexDocId On (DocId, PropId, PropValue) [ Unique ]; XData SearchSpec [ XMLNamespace = "http://www.intersystems.com/EnsSearchTable" ] { <Items> <Item DocType="" PropName="MSHTypeName" Unselective="true">{1:9.1}_"_"_{1:9.2}</Item> <Item DocType="" PropName="MSHControlID" PropType='String:CaseSensitive' >{1:10}</Item> <Item DocType="" PropName="PatientID" >[PID:2.1]</Item> <Item DocType="" PropName="PatientID" >[PID:3().1]</Item> <Item DocType="" PropName="PatientID" >[PID:4().1]</Item> <Item DocType="" PropName="PatientName" >[PID:5()]</Item> <Item DocType="" PropName="PatientAcct" >[PID:18.1]</Item> <Item DocType="" PropName="Order#" >[ORC:2.1]</Item> <Item DocType="" PropName="Order#" >[SCH:26.1]</Item> <Item DocType="" PropName="Order#" >[ZOR:1]</Item> <Item DocType="" PropName="Accession#" >[ORC:3.1]</Item> <Item DocType="" PropName="SIUVisitType">[AIS():3.1]</Item> <Item DocType="" PropName="SIUProvider#">[AIP():3.1]</Item> </Items> } Storage Default { <Data name="HL7SearchTableDefaultData"> <Value name="1"> <Value>%%CLASSNAME</Value> </Value> </Data> <DataLocation>^osuwmc.HL7SearchTableD</DataLocation> <DefaultData>HL7SearchTableDefaultData</DefaultData> <ExtentSize>4000000</ExtentSize> <IdLocation>^osuwmc.HL7SearchTableD</IdLocation> <IndexLocation>^osuwmc.HL7SearchTableI</IndexLocation> <StreamLocation>^osuwmc.HL7SearchTableS</StreamLocation> <Type>%Library.CacheStorage</Type> } }
go to post Scott Roth · Oct 4, 2021 I do something similar to what you are trying to do, I Decode the PDF, save the PDF locally, and return a path to the DTL. Several on the developer community helped me figure this out... ClassMethod DecodeBase64HL7ToFile(base64 As %Stream.GlobalBinary, Ancillary As %String, FileName As %String) As %String { set ArchDir = "/ensemble/data/transfer/AncillaryPDF/" 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(%FileBinaryStream).%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() set PDFFilePath = FaxDateDir_FileName return PDFFilePath }
go to post Scott Roth · Nov 16, 2020 We have used Length many times in Routing rules to check to see if Admit/Discharge date exists. We haven't quite used HL7.{PV1:45} to get the field, we let the system spell it out for us... so instead of HL7.{PV1:45} we allow the system to put it in the nomenclature that it knows the field as.. in this case HL7.{PV1:AdmitDateTime.Time}
go to post Scott Roth · Nov 12, 2020 Nicole, I believe your problem is with the repeating fields. You can not leave () blank. You will need to use a counter or loop through OBX to look for the individual fields you are looking for. Scott
go to post Scott Roth · Apr 15, 2020 I would believe the only way to put a schema filter in would be within your query and not in the connection string.
go to post Scott Roth · Mar 2, 2020 I found with create a Inbound BS, you can't really use the Delete query as an update statement. Either you place the update statement within your BPL, or truly make the Delete query a Delete query on your inbound service.
go to post Scott Roth · Jan 29, 2020 Make sure you are also using EnsLib.RecordMap.Operation.BatchFileOperation as your operation and you define the header in it as well.
go to post Scott Roth · Nov 15, 2019 Have you used JDBC drivers before? I have a couple of connections that I have created through JDBC to connect to Oracle to pull data from an Oracle table to create an HL7 message. Currently we are using the Oracle JDBC driver to connect to the Oracle system.
go to post Scott Roth · Oct 30, 2019 I figured it out on my own. It did not like <assign value='source.GetFieldStreamRaw(.tStream,"ORCgrp(1).OBRgrp(1).OBXgrp(k1).OBX:ObservationValue(1).AlternateText}",tRemainder)' property='tSC' action='set' /> I had to change it to <assign value='source.GetFieldStreamRaw(.tStream,"ORCgrp(1).OBRgrp(1).OBXgrp("_k1_").OBX:5.5",.tRemainder)' property='tSC' action='set' />
go to post Scott Roth · Oct 14, 2019 When we were going through our conversion from egate to Ensemble, it was suggested not to have anymore that 25 rules within a Business Router. Anymore than that caused us severe performance issues when it came to making sure our downstream systems was receiving the messages in time. Scott Roth
go to post Scott Roth · Oct 8, 2019 I am not aware that a CSV could be read in via EnsLib.File.PassthroughService. From what I was taught a CSV would have to be mapped to a RecordMap then you can parse out the CSV using EnsLib.RecordMap.Service.FileService. https://docs.intersystems.com/healthconnect20191/csp/docbook/DocBook.UI.Page.cls?KEY=EGDV_recmap Scott
go to post Scott Roth · Sep 19, 2019 Not sure if this will answer your question or not, but we had to move to the jTDS JDBC driver in order to pass an AD account through a connection. jdbc:jtds:sqlserver://(server name/port) ;instance=tp;domain=osumc;useNTLMv2=true;cacheMetaData=true;prepareSQL=2;
go to post Scott Roth · Aug 29, 2019 https://www.amazon.com/Cach%C3%A9-ObjectScript-MUMPS-Technical-Learning/dp/1466499087/ref=sr_1_fkmr0_1?keywords=Cache%60+object+script+and+mumps&qid=1567084211&s=gateway&sr=8-1-fkmr0
go to post Scott Roth · Mar 7, 2019 With a little help I have built the following Method to Decode and save off the Encoded pdf but return me the directory that I saved the PDF under....ClassMethod DecodeBase64HL7ToFile(base64 As %Stream.GlobalBinary, Ancillary As %String, FileName As %String) As %String{set ArchDir = "/ensemble/data/transfer/AncillaryPDF/"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(%FileBinaryStream).%New()///$$$LOGINFO(FaxDateDir_FileName)set Oref.Filename = FaxDateDir_FileNameDo base64.Rewind()While 'base64.AtEnd { set ln = base64.ReadLine() set lnDecoded = $system.Encryption.Base64Decode(ln)do Oref.Write(lnDecoded)}Do Oref.%Save()set PDFFilePath = FaxDateDir_FileNamereturn PDFFilePath}
go to post Scott Roth · Feb 13, 2019 the Syntax for MAXLEN was wrong. Instead of MAXLEN(5000) it should of been MAXLEN = 5000
go to post Scott Roth · Feb 6, 2019 We are still somewhat old school eGate folks in this sense. We send all of our transactions to flat files, then we can use those files to feed in data into the test system if needed. We did this when we moved from eGate to Ensemble to make sure we were getting the same transactions and counts.
go to post Scott Roth · Feb 6, 2019 Suggest that WRC is probably the best option to help you troubleshoot this issue. It can be numerous things from Security, or the system not running like it should.
go to post Scott Roth · Feb 5, 2019 You can use split on ZC02, get the length, then for each number that it split you create a separate DFT message.