Groovy 在以简写形式包装的新HL7消息上设置字段

Groovy 在以简写形式包装的新HL7消息上设置字段,groovy,hl7,hapi,Groovy,Hl7,Hapi,当尝试使用ca.uhn.hl7v2.util.Terser在ca.uhn.hl7v2.model.Message(在本例中为ca.uhn.hl7v2.model.v251.Message.ORU_R01)的给定特定子类上设置空字段时,我在.each{}闭包期间没有收到任何错误消息,之后消息对象没有填充任何字段 hl7Map在类实例化时填充,值如下: def hl7Map=[“HL7MessageFields”:['PID-3-1':“内部订单映射键”, “PID-3-4”:“内部订单映射键”等。

当尝试使用ca.uhn.hl7v2.util.Terser在ca.uhn.hl7v2.model.Message(在本例中为ca.uhn.hl7v2.model.v251.Message.ORU_R01)的给定特定子类上设置空字段时,我在.each{}闭包期间没有收到任何错误消息,之后消息对象没有填充任何字段

hl7Map在类实例化时填充,值如下: def hl7Map=[“HL7MessageFields”:['PID-3-1':“内部订单映射键”, “PID-3-4”:“内部订单映射键”等。]]

代码如下:

def BUILDHL7消息(订单){

}

方法结尾导致没有输出,并且记录了有关编码的错误,MSH-1是必填字段,管道删除器为空。如果上面的代码使用message.initQuickstart(“ORU”、“R01”、“T”),则只填充默认的initQuickstart字段

如果hl7Map[“HL7MessageFields”]包含的“it.key”不是有效的组/段字段,则terser会记录一个错误,说明它找不到该值,上述具有正确格式映射的代码不会导致错误


有人能帮我解释为什么我没有收到错误,但我的邮件是空的,并帮我用适当的简写集(参数)填充邮件吗?

经过几个小时的搜索,找到了适合我的解决方案

消息对象的内部表示具有树状结构,其中MSH段是父段,位于MSH段之后的段是子段。由于这种结构,MSH字段必须像我的原始代码那样设置,但子段字段必须在设计的映射键前面设置“/”(即,在terser.set()行中,“PID-3-1”必须变成“/.PID-3-1”)

hl7Map格式已更新,以更好地支持这个terser.set()语法要求

从更简洁的文档中,/indicates搜索应该从邮件的根开始,从我现在丢失的HAPI邮件列表链接的答案中,.indicates搜索应该包括MSH的子元素

完整代码如下:

def BUILDHL7消息(订单){

    def date = new Date()
    def format = new SimpleDateFormat(hl7Map["dateFormat"]).format(date)

    //Set date on the Message Header Object
    hl7Map["MSH"]["-7"]= format

    def message = (context.getModelClassFactory().getMessageClass(hl7Map["MessageInstantiationMap"]["messageType"],
                                                                    hl7Map["MessageInstantiationMap"]["version"],
                                                                    true) as Class).newInstance()
    Terser terser = new Terser(message)

    hl7Map["HL7MessageFields"].each{
        terser.set(it.key, order[it.value])
    }

    println message

    return message
    def date = new Date()
    def format = new SimpleDateFormat(hl7Map["dateFormat"]).format(date)

    //Set date on the Message Header Object
    hl7Map["MSH"]["-7"]= format

    //See http://stackoverflow.com/questions/576955/groovy-way-to-dynamically-invoke-a-static-method
    //And
    //http://stackoverflow.com/questions/7758398/groovy-way-to-dynamically-instantiate-a-class-from-string

    def message = (context.getModelClassFactory().getMessageClass(hl7Map["MessageInstantiationMap"]["messageType"],
                                                                    hl7Map["MessageInstantiationMap"]["version"],
                                                                    true) as Class).newInstance()
    Terser terser = new Terser(message)

    hl7Map["MSH"].each{
        terser.set("MSH"+it.key, it.value)
    }
    hl7Map["HL7MSHChildSegmentMap"].each{
        terser.set(("/."+it.key) as String, order[it.value] as String)
    }

    println message

    return message
}