Отображение свойств Jam динамического JMS Tibco JMS Queue "или" Отправитель очереди JMS "

Я работаю с 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" я использую "DynamicProperties" на вкладке "Input":

динамические селекторы

Для отображения SelectorString в "DynamicProperties" я создал группу "Repeat-Before-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".

Пожалуйста, смотрите скриншот:

Пожалуйста, смотрите прикрепленный скриншот

Есть ли более элегантный способ сделать это?

1 ответ

Похоже, у вас не так много опыта с математикой на основе множеств... типичный "подход последовательных программистов к множествам":-(

Предполагая, что у вас есть неиерархический оператор (содержащий ТОЛЬКО "И" между парами "имя-значение"), вы можете один раз перевести "И" в один "специальный символ" (например, "¶"), используйте элемент XML для каждого элемента с токенизированная строка это этим символом, а затем разделить и обрезать имя и значения внутри для каждого.

Процесс с отображением

ActivityInput:

Это подход, основанный на множествах, который, между прочим, намного быстрее, чем цикл итерации (4 простые строки кода XPath)

Другие вопросы по тегам