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

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

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

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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 без взаимоблокировок, в среде, где я знаю, что пул потоков будет насыщен?