go to post Marc Mundt · Nov 14, 2017 %ZEN.Auxiliary.jsonProvider can make use of %ZEN.proxyObject to represent the JSON. This wouldn't require a formal class definition for your objects.
go to post Marc Mundt · Nov 8, 2017 Brendan's post is a related issue, but it's important to note that what he describes only applies if you want to update the value of a specific field when that field contains > 32K of data. The total size of the message isn't an issue.As an example: if you have an ORU message with a 10 MB PDF stored in OBX:5, you will still be able to update fields in the PID segment using standard DTL functions. But if you want to update OBX:5 you will need to use the functions that Brendan mentioned.
go to post Marc Mundt · Nov 8, 2017 The content of an EnsLib.HL7.Message is actually stored in streams, which don't have a fixed size, so theoretically there is no maximum size for an HL7 message.The RawContent property is a bit misleading. This is a convenience for accessing the content of the message, but it's not where the content is actually stored. RawContent is generated dynamically from the underlying streams but only returns the first 10000 characters.If you want to access the full, raw, untruncated message you can use one of the OutputTo* methods such as OutputToLibraryStream.
go to post Marc Mundt · Nov 7, 2017 Hi Stephen, This can be done with a custom query. See below for some sample code that takes the form of a stored procedure. This stored procedure only handles items in a single namespace, but you could adapt it to run across multiple namespaces. To call the stored procedure from a SQL query tool:call Sample.Util_SettingsByName('Port') The parameter you pass is the name (or names, comma-separated) of the setting(s) you want to get a list of. Leave it blank to get a list of all settings. Best,Marc Class Sample.Util Extends %RegisteredObject { /* ***************************************************** * ** N O T I C E ** * * - TEST/DEMO SOFTWARE - * * This and related items are not supported by * * InterSystems as part of any released product. * * It is supplied by InterSystems as a demo/test * * tool for a specific product and version. * * The user or customer is fully responsible for * * the maintenance of this software after delivery, * * and InterSystems shall bear no responsibility nor * * liabilities for errors or misuse of this item. * * * ***************************************************** */ Query SettingsByName(SettingName As %String) As %Query(ROWSPEC = "BusinessHost:%String,SettingName:%String,SettingValue:%String") [ SqlProc ] { } ClassMethod SettingsByNameExecute(ByRef qHandle As %Binary, SettingNames As %String = "") As %Status { s qHandle=##class(%ArrayOfObjects).%New() &sql(select %DLIST(id) into :tHostIDs from ENS_Config.Item order by Name desc) s tHostIDList=##class(%Library.ListOfDataTypes).%New() s tSC=tHostIDList.InsertList(tHostIDs) s tSC=qHandle.SetAt(tHostIDList,"HostIDs") s tSC=qHandle.SetAt(##class(%ArrayOfDataTypes).%New(),"Counters") s tSC=qHandle.GetAt("Counters").SetAt(0,"CurrHost") s tSC=qHandle.GetAt("Counters").SetAt(0,"CurrSetting") if ($L(SettingNames)>1) { s SettingNames=$ZCONVERT(SettingNames,"U") s tFilterList=##class(%Library.ListOfDataTypes).%New() s tSC=tFilterList.InsertList($LISTFROMSTRING(SettingNames)) s tSC=qHandle.SetAt(tFilterList,"FilterList") } Quit $$$OK } ClassMethod SettingsByNameClose(ByRef qHandle As %Binary) As %Status [ PlaceAfter = SettingsByNameExecute ] { Quit $$$OK } ClassMethod SettingsByNameFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status [ PlaceAfter = SettingsByNameExecute ] { s tCurrHost=qHandle.GetAt("Counters").GetAt("CurrHost") s tCurrSetting=qHandle.GetAt("Counters").GetAt("CurrSetting") s tHostIDs=qHandle.GetAt("HostIDs") s tFilterList=qHandle.GetAt("FilterList") s oHost=qHandle.GetAt("Host") do { if ('$IsObject(oHost)||(oHost.VirtualSettings.Count()<tCurrSetting)) { if (tCurrHost=tHostIDs.Count()) { s AtEnd=1 q } s tCurrHost=tCurrHost+1 s tCurrSetting=1 s tHostID=tHostIDs.GetAt(tCurrHost) s oHost=##class(Ens.Config.Item).%OpenId(tHostID,0) s tSC=oHost.PopulateVirtualSettings() s tSC=qHandle.SetAt(oHost,"Host") s tSC=qHandle.GetAt("Counters").SetAt(tCurrHost,"CurrHost") } s tSettings=oHost.VirtualSettings s tSetting=tSettings.GetAt(tCurrSetting) s tStngName=$LISTGET(tSetting,2) s tStngValue=$LISTGET(tSetting,3) s tCurrSetting=tCurrSetting+1 } while ($IsObject(tFilterList)&&('tFilterList.Find($ZCONVERT(tStngName,"U")))) if ('AtEnd) { s Row=$LB(oHost.Name,tStngName,tStngValue) } s tSC=qHandle.GetAt("Counters").SetAt(tCurrSetting,"CurrSetting") Quit $$$OK } }
go to post Marc Mundt · Sep 26, 2017 Also, have a look at the query "SubclassOf" in %Dictionary.ClassDefinitionQuery:http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?P...
go to post Marc Mundt · Sep 11, 2017 Salim,Steps to customize the patient search page are available in the HealthShare documentation. You can navigate to it or search for "Customizing the Patient Search Page".You should not modify HS.UI.PatientSearch.cls directly -- you should subclass it and override the relevant methods.Best,Marc
go to post Marc Mundt · Jun 6, 2017 You can find the current segment count using field counting syntax: source.GetValueAt("(*)") To create a new segment have a look at the documentation for EnsLib.HL7.Segment, particularly the method ImportFromString. To insert a segment into a message, have a look at EnsLib.HL7.Message::InsertSegmentAt.
go to post Marc Mundt · Jun 6, 2017 There is no standard Ensemble function that accepts multiple values and looks up each one in a lookup table in a single call.You can achieve this by creating a custom function which accepts a delimited string with all of the values and then iterates through each value and calls the standard "lookup" function once for each value.
go to post Marc Mundt · Jun 6, 2017 FHIR support is included in HealthShare Health Connect. There are some great introductions to FHIR capabilities on our Learning Services website. Just search for "FHIR".
go to post Marc Mundt · Jun 6, 2017 Yes, you just need to wrap them in parentheses and use "||" for "or": if ((ReceivingFacility="A") || (ReceivingFacility="B") || (ReceivingFacility="C")) { Or look at using other functions like $LISTFIND or the "[" (contains) operator: if ($LISTFIND($LISTBUILD("A","B","C"), ReceivingFacility) {
go to post Marc Mundt · Jun 6, 2017 HTML can be output using normal <item> tags with the copyHtml attribute.By the way, I see you're a member of QP's team. I'd suggest talking with some of the local Trak technical specialists -- they are experts in Zen reports.
go to post Marc Mundt · Jun 6, 2017 Ensemble's ESB components can accept an HTTP request and pass it through to a downstream system.Here's a link to the ESB section of the Ensemble docs.
go to post Marc Mundt · Jun 6, 2017 If you just need to get an output value based on different input values, a lookup table would be the best option.If you actually need to execute completely different logic depending on the input value, then you can consider using code actions to add a series of ElseIfs, which are much easier to read than deeply nested if blocks.