在mirth中将javascript对象从一个通道传递到另一个通道

在mirth中将javascript对象从一个通道传递到另一个通道,javascript,channel,mirth,Javascript,Channel,Mirth,在通道A中,我获取XML作为输入。传入的XML如下所述: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <bookstore> <books> <book> <title>SpringInAction</title> <NoOfCopies>10</NoOfCopies> </book> <book> <

通道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>
现在我想把这个JavaScript对象从通道A的目的地传递到另一个通道B,并且通道B接收这个JavaScript对象作为输入,并进行其余的处理。这可能在欢乐中实现吗


我使用的是Mirth版本2.2.1.5861。

在保存通道变量之前,将其序列化(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);
channelMap.put("book",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());
我还没有验证这个代码,但它应该给你一个编码策略


另外:请参阅我们的HealthcareIT项目提案,网址为。这是一个好问题。

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


有一个使用全局通道贴图传递对象的示例

使用全局地图时要小心。它不是每个实例的变量…它实际上是一个全局变量。一个通道中的更改会更改另一个通道中的值。如果您正在处理多条消息,则通道B中预期的值可能已在通道A中更改。全局变量非常适合配置类型设置。也许是一种Mutext,但我会避免使用globals以您概述的方式传递变量。正如我在回答中所展示的那样,你最好进行序列化。我刚刚揭示了这一点,ChronoFish是对的,JSON对象应该序列化,或者你可以将其用作消息模板本身。如果执行routeMessage,我无法让JSON对象在通道之间传递,但是如果我序列化它(转换为字符串),它传递的很好)。性能非常好,能够在10分钟内处理100 MB的文件(每条记录大约5公里)。(注意,为了达到这个速度,我必须使用消息分组javascript功能进行自己的解析)。