“循环”Functoid

概述 & 示例

循环 functoid 将源架构中的多个记录或字段合并到目标架构中的单个记录中。

下图显示了映射中使用的 循环functoid,用于将从两个不同调查收集的地址合并到单个主地址列表中。

注意

“循环”与“值映射(平展)”functoid 不应一起使用。 如果二者一起使用,则会导致出现已编译的映射,该映射假定“循环”functoid 下的目标节点没有源循环依赖项

演示循环 functoid 用法的地图。

源架构的 FoodSurveyFlowerSurvey 循环记录映射到目标架构的循环 地址 记录。 如果输入实例消息有三条 FoodSurvey 记录和两条 FlowerSurvey 记录, 则 Loopingfunctoid 将结合这些记录,在输出实例消息中创建五条 Address 记录。

以下代码是示例输入实例消息。

<ns0:Surveys xmlns:ns0="http://LoopingFunctoid.Surveys">  
    <FoodSurvey Name="Karin Zimprich" Address="345 N 63rd St" City="Boston" State="MA" PostalCode="07485" />  
    <FoodSurvey Name="Wendy Wheeler" Address="7890 Broadway" City="Columbus" State="OH" PostalCode="46290" />  
    <FoodSurvey Name="Florian Voss" Address="1234 Main St" City="Denver" State="CO" PostalCode="97402" />  
    <FlowerSurvey Name="Kelly Focht" Address="456 1st Ave" City="Miami" State="FL" PostalCode="81406" />  
    <FlowerSurvey Name="Jim Kim" Address="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103" />  
</ns0:Surveys>  

此输入实例消息在由上图中的映射处理时生成以下输出实例消息。

<ns0:MasterAddresses xmlns:ns0="http://LoopingFunctoid.MasterAddresses">  
    <Address Name="Karin Zimprich" Street="345 N 63rd St" City="Boston" State="MA" PostalCode="07458"/>  
    <Address Name="Wendy Wheeler" Street="7890 Broadway" City="Columbus" State="OH" PostalCode="46290"/>  
    <Address Name="Florian Voss" Street="1234 Main St" City="Denver" State="CO" PostalCode="97402"/>  
    <Address Name="Kelly Focht" Street="456 1st Ave" City="Miami" State="FL" PostalCode="81406"/>  
    <Address Name="Jim Kim" Street="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103"/>  
</ns0:MasterAddresses>  

FoodSurveyFlowerSurvey 消息地址已合并。 合并的消息不指示每个地址的源。 如果要跟踪源,请将 Source 属性添加到 MasterAddress 架构的 Address 记录,并映射常量值。 若要设置此值,请将 FoodSurvey 字段连接到新的 “源” 字段。 在连接器行上,将 “链接属性 | 编译器 | 源链接 ”属性修改为“复制名称”。 对 FlowerSurvey 字段重复此过程。 重新处理上述输入消息会生成以下输出:

<ns0:MasterAddresses xmlns:ns0="http://LoopingFunctoid.MasterAddresses">  
    <Address Name="Karin Zimprich" Street="345 N 63rd St" City="Boston" State="MA" PostalCode="07458" Source="FoodSurvey"/>  
    <Address Name="Wendy Wheeler" Street="7890 Broadway" City="Columbus" State="OH" PostalCode="46290" Source="FoodSurvey"/>  
    <Address Name="Florian Voss" Street="1234 Main St" City="Denver" State="CO" PostalCode="97402" Source="FoodSurvey"/>  
    <Address Name="Kelly Focht" Street="456 1st Ave" City="Miami" State="FL" PostalCode="81406" Source="FlowerSurvey"/>  
    <Address Name="Jim Kim" Street="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103" Source="FlowerSurvey"/>  
</ns0:MasterAddresses>  

与节点的关系

节点之间的关系会影响 循环 functoid 的行为。 例如,将源架构中的子节点及其父节点链接到 循环 functoid 会阻止创建目标节点。

Functoid 还受源节点之间的关系的影响。 将 functoid 连接到 Looping functoid 的源节点的非同级子字段可能会产生意外结果。 例如,使用 String Concatenate functoid 将 FoodSurvey Name 字段和 FlowerSurvey Address 字段合并到 MasterAddress 中的 Address Name 字段将生成以下输出实例消息:

<ns0:MasterAddresses xmlns:ns0="http://LoopingFunctoid.MasterAddresses">  
    <Address Street="345 N 63rd St" City="Boston" State="MA" PostalCode="07458"/>  
    <Address Street="7890 Broadway" City="Columbus" State="OH" PostalCode="46290"/>  
    <Address Street="1234 Main St" City="Denver" State="CO" PostalCode="97402"/>  
    <Address Name="Kelly Focht" Street="456 1st Ave" City="Miami" State="FL" PostalCode="81406"/>  
    <Address Name="Jim Kim" Street="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103"/>  
</ns0:MasterAddresses>  

请注意,FoodSurvey 源消息缺少“名称”字段,但对于 FlowerSurvey 源消息却存在。

重要

如果源节点不是同级节点,将 functoid 连接到 Looping functoid 的源节点的子字段可能会产生意外结果。

循环 functoid 是一种功能强大的构造,可用于创建条件循环并将架构映射到目录。 还需要考虑重叠 循环 functoid 路径的一些影响。

后续步骤

另请参阅

UI 指南中的表循环 Functoid 参考和开发人员 API 命名空间参考