在我的源连接器中,由于我的要求和参数,我正在使用javascript进行数据库工作。
最终结果是存储数据。
ifxResults = ifxConn.executeCachedQuery(ifxQuery); //var is declared
我需要在目标转换器中使用这些结果。
我试过channelMap.put("results", ifxResults);
。
我得到以下错误ReferenceError: "channelMap" is not defined.
我也试过使用return ifxResults
,但我不知道如何在目标变换器中访问它。
您想通过频道将每一行作为单独的邮件发送吗?如果是这样,听起来好像你想在JavaScript模式下使用数据库阅读器。只返回ResultSet(如果你像这样使用executeCachedQuery,它实际上是一个CachedRowSet),并且通道将处理其余部分,将每行的XML表示作为离散消息分派。
如果要将聚合的结果集中的所有行发送到单个消息中,很快就可以使用Database Reader:MIRTH-2337
Mirth Connect 3.5将于下周发布,以便您可以利用它。但是,如果您不能等待或不想升级,那么您仍然可以使用JavaScript Reader执行此操作:
var processor = new org.apache.commons.dbutils.BasicRowProcessor();
var results = new com.mirth.connect.donkey.util.DonkeyElement('<results/>');
while (ifxResults.next()) {
var result = results.addChildElement('result');
for (var entries = processor.toMap(ifxResults).entrySet().iterator(); entries.hasNext();) {
var entry = entries.next();
result.addChildElement(entry.getKey(), java.lang.String.valueOf(entry.getValue()));
}
}
return results.toXml();
我知道这个问题有点陈旧,但这里只是记录的答案。
对于这个答案,我假设您正在使用源连接器类型的JavaScript Reader,并且您尝试在JavaScript Reader Settings编辑窗格中使用channelMap
。
问题是channelMap
变量在这部分频道中不可用。它仅适用于滤波器和变压器。
您可以通过使用globalChannelMap
变量来完成您想要的任务,例如:
globalChannelMap.put("results", ifxResults);
当我一次处理一条记录并需要将一些设置传递到目标通道时,我通常需要这样做。如果你像我过去那样做,那么你首先要在源通道的变换器中创建一个globalChannelMap键/值:
globalchannelMap.put("ProcID","TestValue");
然后转到“目的地”选项卡并选择目标频道以确保将其发送到目的地(我从未尝试过将其用于具有多个目的地的频道,因此我不确定是否需要做任何不同的事情)。
Destination tab of source channel
请注意,ProcID现在列在“目标映射”框中。单击Map Variable框旁边的New按钮,您将看到Variable 1出现。双击它并输入映射键,在本例中为ProcID。
现在转到目标通道的源变换器。在那里你可以输入以下代码:
var SentValue = sourceMap.get("ProcID");
现在,当您的源通道放弃控制时,目标转换器中的SentValue具有ProcID中的任何内容。