【问题标题】:How can I use hapi version safe or as generic?如何使用 hapi 版本安全或通用?
【发布时间】:2015-04-28 11:02:15
【问题描述】:

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

您可以注意到所有版本的工作几乎相同。但是 ACK 的基础是 message 并且我不能在不明确转换为确切的 HL7 版本的情况下调用 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();
        }

【问题讨论】:

    标签: java c# hapi nhapi


    【解决方案1】:

    使用 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 规范中定义相同)。

    【讨论】:

    • 我也有 C# 代码,但使用的是精确类型而不是这种方式。您是否尝试过 2.2 和 2.5 版本的代码。当你使用 2.5 消息 ackCode 变成 NHapi.Model.V25.Datatype.ID,(它也是一个 AbstractPrimitive)但是如果你使用 2.2 它变成 NHapi.Base.Model.Varies(v2.3 所以)并且它不是一个 AbstractPrimitive。这次你应该转换为 Varies。不幸的是,这似乎不是一个相互解决的方案。感谢分享。
    • 它因Varies (((ackCode as NHapi.Base.Model.Varies).Data as GenericPrimitive).Value) 而异。如您所见,我们达到了 Data 变量的值。它导致多样性。
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2011-11-07
    • 2021-01-04
    • 2021-04-30
    • 2015-12-27
    相关资源
    最近更新 更多