Hi Lionel,
There shouldn't be a need to use %Save() after you've built the HL7 message as you're not saving it to any custom persistent class, plus, the HL7 message will be stored into the EnsLib.HL7.Message class any way.
Once you've created your new HL7 message you can leave out the %Save() and just use; Set tSC=..SendRequestAsync("Process.BDROWARouter",tMsg,0) - the 0 indicating you don't want a response back (assuming that's how you want it set up). Then you can Quit tSC.
If you are anticipating more changes to the custom HL7 you're building it might be good to call a class method for that to split the code up a bit, I've done something similar on my BD integration where I'm sending multiple ZRA's from one RDE message depending on whether or not it's a diluent. I've removed some ..SendRequestAsync lines as it is a multi-site dispensing integration I did for BD, not sure if you're doing the same. Hope this helps.
If $ISOBJECT(pRequest.FindSegment("RXC"))
{
$$$LOGINFO("Mixture order. Drug information will be taken from the RXC segment, but only if there's an 'A' present in RXC:1.")
Set RXCCount=pRequest.GetValueAt("RXCgrp(*)")
For i=1:1:RXCCount
{
If (pRequest.GetValueAt("RXCgrp("_i_").RXC:1")="A") && ((pRequest.GetValueAt("RXCgrp("_i_").RXC:2.1")'="") && (pRequest.GetValueAt("RXCgrp("_i_").RXC:3")'=""))
{
Set RXCBarcode=pRequest.GetValueAt("RXCgrp("_i_").RXC:2.1")
Set RXCQuantity=pRequest.GetValueAt("RXCgrp("_i_").RXC:3")
Set tSC=..BuildZRARequestMsg(pRequest,$GET(DispensingSite),MsgType,"",1,RXCQuantity,RXCBarcode,.ZRAMsg)
If tSC
{
If $GET(ZRAMsg)'=""
{
If DispensingSite="ORC" Set tSC=..SendRequestAsync("BD Rowa ORC",ZRAMsg,1,"OrderSent")
}
}
}
}
}
Sample segments (modified)...
RXC|A|00000000001^Med1^ADS|28|Tab^tablet|30|mg^mg|^VALNI XL RXC|A|00000000011^Med2^ADS|28|Tab^tablet|60|mg^mg|^VALNI XL
Trace showing the split...
Jordan
Hi Ciaran,
Might be your best bet to construct a message from scratch and start appending segments in the order you wish, for example, loop through the PIDgrp appending the segments you want to your newly constructed message and then loop through ORCgrp NTE's and append each segment.
You can loop through and append by using code such as:
{
Set NTECount=ORMIn.GetValueAt("ORCgrp(1).NTE(*)")
For i=1:1:NTECount
{
Set tSC=ORMOut.AppendSegment(ORMIn.GetSegmentAt("ORCgrp(1).NTE("_i_")"))
}
}
Thank you for posting that, good to know for future reference. I did find an alternative post by Eduard that lists the path for each value which looks to be working well.
https://community.intersystems.com/node/457371