У меня есть следующая проблема. В ядре BizTalk (XML) у меня есть тег, который можно реплицировать несколько раз. Его мощность равна n, скажем, теоретически 0 ≤ n ≤ 99. Назовем его Note[n].
В исходящем файле (он плоский) у меня есть пять (ровно пять) соответствующих полей. Назовем их FTX1..5. Итак, что мне нужно сделать, это сопоставить Note[1]
(если он существует) с FTX1, Note[2]
(если он существует) с FTX2, ..., Note[5]
(если он существует) с FTX5.
Можно ли это сделать, используя только Functoids? Я пытался использовать функтоид Looping, но не понимаю, как извлекать каждую итерацию. С другой стороны, я не понимаю, могу ли я использовать зацикливание таблиц и экстрактор таблиц, поскольку на самом деле у меня нет таблицы.
Поэтому мне нужно что-то вроде того, что вы видите на картинке. На самом деле задача еще сложнее, но начнем с этого.
Кто-нибудь знает, может ли это быть решено только Functoids?
Буду признателен за любой совет..
Вам нужны функции 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, спасибо за быстрый ответ и большое спасибо за решение. Оно работает. Но, как я уже упоминал, задача еще более сложная... поэтому вторая часть этой задачи такова: каждый 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. Остальное следует игнорировать. Можно ли это сделать с помощью функтоидов? Спасибо!
Dijkgraaf, вторую часть задачи я поместил в комментарий, так как она связана с первой частью. Лучше задать новый вопрос? Спасибо!
@MichaelMS Было бы лучше задать новый вопрос, да. Фундаментальное изменение вопроса после того, как на него был дан ответ, как правило, осуждается. Вы можете вернуться к исходному вопросу, если это поможет прояснить новый вопрос.
Dijkgraaf, спасибо за быстрый ответ и большое спасибо за решение. Оно работает. Но, как я уже говорил, задача еще сложнее... поэтому вторая часть этой задачи: