Tibco JMS 队列请求程序”或 "JMS Queue Sender" 动态 JMS 属性映射

Tibco JMS Queue Requestor" or "JMS Queue Sender" Dinamic JMS properties mapping

我正在与 Tibco 合作 BW5.I JMS 选择器字符串如下所示:

SelectorString = "Name='Value' AND Name='Value' AND Name='Value' AND ...." 

我需要在 "JMS Queue Requestor" 或 "JMS Queue Sender" 中使用此字符串作为 JMS 选择器。

解法:

为了将选择器设置为 "JMS Queue Requestor" 或 "JMS Queue Sender" 我在 "Input" 选项卡中使用 "DynamicProperties":

为了将 SelectorString 映射到 "DynamicProperties",我创建了 "Repeat-Until-True" 组,其中包含 MapData。

重复条件:

($i >= count(tib:tokenize($Start/root/SelectorString, "AND"))) 

我将 "name" 映射到:

tib:trim(tib:tokenize(tib:tokenize($Start/root/SelectorString, "AND")[$i], "=")[1])

我将 "value" 映射到:

substring-before(substring-after(tib:tokenize(tib:tokenize($Start/root/SelectorString, "AND")[$i], "=")[2], "'"), "'")

然后我将累积输出设置为"JMS Queue Requestor"动态属性。

请看截图:

有没有更优雅的方法来做到这一点?

看起来你对基于集合的数学没有太多经验......一个典型的"sequential programmer's approach to sets":-(

假设您有一个非分层语句(在名称值对之间仅包含 "AND"),您可以一次将“AND”翻译成单个 "special char"(如“¶”),将 for-each XML 元素与此 char 标记化的字符串一起使用,然后拆分并 trim for-each.

中的名称和值

Process with mapping

ActivityInput:

这是基于集合的方法,顺便说一下,它比迭代循环快得多(4 行简单的 XPath 代码)