Javascript 如何使用Mirth Connect 3.4.1将json转换为HL7?

Javascript 如何使用Mirth Connect 3.4.1将json转换为HL7?,javascript,json,mirth,hl7-v3,Javascript,Json,Mirth,Hl7 V3,我现在定义了一个javascript转换器,但在转换时总是提示失败,代码如下: var input = JSON.parse(connectorMessage.getRawData()); var patienId = input.PATIENT_ID; var patientName = input.PATIENT_NAME; var idCard = input.ID_NO; var i = 1; createSegment("MSH", msg, i++); msg['MSH']['MSH

我现在定义了一个javascript转换器,但在转换时总是提示失败,代码如下:

var input = JSON.parse(connectorMessage.getRawData());
var patienId = input.PATIENT_ID;
var patientName = input.PATIENT_NAME;
var idCard = input.ID_NO;
var i = 1;
createSegment("MSH", msg, i++);
msg['MSH']['MSH.1']['MSH.1.1'] = '|';
msg['MSH']['MSH.2']['MSH.2.1'] = '^~\\&';
msg['MSH']['MSH.3']['MSH.3.1'] = patienId;
msg['MSH']['MSH.4']['MSH.4.2'] = patientName;
msg['MSH']['MSH.5']['MSH.5.1'] = idCard;
Transformer error
ERROR MESSAGE: Error evaluating transformer
com.mirth.connect.server.MirthJavascriptTransformerException: 
CHANNEL:    WsToHttpTest
CONNECTOR:  sourceConnector
SCRIPT SOURCE:  TRANSFORMER
LINE NUMBER:    31
 DETAILS:   TypeError: Cannot set property "1" of undefined to ""
    at f4645dbe-9637-415e-ae39-f3dce72d6eaa:31 (createSegment)
    at f4645dbe-9637-415e-ae39-f3dce72d6eaa:53 (doTransform)
    at f4645dbe-9637-415e-ae39-f3dce72d6eaa:80 (doScript)
    at f4645dbe-9637-415e-ae39-f3dce72d6eaa:82
    at                       com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:154)
at com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:119)
at com.mirth.connect.server.util.javascript.JavaScriptTask.call(JavaScriptTask.java:113)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

[enter image description here][1]
例外情况如下:

var input = JSON.parse(connectorMessage.getRawData());
var patienId = input.PATIENT_ID;
var patientName = input.PATIENT_NAME;
var idCard = input.ID_NO;
var i = 1;
createSegment("MSH", msg, i++);
msg['MSH']['MSH.1']['MSH.1.1'] = '|';
msg['MSH']['MSH.2']['MSH.2.1'] = '^~\\&';
msg['MSH']['MSH.3']['MSH.3.1'] = patienId;
msg['MSH']['MSH.4']['MSH.4.2'] = patientName;
msg['MSH']['MSH.5']['MSH.5.1'] = idCard;
Transformer error
ERROR MESSAGE: Error evaluating transformer
com.mirth.connect.server.MirthJavascriptTransformerException: 
CHANNEL:    WsToHttpTest
CONNECTOR:  sourceConnector
SCRIPT SOURCE:  TRANSFORMER
LINE NUMBER:    31
 DETAILS:   TypeError: Cannot set property "1" of undefined to ""
    at f4645dbe-9637-415e-ae39-f3dce72d6eaa:31 (createSegment)
    at f4645dbe-9637-415e-ae39-f3dce72d6eaa:53 (doTransform)
    at f4645dbe-9637-415e-ae39-f3dce72d6eaa:80 (doScript)
    at f4645dbe-9637-415e-ae39-f3dce72d6eaa:82
    at                       com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:154)
at com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:119)
at com.mirth.connect.server.util.javascript.JavaScriptTask.call(JavaScriptTask.java:113)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

[enter image description here][1]

上述代码中的问题始于
createSegment
code。在那之前一切都很好

在出站转换器中,创建一个虚拟消息模板,如下所示: 这只是一个同名模板,您正在定义它来创建HL7段范围

MSH|^~\&|||||||||||
PID||||||||||||||||||||
PD1|||||
考虑到您收到类似以下内容的JSON:

{
    "PATIENT_ID": "XXXX",
    "PATIENT_NAME": "John",
    "ID_NO": "454141541"
}
我认为这种语法不正确
createSegment('MSH',msg,I++)
我已修改了您在上面提供的代码:

var input = JSON.parse(connectorMessage.getRawData());
var patienId = input.PATIENT_ID;
var patientName = input.PATIENT_NAME;
var idCard = input.ID_NO;
msg=tmp;
createSegment('MSH', msg);
msg['MSH']['MSH.1']= "|";
msg['MSH']['MSH.2']= "^~\\&";
msg['MSH']['MSH.3']= patienId;
msg['MSH']['MSH.4']= patientName;
msg['MSH']['MSH.5']= idCard;
您还可以按照您建议的方式在HL7消息中增加计数器。参考柜台:


tmp中有什么?@brijexecon tmp是出站消息的欢乐消息对象。msg if用于入站消息