我正在使用Tibco BW5.I有JMS选择器字符串,如下所示:
SelectorString = "Name='Value' AND Name='Value' AND Name='Value' AND ...."
我需要在“JMS Queue Requestor”或“JMS Queue Sender”中使用此字符串作为JMS选择器。
解:
要将选择器设置为“JMS队列请求程序”或“JMS队列发送者”,我在“输入”选项卡中使用“DynamicProperties”:
为了将SelectorString映射到“DynamicProperties”,我在里面用MapData创建了“Repeat-Until-True”组。
重复条件:
($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”动态属性。
请看截图:
有没有更优雅的方式来做到这一点?
看起来你对基于集合的数学没有多少经验...一个典型的“顺序程序员的集合方法”:-(
假设您有一个非分层语句(在名称值对之间只包含“AND”),您可以将“AND”转换为单个“特殊字符”(如“¶”),使用for-each XML元素由此char创建的标记化字符串,然后拆分并修剪for-each中的名称和值。
这是基于集合的方法,btw比迭代循环快得多(4条简单的XPath代码行)