首页 > 解决方案 > 如何将分隔字符串映射到 BizTalk 2013 R2 中的循环?

问题描述

我需要映射一个传入的 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

注意:尖括号仅用于将标记与值分开。这不是编码到 EDI 文档中的 XML 数据。

部分转换

我已经使用 functoid 成功地将值转换回连接字符串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"

期望的结果

如何将此重新组装的字符串映射到目标文档中的循环?

目的地有一个重复<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<>等。

我还必须使用 MSSQL 2008 R2 中的存储过程对数据运行二次转换过程。我还会考虑基于 SQL 的解决方案。

标签: biztalkedibiztalk-mapper

解决方案


您应该能够在用于解析消息的模式中定义它。这是最简单和最好的处理方式 - 但是有


推荐阅读