“循环”Functoid

概述 & 示例

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

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

注意

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

Map illustrating the use of the looping functoid.

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

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

<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 连接到 循环 functoid 源节点的非同级子字段可能会导致意外结果。 例如,使用 String Concatenate functoid 将 FoodSurvey Name 字段和 FlowerSurvey Address 字段合并到 MasterAddress 中的“地址名称”字段将生成以下输出实例消息:

<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 连接到 循环 functoid 源节点的子字段可能会导致意外结果。

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

后续步骤

另请参阅

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