我对在Mrth中发送到XML的HL7消息的转换有疑问。
我的问题是消息段中有两个实例,现在我需要将它们分成两个xml tage。
所以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段上,在段5(名称)中有多个标签,然后在段中也有
我一直在与其他供应商一起向我们的系统提供信息的转换所使用的细分市场只有一个阶段,看起来像这样:
tmp['Patient']['Name']= msg['PID']['PID.5']['PID.5.2'].toString();
tmp['Patient']['Surname'] = msg['PID']['PID.5']['PID.5.1'].toString();
问题在于,代码中的两个段使我陷入了混乱
<Name><PID.5.2>TEST 2</PID.5.2><PID.5.2/></Name>
<Surname><PID.5.1>TEST G4M Nachname</PID.5.1><PID.5.1>NameOfBirth</PID.5.1></Surname>
我该如何更改格式,以便最前面的段类似于名称1和姓氏1,以及第二段名称2和姓氏2
更新:我已经更新了转换代码,它给出了正确的结果,但是尽管使用错误代码重新产生了重用,但它们仍然是错误消息。
<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)
但是在运行Mirth时返回此错误:
变压器错误错误消息:评估变压器时出错 com.mirth.connect.server.MirthJavascriptTransformerException: 频道:AGFA_DFT_PayloadBuilderV3连接器:OutputLog脚本 源:变压器源代码:604:tmp ['Patient'] ['MRN'] = msg ['PID'] ['PID.3'] ['PID.3.1']。toString(); 605:606:/ 患者姓名 分隔 / 607:608:var segmentlength = msg ['PID'] ['PID.5'] ['PID.5.2']。toString()。length; 609:波浪号= msg ['PID'] ['PID.5'] ['PID.5.2']。toString()。indexof('〜'); 610: tmp ['Patient'] ['Name'] = msg ['PID'] ['PID.5'] ['PID.5.2']。toString()。substring(0,tildeappears-1); 611:tmp ['Patient'] ['Name1'] = msg ['PID'] ['PID.5'] ['PID.5.2']。toString()。substring(tildeappears + 1,segmentlength); 612:tmp ['Patient'] ['Surname'] = msg ['PID'] ['PID.5'] ['PID.5.1']。toString(); 613:行号:609 详细信息:TypeError:在对象中找不到函数indexof 测试2。 40699b8f-7c07-4eaf-8d54-e6f423be853b:609(doTransform)在 40699b8f-7c07-4eaf-8d54-e6f423be853b:792(doScript)在 40699b8f-7c07-4eaf-8d54-e6f423be853b:794在 com.mirth.connect.server.transformers.JavaScriptFilterTransformer $ FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:154) 在 com.mirth.connect.server.transformers.JavaScriptFilterTransformer $ FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:119) 在 com.mirth.connect.server.util.javascript.JavaScriptTask.call(JavaScriptTask.java:113) 在java.util.concurrent.FutureTask.run(未知来源) java.util.concurrent.ThreadPoolExecutor.runWorker(未知源),位于 java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知源) java.lang.Thread.run(未知来源)
答案 0 :(得分:0)
因此,在研究并尝试了各种解决方案之后,我想出了一个非常简单的解决方案:
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();
唯一的技巧是记住索引从0开始。字符串的格式化可以通过上述两种方式中的任一种来完成,我提供了一个示例,介绍了每种尝试并发现有效的格式化方式。 / p>