请有人确认以下内容.. 我正在使用Mirth Connect 3.5.08232。 我的Source Connector是一个数据库阅读器。
说,我正在使用返回多行的查询,并返回结果(通过JavaScript),如文档所示,以便Mirth将每行视为单独的消息。我还使用几个映射器作为源变换器,并将映射的字段保存在我的通道映射中(最终只包含我在变换器中定义的那些字段)
在目标中,特别是在目标响应转换器(或目标主体,如果它是JavaScript编写器)中,如何访问源字段?
我通过反复试验找到的唯一方法是
var rawMsg = connectorMessage.getRawData();
var xmlMsg = new XML(rawMsg);
logger.info(xmlMsg.some_field); // ignore the root element of rawMsg
这是正确的方法吗?我想也许那些被很好地自动检测到的字段会放在某种地图中,比如sourceMap - 但事实并非如此,对吗?
谢谢
答案 0 :(得分:3)
如果您在变换器中使用Mapper步骤来提取数据并将其放入变量映射(如通道映射),那么您可以使用以下任何方法从后续JavaScript上下文中检索它(包括JavaScript Writer和您的响应转换器):
var value = channelMap.get('key');
var value = $c('key');
var value = $('key');
请查看User Guide的“变量地图”部分以获取更多信息。
所以回顾一下,说你选择了一个专栏" mycolumn"使用数据库阅读器。发送到频道的XML将是这样的:
<result>
<mycolumn>value</mycolumn>
</result>
然后,您可以选择将该消息的片段提取到特定变量中以供以后使用。变换器允许您轻松拖放样本入站消息。
最后在您的JavaScript Writer中(或在任何后续的过滤器,变换器或响应变换器中),只需将值拖到您想要的字段中:
最后一点,如果您选择批次变量,并且不想单独为每个变量制作Mapper步骤,则可以使用JavaScript步骤来迭代消息,将每列提取到单独的映射变量中:
for each (child in msg.children()) {
channelMap.put(child.localName(), child.toString());
}
或者,您可以直接从JavaScript Writer中引用列:
var msg = new XML(connectorMessage.getEncodedData());
var column1 = msg.column1.toString();
var column2 = msg.column2.toString();
...