Tibco JMS队列请求程序“或”JMS队列发件人“Dinamic JMS属性映射

问题描述 投票:0回答:1

我正在使用Tibco BW5.I有JMS选择器字符串,如下所示:

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

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

解:

要将选择器设置为“JMS队列请求程序”或“JMS队列发送者”,我在“输入”选项卡中使用“DynamicProperties”:

dynamic selectors

为了将SelectorString映射到“DynamicProperties”,我在里面用MapData创建了“Repeat-Until-True”组。

重复条件:

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

Repeat

我将“名称”映射到:

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”动态属性。

请看截图:

Please see attached screenshot

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

tibco tibco-business-works
1个回答
1
投票

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

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

Process with mapping

ActivityInput

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

© www.soinside.com 2019 - 2024. All rights reserved.