代码之家  ›  专栏  ›  技术社区  ›  Marc L

如何转换包含两段欢乐的HL7消息

  •  1
  • Marc L  · 技术社区  · 6 年前

    我对mrth中的HL7消息到XML的传输格式有问题。

    我遇到的问题是,消息段有两个实例,我现在需要将其分为两个XML阶段。

    所以HL7段如下:

    PID|1|16^^^MEDAVIS^PI|||MyTest^TEST 2^T^^MISS~Test2^^^^^^B|00MemberCode|19921106|M|||MANNING ROAD^^DURBAN^^4001^ZA||0313017352~072363395^^CP~^NET^Internet^TEST@GMAIL.COM|0313017352~072363395^^CP~^NET^Internet^TEST@GMAIL.COM|||||123456PatDepCode|||||||ZA||||N
    

    因此,问题出在pid段,其中segement 5(name)和segment中都有多个标签。

    我在向我们的系统提供信息的另一个供应商中使用的转换只使用了段中的一个阶段,看起来像这样:

    tmp['Patient']['Name']= msg['PID']['PID.5']['PID.5.2'].toString();
    tmp['Patient']['Surname'] =  msg['PID']['PID.5']['PID.5.1'].toString();
    

    问题是,在代码中的两个段中,我最终会遇到这种混乱

            <Name>&lt;PID.5.2&gt;TEST 2&lt;/PID.5.2&gt;&lt;PID.5.2/&gt;</Name>
        <Surname>&lt;PID.5.1&gt;TEST G4M Nachname&lt;/PID.5.1&gt;&lt;PID.5.1&gt;NameOfBirth&lt;/PID.5.1&gt;</Surname>
    

    我如何改变转换,使forst段类似于1和surname1,第二段类似于2和surname2

    更新:我已经更新了转换代码,它给出了正确的结果,但是它们仍然是一条错误消息,尽管它使用带有错误的代码生成了Reuslt。

        <PID.5>
            <PID.5.1>TEST G4M Nachname</PID.5.1>
            <PID.5.2>TEST 2</PID.5.2>
            <PID.5.3>T</PID.5.3>
            <PID.5.4/>
            <PID.5.5>MISS</PID.5.5>
        </PID.5>
        <PID.5>
            <PID.5.1>NameOfBirth</PID.5.1>
            <PID.5.2/>
            <PID.5.3/>
            <PID.5.4/>
            <PID.5.5/>
            <PID.5.6/>
            <PID.5.7>B</PID.5.7>
        </PID.5>
    

    因此,调整后的转换如下:

    /*patient name seperation*/
    var segmentlength = msg['PID']['PID.5']['PID.5.2'].toString().length;
    var tildeappears = msg['PID']['PID.5']['PID.5.2'].toString().indexof('~');
        tmp['Patient']['Name'] = msg['PID']['PID.5']['PID.5.1'].toString().substring(0,tildeappears-1);
        tmp['Patient']['Name1']= msg['PID']['PID.5']['PID.5.1'].toString().substring(tildeappears+1,segmentlength)
    

    但当run mirth返回此错误时:

    变压器错误错误消息:评估变压器时出错 com.mirth.connect.server.mirthjavascripttransformereexception: 频道:agfa_dft_payloadbuilderv3 connector:outputlog脚本 来源:变压器源代码:604:TMP[“患者”][MRN']= msg['pid']'pid.3']'pid.3.1'].tostring();605:606:。/ 患者姓名 分离 /607:608:var段长= msg['pid']'pid.5']'pid.5.2'].tostring().length;609:TildAppears= msg['pid'][pid.5'][pid.5.2'].tostring().indexof('~');610: TMP[患者][姓名]= msg['pid']'pid.5']'pid.5.2'].tostring().substring(0,tildAppears-1); 611:TMP[患者][姓名1']= msg['pid']'pid.5']'pid.5.2'].tostring().substring(tildAppears+1,segmentlength); 612:TMP[患者][姓]]= msg['pid']'pid.5']'pid.5.1'].tostring();613:行号:609 详细信息:类型错误:在对象中找不到函数indexof 测试2.在 40699B8F-7C07-4EAF-8D54-E6F423BE853B:609(doTransform),位于 40699B8F-7C07-4EAF-8D54-E6F423BE853B:792(doscript),网址: 40699B8F-7C07-4EAF-8D54-E6F423BE853B:794在 Migth.Connect .Server .变压器.javaCRIPPTFLIPTRONCEL $FielToReleTrase.DoCal.(JavaScript PrimTurrase.java:154) 在 Migth.Connect .Server .变压器.javaCRIPPTFLIPTRONCEL $FielToReleTrase.DoCal.(JavaScript PrimTurrase.java:119) 在 Myth.Connect .Serv.Unj.javascript .javascript pTask.调用(JavaScript,Task.java:113) 在Java.UTI.Actudio.FuturTask.Access(未知源)处 Java.UTI.Orth.TycRePoLeExtor。RunWorver(未知源)AT Java.UTI.Orth.TycRePoLeExtor的$Works.运行(未知源) Java.Lang.Tr.Run(未知源)

    1 回复  |  直到 6 年前
        1
  •  0
  •   Marc L    6 年前

    tmp['Patient']['Name'] = msg['PID']['PID.5'][0]['PID.5.2'].toString();
    tmp['Patient']['Name1'] = msg['PID']['PID.5'][1]['PID.5.2'].toString();
    tmp.Patient.Surname = msg['PID']['PID.5'][0]['PID.5.1'].toString();
    tmp.Patient.Surname1 = msg['PID']['PID.5'][1]['PID.5.1'].toString();