我如何使用hapi版本安全或通用?

时间:2015-04-27 13:11:30

标签: java c# hapi nhapi

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

您可以注意到所有版本的作业几乎相同。但ACK的基础是message,我无法调用getMsa1_AcknowledgementCode方法而无需明确地转换为精确的HL7版本,并且其中没有常见的ACK类。通过这个虚拟图表,我试图提出问题。 (我知道还有其他一些元素,比如AbstractMessage,Group ......)

enter image description here

前两个方法名称为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();
        }

1 个答案:

答案 0 :(得分: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规范中定义相同)。