0

我在下面有这个丑陋的代码,用于在这里看到的 hl7 消息。该代码针对不同版本的 HL7 侦听器运行。对于我在 v2.3 中收到的一个系统,但对于另一个我在 v2.5 中获得的系统

如您所见,所有版本的工作几乎相同。但是 ACK 的基础是,如果不显式转换为确切的 HL7 版本,message我就无法调用getMsa1_AcknowledgementCode方法,并且它们之间没有公共ACK类。通过这个虚拟图,我试图提出问题。(我知道还有一些其他元素,例如 AbstractMessage、Group ...)

在此处输入图像描述

对于前两个方法名称,getMsa1_AcknowledgementCode但对于 v2.5,它缺少e字母并且看起来像getMsa1_AcknowledgmentCode.

我应该使用反射并找到一个以名称开头的方法getMsa_Ack...来检查确认消息,还是在 hapi 项目中为此目的有任何类型安全且美观的方法?

在回答我想知道其他人也有更好的方法时,不要将自己限制在 ACK 消息中。

MSH|^~\&|Vendor|VandorApp|Receiver|RCApp|201504241154||ACK|187718704|T|2.3|||AL|AL|TR
MSA|AA|187718704

        String result="AA";

        ca.uhn.hl7v2.model.Message hl7 = initiator.sendAndReceive(msg);

        if(hl7 instanceof ca.uhn.hl7v2.model.v231.message.ACK)
        {
            ca.uhn.hl7v2.model.v231.datatype.ID id= ((ca.uhn.hl7v2.model.v231.message.ACK)hl7).getMSA().getMsa1_AcknowledgementCode();
            result=id.getValue();               
        }else if (hl7 instanceof ca.uhn.hl7v2.model.v23.message.ACK)
        {
            ca.uhn.hl7v2.model.v23.datatype.ID id=  ((ca.uhn.hl7v2.model.v23.message.ACK)hl7).getMSA().getMsa1_AcknowledgementCode();
            result=id.getValue();               
        }else if( hl7 instanceof ca.uhn.hl7v2.model.v25.message.ACK)
        {
            ca.uhn.hl7v2.model.v25.datatype.ID id=  ((ca.uhn.hl7v2.model.v25.message.ACK)hl7).getMSA().getMsa1_AcknowledgmentCode();
            result=id.getValue();
        }
4

1 回答 1

0

使用 C#,使用 nHAPI,我会做类似于以下的事情

PipeParser parser = new PipeParser();
IMessage hl7Message = parser.Parse(hl7);
IStructure msa = hl7Message.GetStructure("MSA");
IType ackCode = ((ISegment)msa).GetField(1)[0];
MessageBox.Show(((AbstractPrimitive)ackCode).Value);

你必须使用很多基础结构,并且我假设了一些铸件——因为我们正在寻找一个特定的领域(我们知道在 HL7 规范中定义相同)。

于 2015-04-28T03:02:15.957 回答