Répondre avec un HL7 ACK personnalisé
J'essaie de créer un ACK personnalisé à renvoyer au système expéditeur car il n'accepte pas le standard 2.3:ACK, je veux envoyer ce qui suit :
Set pResponse=##class(EnsLib.HL7.Message).%New()
Set pResponse.DocType="2.4:ACK"Set MSHStr="MSH|^~\&|EnsembleHL7|ISC|ARiM Server|ROWA|"_$REPLACE($REPLACE($ZDATETIME($HOROLOG,8,1),":",""), " ","")_"||ACK|"_pRequest.GetValueAt("MSH:10")_"|P|2.3"Set MSHSeg=##class(EnsLib.HL7.Segment).ImportFromString(MSHStr,.tSC,pRequest.Separators)
Set MSAStr="MSA|AA|"_pRequest.GetValueAt("MSH:10")
Set MSASeg=##class(EnsLib.HL7.Segment).ImportFromString(MSAStr,.tSC,pRequest.Separators)
Set tSC=pResponse.SetSegmentAt(MSHSeg,1)
Set tSC=pResponse.AppendSegment(MSASeg)Mon problème est que je ne sais pas où déclencher l'ACK personnalisé pour qu'il n'envoie pas le 2.3:ACK par défaut.
Le service est une classe TCPInboundAdaptor.
Product version: IRIS 2021.1
Discussion (1)0
Comments
Vous pouvez remplacer la méthode OnConstructReply de EnsLib.HL7.Service.Standard. La méthode suivante a fonctionné pour moi.
Class DC.CustomACKBS Extends EnsLib.HL7.Service.TCPService
{
Method OnConstructReply(Output pReplyDoc As EnsLib.EDI.Document, pOriginalDoc As EnsLib.EDI.Document, ByRef pReplyCode As%String, ByRef pSC As%Status, pEarlyAck As%Boolean) As%Status
{
Set pReplyDoc=##class(EnsLib.HL7.Message).%New()
Set pReplyDoc.DocType="2.4:ACK"Set MSHStr="MSH|^~\&|EnsembleHL7|ISC|ARiM Server|ROWA|"_$REPLACE($REPLACE($ZDATETIME($HOROLOG,8,1),":",""), " ","")_"||ACK|"_pOriginalDoc.GetValueAt("MSH:10")_"|P|2.3"Set MSHSeg=##class(EnsLib.HL7.Segment).ImportFromString(MSHStr,.tSC,pOriginalDoc.Separators)
Set MSAStr="MSA|AA|"_pOriginalDoc.GetValueAt("MSH:10")
Set MSASeg=##class(EnsLib.HL7.Segment).ImportFromString(MSAStr,.tSC,pOriginalDoc.Separators)
Set tSC=pReplyDoc.SetSegmentAt(MSHSeg,1)
Set tSC=pReplyDoc.AppendSegment(MSASeg)
Quit tSC
}
}