Отображение BizTalk: как извлечь одну строку из цикла

У меня есть следующая проблема. В ядре BizTalk (XML) у меня есть тег, который можно реплицировать несколько раз. Его мощность равна n, скажем, теоретически 0 ≤ n ≤ 99. Назовем его Note[n].

В исходящем файле (он плоский) у меня есть пять (ровно пять) соответствующих полей. Назовем их FTX1..5. Итак, что мне нужно сделать, это сопоставить Note[1] (если он существует) с FTX1, Note[2] (если он существует) с FTX2, ..., Note[5] (если он существует) с FTX5.

Можно ли это сделать, используя только Functoids? Я пытался использовать функтоид Looping, но не понимаю, как извлекать каждую итерацию. С другой стороны, я не понимаю, могу ли я использовать зацикливание таблиц и экстрактор таблиц, поскольку на самом деле у меня нет таблицы.

Поэтому мне нужно что-то вроде того, что вы видите на картинке. На самом деле задача еще сложнее, но начнем с этого.

Кто-нибудь знает, может ли это быть решено только Functoids?

Буду признателен за любой совет..

Отображение BizTalk: как извлечь одну строку из цикла

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
428
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужны функции Iteration и Equal.

Связать примечание с каждым из узлов FreeText, а также с функтоидом итерации. Свяжите это с серией одинаковых функтоидов со значениями в диапазоне от 2 до 5, а также свяжите их с узлами FreeText.

Входной файл

<ns0:Root xmlns:ns0 = "http://Scratch.SO65382125in">
  <Note>Note_0</Note>
  <Note>Note_1</Note>
  <Note>Note_2</Note>
</ns0:Root>

Вывод (отформатированный)

<ns0:Root xmlns:ns0 = "http://Scratch.SO65382125out">
    <FreeText1>Note_0</FreeText1>
    <FreeText2>Note_1</FreeText2>
    <FreeText3>Note_2</FreeText3>
</ns0:Root>

Обратите внимание, что он работает без Looping Functoid, но показывает предупреждение

У конечного узла "FreeText2" есть несколько входов. Чтобы узел назначения имел несколько входов, один из его предков должен быть подключен к циклическому функтоиду.

Вы можете избавиться от этого предупреждения, добавив Looping Functoid

Dijkgraaf, спасибо за быстрый ответ и большое спасибо за решение. Оно работает. Но, как я уже говорил, задача еще сложнее... поэтому вторая часть этой задачи:

MichaelMS 20.12.2020 22:10

Dijkgraaf, спасибо за быстрый ответ и большое спасибо за решение. Оно работает. Но, как я уже упоминал, задача еще более сложная... поэтому вторая часть этой задачи такова: каждый FreeText имеет ограничение в 70 символов. Но Note в теории не имеет ограничений. Итак, в самом простом случае, когда длина всех Notes меньше 70 символов, мы просто сопоставляем Note[1..5] с FTX1..5. Но. Если Note[1] содержит, например, 200 символов, я должен сопоставить первые 70 с FTX1, следующие 70 с FTX2, последние 60 с FTX3. Тогда я должен взять Note[2], сопоставить с FTX4 и Note[3] с FTX5. Остальное следует игнорировать. Можно ли это сделать с помощью функтоидов? Спасибо!

MichaelMS 20.12.2020 22:25

Dijkgraaf, вторую часть задачи я поместил в комментарий, так как она связана с первой частью. Лучше задать новый вопрос? Спасибо!

MichaelMS 20.12.2020 22:28

@MichaelMS Было бы лучше задать новый вопрос, да. Фундаментальное изменение вопроса после того, как на него был дан ответ, как правило, осуждается. Вы можете вернуться к исходному вопросу, если это поможет прояснить новый вопрос.

Dijkgraaf 20.12.2020 22:30

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

Как сопоставить список атрибутов со схемой на основе столбцов с условием в BizTalk?
Параметры функции расширения или возвращаемые значения с типом Clr «XmlQualifiedName» не поддерживаются при попытке использовать FILE.ReceivedFileName.
Как подключиться к службе SFTP на основе решения учетной записи хранения Azure с помощью BizTalk 2013
Как я могу получить доступ к свойству контекста (имя входящего файла) в преобразовании (пользовательский xslt)?
Есть ли в BizTalk требование, согласно которому входящее сообщение должно быть отправлено?
Использование функции XSLT format-number для округления значения до 2 знаков после запятой.
Сопоставление записи внутри цикла с записью назначения, которая не является частью области
Тестирование установки BizTalk SAP
BizTalk WCF-OracleDB (после)опроса(-доступные)-утверждения
Как я могу запустить код, который имеет только асинхронные API без взаимоблокировок, в среде, где я знаю, что пул потоков будет насыщен?