“循环”Functoid

概述和示例

循环 functoid 将源架构中的多个记录或字段整合为目标架构中的一个记录。

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

注释

循环值映射(平展)功能块不应一起使用。 如果两者一起使用,则会导致编译的映射假定目标节点没有源循环依赖项,这些节点位于 循环 functoid 之下。

循环功能体用法示意图。

源架构的 FoodSurveyFlowerSurvey 循环记录映射到目标架构的循环 地址 记录。 如果输入实例消息有三条 FoodSurvey 记录和两条 FlowerSurvey 记录,Looping functoid 会将这些记录合并在输出实例消息中创建五条 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 连接到 Looping 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 指南和开发人员 API 命名空间参考