Мне нужно отобразить входящий документ EDI, который содержит некоторые данные в необычном формате. Я хотел бы преобразовать некоторые сцепленные данные обратно в исходные пары ключ-значение в целевом документе.
Исходные данные
Исходные пары ключ-значение были объединены в длинную строку, а затем строка была разделена на несколько элементов документа EDI следующим образом:
MAN PB <OPTION 1 TOKEN> OPTION 1 VALUE <OPTION 2 TOK
MAN PB EN> OPTION 2 VALUE <OPTION 3 TOKEN> OPTION 3
MAN PB VALUE <OPTION 4 TOKEN> OPTION 4 VALUE <OPTION
MAN PB 5 TOKEN> OPTION 5 VALUE <OPTION 6 TOKEN> OPT
MAN PB ION 6 VALUE
ПРИМЕЧАНИЕ: угловые скобки используются только для отделения токена от значения. Это не XML данные, закодированные в EDI do c.
Частичное преобразование
Я успешно преобразовал значения обратно в сцепленную строку, используя Cumulative Concatenate
функтоид , сопровождаемый скриптом functoid, который очищает несколько нежелательных символов. Я могу сопоставить сцепленную строку с одним полем в целевом документе:
"<OPTION 1 TOKEN> OPTION 1 VALUE <OPTION 2 TOKEN> OPTION 2 VALUE <OPTION 3 TOKEN> OPTION 3 VALUE <OPTION 4 TOKEN> OPTION 4 VALUE <OPTION 5 TOKEN> OPTION 5 VALUE <OPTION 6 TOKEN> OPTION 6 VALUE"
Желаемый результат
Как мне сопоставить эту заново собранную строку с al oop в вместо документа назначения?
В месте назначения есть повторяющийся элемент <option>
, и я хотел бы, чтобы строка была разбита и отображена так, чтобы она выглядела так:
<item>
...some other stuff...
<option>
<name>OPTION 1 TOKEN</name>
<value>OPTION 1 VALUE</value>
</option>
<option>
<name>OPTION 2 TOKEN</name>
<value>OPTION 2 VALUE</value>
</option>
...remaining options...
</item>
Дополнительно Подробнее
В BizTalk, похоже, нет функции разбиения строк, которую я могу использовать здесь, если только я что-то упустил.
Я уже создал C# функцию, которая может преобразовывать объединенная строка в список пар ключ-значение, однако я не могу понять, как применить это в BizTalk b / c, кажется, сценарии не работают с повторяемыми возвращаемыми значениями, такими как List<>
, IEnuerable<>
, et c.
Мне также нужно запустить вторичный процесс преобразования данных, используя хранимую процедуру в MS SQL 2008 R2. Я также хотел бы рассмотреть решение на основе SQL.