Объединение значений из повторяющихся узлов в повторяющиеся узлы в BizTalk Maps

У меня есть что-то подобное во входном XML

<Root>
<OrderText>
    <item>item1</item>
    <item>item2</item>
  </OrderText>
  <OrderText>
    <item>item3</item>
    <item>item4</item>
    <item>item5</item>
  </OrderText>
</Root>

Из этого ввода желаемый вывод

<Root>
 <OrderItems>
  <Items>item1#item2</Items>  
 </OrderItems>
  <OrderItems>
  <Items>item3#item4#item5</Items>  
 </OrderItems>
</Root>

Я пытаюсь найти решение здесь и следил за вопросом, заданным мною давно (ссылка Как объединить несколько повторяющихся узлов в один узел - BizTalk), но с таким подходом я получаю результат, как показано ниже

<Root>
 <OrderItems>
  <Items>item1#item2#item3#item4#item5</Items>  
 </OrderItems>
  <OrderItems>
  <Items>item1#item2#item3#item4#item5</Items>  
 </OrderItems>
</Root>

что совершенно неправильно. может кто-нибудь помочь мне, пожалуйста.


person Gaurav Rawat    schedule 28.03.2020    source источник


Ответы (1)


Ознакомьтесь с документацией Cumulative Concatenate Functoid< /а>

Это дает вам первую подсказку

Параметр 2: Необязательное числовое значение, указывающее область, в которой должно выполняться накопление. Значение по умолчанию равно нулю (0), что указывает на то, что областью накопления является все входное сообщение экземпляра.

Попробуйте добавить второй параметр и установить для него значение 1. Это приведет к приведенному ниже выводу, который ближе к тому, что вы хотите.

введите здесь описание изображения

<Root>
    <OrderItems>
        <Items>item1#item2#</Items>
        <Items>item3#item4#item5#</Items>
    </OrderItems>
</Root>

Вторую подсказку можно найти, перейдя в список ошибок, отобразив сообщения и нажав «Дважды щелкните здесь, чтобы показать/скрыть ссылки компилятора». Это приведет к тому, что на поверхности карты появятся оранжевые линии, показывающие, как карта думает, что она должна зацикливаться. См. скриншот выше, который также показывает это. Обратите внимание, как это зацикливается только на корне?

Таким образом, второе исправление заключается в том, чтобы нарисовать линию от OrderText до OrderItems, а при появлении запроса выберите «Прямая ссылка», что говорит о том, что вы хотите, чтобы она также зацикливалась.

введите здесь описание изображения

Это даст вам на выходе близкое к желаемому результату

<Root>
    <OrderItems>
        <Items>item1#item2#</Items>
    </OrderItems>
    <OrderItems>
        <Items>item3#item4#item5#</Items>
    </OrderItems>
</Root>

Удаление лишнего # в конце может быть выполнено либо с помощью ряда фуктоидов, таких как размер строки, String Left и функтоид вычитания, либо с помощью Scripting Fuctoid.

person Dijkgraaf    schedule 29.03.2020
comment
Ты ангел. Большое спасибо. - person Gaurav Rawat; 30.03.2020