0

我正在使用 Tibco BW5。我的 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"))) 

重复

我将“名称”映射到:

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

我将“价值”映射到:

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

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

请看截图:

请看附件截图

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

4

1 回答 1

1

看起来您对基于集合的数学没有太多经验......典型的“顺序程序员的集合方法”:-(

假设您有一个非分层语句(在名称值对之间仅包含“AND”),您可以一次将“AND”转换为单个“特殊字符”(如“¶”),使用 for-each XML 元素通过这个 char 将其标记化的字符串,然后在 for-each 中拆分和修剪名称和值。

带有映射的过程

活动输入

这是基于集合的方法,btw 比迭代循环快得多(4 行简单的 XPath 代码)

于 2018-09-15T08:05:50.217 回答