1

请有人确认以下内容.. 我正在使用 Mirth Connect 3.5.08232。我的源连接器是一个数据库阅读器。

比如说,我正在使用一个返回多行的查询,并返回结果(通过 JavaScript),正如文档所建议的那样,这样 Mirth 会将每一行视为单独的消息。我还使用了几个映射器作为源转换器,并将映射的字段保存在我的通道映射中(最终只包含我在转换器中定义的那些字段)

在目标中,特别是在目标响应转换器(或目标主体,如果它是 JavaScript 编写器)中,我如何访问源字段?

我通过反复试验找到的唯一方法是

var rawMsg = connectorMessage.getRawData();
var xmlMsg = new XML(rawMsg);
logger.info(xmlMsg.some_field); // ignore the root element of rawMsg

这是正确的方法吗?我想也许可以很好地自动检测到的字段会被放入某种地图中,比如 sourceMap - 但情况似乎并非如此,对吧?

谢谢

4

1 回答 1

3

如果您在转换器中使用 Mapper 步骤来提取数据并将其放入变量映射(如通道映射),那么您可以使用以下任何方法从后续 JavaScript 上下文(包括 JavaScript 编写器,和你的响应变压器):

var value = channelMap.get('key');
var value = $c('key');
var value = $('key');

查看用户指南的变量映射部分了解更多信息。

回顾一下,假设您正在选择带有数据库阅读器的列“mycolumn”。发送到通道的 XML 将是这样的:

<result>
    <mycolumn>value</mycolumn>
</result>

然后,您可以选择将该消息的片段提取到特定变量中以供以后使用。转换器允许您轻松拖放示例入站消息的片段。 映射器变压器步骤

最后在您的 JavaScript Writer(或任何后续过滤器、转换器或响应转换器)中,只需将值拖到您想要的字段中: JavaScript 编写器

并且会自动插入相应的 JavaScript 代码: 插入代码

最后一点,如果您选择了很多变量并且不想单独为每个变量创建 Mapper 步骤,您可以使用 JavaScript Step 遍历消息并将每一列提取到单独的映射变量中:

for each (child in msg.children()) {
    channelMap.put(child.localName(), child.toString());
}

或者,您可以直接从 JavaScript 编写器中引用列:

var msg = new XML(connectorMessage.getEncodedData());

var column1 = msg.column1.toString();
var column2 = msg.column2.toString();
...
于 2017-08-10T14:53:09.787 回答