BizTalk 映射:如何从循环中提取单行,但可能将其扩展到少数目标字段?

问题描述

我有以下问题。在 BizTalk 核心 (XML) 中,我有一个可以复制几次的标签。它的基数是 n,比方说 - 理论上 0 ≤ n ≤ 99。我们称之为 Note[n]。

在传出文件(它是扁平的)中,我有五个(正好五个)适当的字段。我们称它们为 FTX1..5。所以我需要做的是将 Note[1](如果存在)映射到 FTX1,Note[2](如果存在)到 FTX2,...,Note[5](如果存在)到FTX5.

但这还没有结束。此任务的第二部分更为复杂。

每个 FreeText 限制为 70 个字符。但理论上每个音符都没有限制。因此,在最简单的情况下,当所有 Notes 的长度小于 70 个字符时,我应该将 Note[1..5] 映射到 FTX1..5。但。例如,如果 Note[1] 包含 200 个字符,我应该将前 70 个映射到 FTX1,接下来的 70 个映射到 FTX2,最后的 60 个映射到 FTX3。那么我应该取Note[2],映射到FTX4,将Note[3]映射到FTX5(如果两者都小于70)。其余的应该忽略。例如,如果 Note[1] 包含 400 个字符,我应该将前 350 个映射到 FTX1..5,截断最后 50 个,并忽略所有其他注释。等等。

是否可以仅使用 Functoids 来做到这一点?我将不胜感激。

Picture of what I need

解决方法

如果使用 Cumulative Concatenate functoid,您需要开始,这会将 Note 节点添加到一起。

之后,如果您只是想分割字符串,您可以使用 Left 和 String Extract functoids 来分割字符串。

enter image description here

对于以下输入

<ns0:Root xmlns:ns0="http://Scratch.SO65382125in">
  <Note>This in note number 1,that needs to have some length.</Note>
  <Note>This in note number 2,that needs to have some length.</Note>
  <Note>This in note number 3,that needs to have some length.</Note>
</ns0:Root>

你得到这个输出

<ns0:Root xmlns:ns0="http://Scratch.SO65382125out">
    <FreeText1>This in note number 1,that needs to have some length.This in note num</FreeText1>
    <FreeText2>ber 2,that needs to have some length.This in note number 3,that need</FreeText2>
    <FreeText3>s to have some length.</FreeText3>
    <FreeText4/>
    <FreeText5/>
</ns0:Root>

请注意,这是将句子连在一起,并将单词一分为二。第一个是通过在累积连接 functoid 之前向连接 functoid 添加一个空格常量来轻松修复。

enter image description here

输出

<ns0:Root xmlns:ns0="http://Scratch.SO65382125out">
    <FreeText1>This in note number 1,that needs to have some length. This in note nu</FreeText1>
    <FreeText2>mber 2,that needs to have some length. This in note number 3,that ne</FreeText2>
    <FreeText3>eds to have some length. </FreeText3>
    <FreeText4/>
    <FreeText5/>
</ns0:Root>

为了避免将单词分开会更复杂,您可能不得不使用脚本functoids。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...