Hi Jeffrey,
I was able to loop through the specific NTE segments with the following code:
Set i=1
While i<=NTEGroup
{
Set NTESeg=MsgIn.GetValueAt("ORCgrp(1).OBRuniongrp.NTE("_i_")")
$$$TRACE(NTESegIndex)
Set i=i+1
}
The trouble I have now is moving these NTE's to the end of the message beneath the SPM segment without it disrupting anything else. I am attempting to do this by first of all getting the segment index and then removing the segment referenced (commented out below). I am then getting the full segment string and importing that as a segment to then append them to the outbound message.
Set i=1
While i<=NTEGroup
{
Set NTESegIndex=MsgIn.GetSegmentIndex("ORCgrp(1).OBRuniongrp.NTE("_i_")")
;Set tSC=MsgOut.RemoveSegmentAt(NTESegIndex)
Set NTEStr=MsgIn.GetValueAt("ORCgrp(1).OBRuniongrp.NTE("_i_")")
Set NTE=##class(EnsLib.HL7.Segment).ImportFromString(NTEStr,.tSC,MsgIn.Separators)
Set tSC=MsgOut.AppendSegment(NTE)
Set i=i+1
}
If I remove the RemoveSegmentAt() line, the segments are appending without any issues. Once I start using the RemoveSegmentAt() line, they still append but it causes some issues with other segments by removing the SPM segment and not removing all the NTE's expectedly.
Without RemoveSegmentAt()
NTE|1||Transfusion indications->Hgb <= 9 g/dL with chronic transfusion therapy NTE|2||Has consent been obtained?->Yes SPM|1|||Environment^Environmental sample||||||||||||||||Y NTE|1||Transfusion indications->Hgb <= 9 g/dL with chronic transfusion therapy NTE|2||Has consent been obtained?->Yes
With RemoveSegmentAt()
NTE|2||Has consent been obtained?->Yes NTE|1||Transfusion indications->Hgb <= 9 g/dL with chronic transfusion therapy NTE|2||Has consent been obtained?->Yes
Is there another recommended way of doing this?
Thanks!
Edit - I've been able to achieve this by creating a new message and building it from scratch and only looping through and grabbing the segments I need.
Maybe try this for individual globals to see the Allocated and Used size in MB:
Set tSC=##class(%Library.
zw Allocated,Used
https://cedocs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cl...
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_")"))
}
}