【问题标题】:passing javascript object from one channel to other channel in mirth将javascript对象从一个频道传递到另一个频道
【发布时间】:2013-07-17 07:51:40
【问题描述】:

Channel A 中,我将 XML 作为输入。下面提到的传入 XML:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<bookstore>
<books>
<book>
<title>SpringInAction</title>
<NoOfCopies>10</NoOfCopies>
</book>
<book>
<title>HibernateInAction</title>
<NoOfCopies>8</NoOfCopies>
</book>
<book>
<title>JSFInAction</title>
<NoOfCopies>5</NoOfCopies>
</book>
<book>
<title>StrutsInAction</title>
<NoOfCopies>9</NoOfCopies>
</book>
<book>
<title>JSPInAction</title>
<NoOfCopies>4</NoOfCopies>
</book>
</books>
</bookstore>

我在 Source 的 Edit Transformer 中解析这个 XML 并制作 JavaScript 对象并将这个 JavaScript 对象放入一个通道映射中,如下所示:

var book=new Object();
book.title = msg['books']['book'][0]['title'].toString();
book.copies = msg['books']['book'][0]['NoOfCopies'].toString();
logger.info("book "+book);
channelMap.put("book",book);

现在我想将这个 JavaScript 对象从 Channel A 的目的地传递给其他 Channel B 并且 Channel B 接收这个 JavaScript 对象作为输入剩下的处理。在Mirth有可能吗?

我使用的是 Mirth 版本 2.2.1.5861。

【问题讨论】:

    标签: javascript channel mirth


    【解决方案1】:

    可以使用全局通道映射传递对象。其他两个映射被持久化到数据库中,因此 Mirth Connect 引擎将它们序列化为字符串。但是,对于全局频道映射,您应该在脚本中处理上下文(顾名思义,它不仅存在于消息或频道上下文中)。

    有一个使用全局通道映射here 传递对象的示例。

    【讨论】:

    • 小心使用全局地图。它不是每个实例的变量......它实际上是一个全局变量。一个通道的变化会改变另一个通道的值。如果您正在处理多条消息,那么您期望在通道 B 中的值可能已经在通道 A 中更改。全局变量非常适合配置类型设置。 也许 作为 Mutext 的一种类型 - 但我会避免使用全局变量以您概述的方式传递变量。正如我在回答中显示的那样,您最好进行序列化
    【解决方案2】:

    在保存通道变量之前,将其序列化(json对象)。

    在您的频道目标中,写出“book”变量。

    所以是这样的:

    在变压器中

    var book=new Object();
    book.title = msg['books']['book'][0]['title'].toString();
    book.copies = msg['books']['book'][0]['NoOfCopies'].toString();
    logger.info("book "+book);
    
    var Jbook = JSON.stringify(book);
    channelMap.put("Jbook",Jbook );
    

    在目标模板中

    ${jbook}
    

    然后在接收通道上

    var book = JSON.parse(msg.toString());
    

    我没有验证这个代码,但它应该给你一个编码策略。

    Mirth Discussion about JSON

    另外:请参阅我们的 HealthcareIT 项目提案area51.StackExchange。这是一个很好的问题。

    【讨论】:

    • 我刚刚发现,ChronoFish 是对的,JSON 对象应该被序列化,或者您可以将其用作消息模板本身。如果您执行 routeMessage,我无法让 JSON 对象在通道之间传递,但如果我将它序列化(转换为字符串),它就可以通过)。性能很棒,能够在 10 分钟内处理 100 MB 文件(每条记录是 5k 左右)。 (请注意,我必须使用消息分组 javascript 功能进行自己的解析才能获得此速度)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2021-11-08
    • 2020-05-03
    • 1970-01-01
    • 2017-08-26
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多