基本映射操作和复杂映射操作
BizTalk 映射器为各种映射方案提供解决方案,这些映射方案包括从简单的父子树类型操作到包含循环记录和层次结构的详细又复杂的操作。 映射方案的复杂性取决于你的偏好和业务需求-XML 架构定义 (XSD) 语言提供了在定义结构化格式方面的巨大灵活性。 几乎所有映射方案均属于这两个类别之一:基本映射和复杂映射。
基本映射
基本映射是最常见的可创建的映射类型。 在基本映射中,输入项与输出项具有一对一的关系。 一个输入项将映射到一个并且只能映射到一个输出项。 尽管可以使用基本映射实现许多类型的转换和转换,例如使用多个 functoid 和级联 functoid 来操作要复制的值,但基础方案仍然相对简单。 基本映射操作还包括将两个不同父记录(仅出现一次)中的字段映射到目标架构中单个父记录下的字段。
复杂映射
复杂映射涉及在架构树中记录或 Field 元素节点的单个实例中多次出现的记录或字段。 此类节点的 Max Occurs 属性设置为大于 1 (1) 的值,指示实例消息中可能存在多个对应的元素。 当 BizTalk 映射使用这种类型的变量计数映射 (也称为 循环) 时,可扩展样式表语言 (XSL) 样式表编译器必须能够确定要循环访问以生成所需输出的正确循环路径。
通常,可以将源架构的循环记录中的字段链接到目标架构的循环记录中的字段。 输入实例消息中的对应元素数将决定输出实例消息中创建的元素数。 假设示例源架构和目标架构中具有以下 XSD 片断:
源架构片断
<xs:element minOccurs="1" maxOccurs="5"
name="SrcLoopingRecord">
<xs:complexType>
<xs:sequence>
<xs:element name="" type="xs:string" />
<xs:element name="" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
目标架构片断
<xs:element minOccurs="0" maxOccurs="unbounded"
name="DstLoopingRecord">
<xs:complexType>
<xs:sequence>
<xs:element name="" type="xs:string" />
<xs:element name="" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
在这些片断中:
SrcLoopingRecord(输入实例消息中的 记录 节点)可以发生一到五次。 它还包含子 Field Element 节点 Field1 (字符串) ,Field2 (一个整数) ,该节点对其父级的每个实例发生一次。
DstLoopingRecord(输出实例消息中的 记录 节点)可以无界出现零 (0) 次或多次。 它还包含子 Field Element 节点 FieldA (字符串) ,FieldB (一个整数) ,该节点对其父级的每个实例发生一次。
假定将 Field1 映射到 FieldA、将 Field2 映射到 FieldB,并且输入实例消息中的以下片断已对这些映射进行了处理,这样将生成输出实例消息中的以下片断:
输入实例消息片断
<SrcLoopingRecord>
<Field1>A string</Field1>
<Field2>10</Field2>
</SrcLoopingRecord>
<SrcLoopingRecord>
<Field1>Another string</Field1>
<Field2>11</Field2>
</SrcLoopingRecord>
<SrcLoopingRecord>
<Field1>A ball of string</Field1>
<Field2>12</Field2>
</SrcLoopingRecord>
输出实例消息片断
<DstLoopingRecord>
<FieldA>A string</FieldA>
<FieldB>10</FieldB>
</DstLoopingRecord>
<DstLoopingRecord>
<FieldA>Another string</FieldA>
<FieldB>11</FieldB>
</DstLoopingRecord>
<DstLoopingRecord>
<FieldA>A ball of string</FieldA>
<FieldB>12</FieldB>
</DstLoopingRecord>
输入实例消息中 SrcLoopingRecord 元素的出现次数 (3) 决定了 DstLoopingRecord 元素在输出实例消息中的出现次数。
BizTalk 映射器不支持使用多个循环路径的映射类型。 此类型的映射涉及源架构的两个或多个循环记录中要映射到目标架构的单个循环记录中字段的字段。 这带来了一个问题,即没有有效的方法来确定输出实例消息中要生成的元素数。 多个循环路径将导致映射编译警告,该警告将指出目标节点具有多个源循环路径。 不过,这仅是警告而已,而第一个源循环路径中的迭代数将用于确定输出实例消息中生成的元素数量。 可以使用循环 functoid 显式控制 循环 行为。
Microsoft BizTalk Server引入了一种称为表驱动循环的新型循环。 如果输出实例消息需要基于输入实例消息中的数据并且该输入实例消息与一个或多个常数、来自源架构的链接或 functoid 结合在一起,则表驱动循环十分有用。 在这种情况下,该输出实例消息可以具有多个记录,这些记录基于与其他常数相结合的输入实例消息的单个记录中的数据,或基于来自输入实例消息中多个记录的数据。 有关使用表循环和表提取程序 functoid 的表驱动循环的详细信息,请参阅表循环和表提取程序 Functoid。