2013-06-05 55 views
0

我对HAPI生成的NACK消息有疑问,NACK错误信息无效?

我正在生成NACK消息,如下所示;

Message msg= hl7Msg.generateACK(HL7Constants.HL7_MSA_ERROR_FIELD_VALUE, 
        new HL7Exception(errorMsg)); 

返回;以下信息;

MSH|^~\&|||||20130604165513.576+0100||ACK|108|P|2.5 
MSA|AE|HL7Gtw01361605B49500 
ERR|^^^207&ERROR&hl70357&&errmsg 

如果您注意到ERR段,它没有所需的信息;

上述信息是否有效?

我怀疑它必须是这样的;

MSH|^~\&|||||20130604165513.576+0100||ACK|108|P|2.5 
MSA|AE|HL7Gtw01361605B49500 
ERR|||207|E|^errmsg 

为什么我得到这样的无效消息?我在这里做错了什么?

+0

你能给我你写的完整代码吗? – Sid

+0

Sid,这是我生成NACK消息的行; hl7Msg.generateACK('AE',new HL7Exception(errorMsg));这是API链接,我用来生成http://ckl.api.sourceforge.net/apidocs/src-html/ca/uhn/hl7v2/model/Message.html#line.170 – Ratha

+0

@Sid请参考这个问题也http://stackoverflow.com/questions/16957792/why-nack-message-misses-to-create-the-fields-3-4-and-5-in-hapi – Ratha

回答

0

Ans from hapi mailing list;

如果可能,您应该升级到最新版本(2.1)。当使用异常调用generateACK时,该版本在版本2.5(其中ERR-2和ERR-3已填充)和版本2.5(其中使用ERR-1)之前进行区分。

无论如何,您可以使用像Terser这样的util类来修改ACK消息中的ERR段的字段。在你的情况,你可能会需要从ERR-1复制值ERR-3

Segment err = (Segment)msg.get("ERR"); 
    Terser.set(err, 3, 0, 1, 1, Terser.get(err, 1, 0, 4, 1)); 
    Terser.set(err, 3, 0, 2, 1, Terser.get(err, 1, 0, 4, 2)); 
    Terser.set(err, 3, 0, 3, 1, Terser.get(err, 1, 0, 4, 3)); 
    Terser.set(err, 3, 0, 9, 1, Terser.get(err, 1, 0, 4, 5)); 
    Terser.set(err, 4, 0, 1, 1, "E"); 

和可选的ERR-1之后删除值:

Terser.set(ERR,1,0, 4,1,“”);