Tibco JMS队列请求者”或“JMS队列发送者”Dinamic JMS属性映射

Tibco JMS队列请求者”或“JMS队列发送者”Dinamic JMS属性映射,tibco,tibco-business-works,Tibco,Tibco Business Works,我正在使用Tibco BW5。我有JMS选择器字符串,如下所示: SelectorString = "Name='Value' AND Name='Value' AND Name='Value' AND ...." 我需要在JMS队列请求者或JMS队列发送者中使用此字符串作为JMS选择器 解决方案: 要将选择器设置为JMS队列请求者或JMS队列发送者,我将在“输入”选项卡中使用DynamicProperties: 为了将SelectorString映射到DynamicProperties,我

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

SelectorString = "Name='Value' AND Name='Value' AND Name='Value' AND ...." 
我需要在JMS队列请求者或JMS队列发送者中使用此字符串作为JMS选择器

解决方案:

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

为了将SelectorString映射到DynamicProperties,我创建了一个包含MapData的Repeat Toll 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队列请求者动态属性

请参见截图:


还有更优雅的方法吗?

看起来您对基于集合的数学没有太多经验……这是一种典型的顺序程序员处理集合的方法:-

假设您有一个只包含名称-值对和名称-值对之间的非层次语句,您可以一次性将其转换为单个特殊字符,如¨,使用带有标记化字符串的for-each XML元素,并通过该字符将其标记,然后拆分和修剪for-each中的名称和值

:

这是一种基于集合的方法,顺便说一句,它比4行XPath代码的迭代循环快得多