Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用hapi版本安全或通用?_Java_C#_Hapi_Nhapi - Fatal编程技术网

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

Java 如何使用hapi版本安全或通用?,java,c#,hapi,nhapi,Java,C#,Hapi,Nhapi,我在下面看到了hl7消息的丑陋代码。该代码针对不同版本的HL7侦听器运行。对于一个系统,我在v2.3中收到,但对于另一个系统,我在v2.5中收到 正如您所注意到的,所有版本的作业几乎相同。但是ACK的基础是message,我不能调用getMsa1_ackknowledgementcode方法而不显式转换为确切的HL7版本,并且它们之间没有一个通用的ACK类。通过这个虚拟图,我试图提出这个问题。我知道还有其他一些元素,比如AbstractMessage、Group 对于前两个,方法名为getMsa

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

正如您所注意到的,所有版本的作业几乎相同。但是ACK的基础是message,我不能调用getMsa1_ackknowledgementcode方法而不显式转换为确切的HL7版本,并且它们之间没有一个通用的ACK类。通过这个虚拟图,我试图提出这个问题。我知道还有其他一些元素,比如AbstractMessage、Group

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

我是否应该使用反射并找到一个以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();
        }

使用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。这一次你应该选择不同的解决方案。不幸的是,这似乎不是一个共同的解决方案。感谢您的分享。它随代码的不同而变化,如NHapi.Base.Model.varies.Data作为GenericPrimitive.Value。正如您所看到的,我们达到了数据变量的值。它会引起变化。