将javascript对象从一个频道传递到另一个频道
Posted
技术标签:
【中文标题】将javascript对象从一个频道传递到另一个频道【英文标题】:passing javascript object from one channel to other channel in mirth 【发布时间】: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。
【问题讨论】:
【参考方案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 功能进行自己的解析才能获得此速度)。以上是关于将javascript对象从一个频道传递到另一个频道的主要内容,如果未能解决你的问题,请参考以下文章