【问题标题】:Setting fields on a new HL7 Message wrapped in Terser在包装在 Terser 中的新 HL7 消息上设置字段
【发布时间】:2014-10-28 15:18:25
【问题描述】:

当尝试使用 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':"internal order map key"等]]

代码如下:

def buildHL7Message(order){

    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

}

方法结束导致没有输出和记录有关编码的错误,MSH-1 是必填字段,管道分隔符但为空。如果上面的代码使用 message.initQuickstart("ORU", "R01", "T"),则只会填充默认的 initQuickstart 字段。

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

谁能帮助解释为什么我没有收到错误但我的消息是空的,并帮助我用适当的 terser.set(params) 填充消息?

【问题讨论】:

    标签: groovy hl7 hapi


    【解决方案1】:

    经过几个小时的搜索,找到了对我有用的解决方案。

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

    更新了 hl7Map 格式以更好地支持这种 terser.set() 语法要求。

    从更简洁的文档中,/ 表示搜索应该从消息的根目录开始,并且从我现在丢失的 HAPI 邮件列表链接上的答案中,.表示搜索应包括 MSH 的子元素。

    完整代码如下:

    def buildHL7Message(order){

        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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 2019-02-14
      • 2019-04-22
      相关资源
      最近更新 更多