Compartir a través de


Functoid de bucle

Información general y ejemplo

El functoid Looping combina múltiples campos o registros del esquema de origen en un solo registro en el esquema de destino.

En la ilustración siguiente se muestra una función de bucle Looping utilizada en un mapa para combinar direcciones recopiladas de dos encuestas distintas en una única lista maestra de direcciones.

Nota:

Los functoids Looping y Value Mapping (Flattening) no deben usarse juntos. Si ambos se usan juntos, se obtiene un mapa compilado que asume que no existe ninguna dependencia de bucle de origen para los nodos de destino que se encuentran por debajo del functoid Bucle.

Mapa que ilustra el uso del functoid de bucle.

Los registros de bucle FoodSurvey y FlowerSurvey del esquema de origen se asignan al registro address de bucle del esquema de destino. Si un mensaje de instancia de entrada tiene tres registros FoodSurvey y dos registros FlowerSurvey , el functoid Loopingcombina estos para crear cinco registros de dirección en el mensaje de instancia de salida.

El código siguiente es un mensaje de instancia de entrada de ejemplo.

<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>  

Este mensaje de instancia de entrada genera el siguiente mensaje de instancia de salida cuando el mapa lo procesa en la ilustración anterior.

<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>  

Se han combinado las direcciones de mensajes FoodSurvey y FlowerSurvey . El mensaje combinado no indica el origen de cada dirección. Si desea realizar un seguimiento del origen, agregue un atributo Source al registro Address del esquema MasterAddress y asigne un valor constante. Para establecer este valor, conecte el campo FoodSurvey al nuevo campo Origen . En la línea del conector, modifique la propiedad Link Properties | Compilador | Source Links a "Copiar nombre". Repita este proceso para el campo FlowerSurvey . Al volver a procesar el mensaje de entrada anterior, se produce la siguiente salida:

<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>  

Relaciones con nodos

Las relaciones entre los nodos afectan al comportamiento del Looping functoid. Por ejemplo, vincular tanto un nodo hijo como su nodo padre en el esquema de origen al functoid Looping evita la creación del nodo de destino.

Los functoids también se ven afectados por las relaciones entre los nodos de origen. La conexión de un functoid a campos secundarios que no son del mismo nivel de los nodos de origen del functoid bucle puede producir resultados inesperados. Por ejemplo, usando el functoid String Concatenate para combinar el campo Nombre de FoodSurvey y el campo Dirección de FlowerSurvey en el campo Nombre de Dirección en MasterAddress, se generaría el siguiente mensaje de instancia de salida:

<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>  

Observe cómo falta el campo Nombre para los mensajes de origen foodSurvey , pero está presente para los mensajes de origen de FlowerSurvey .

Importante

La conexión de un functoid a campos secundarios de los nodos de origen del functoid de bucle puede producir resultados inesperados si los nodos de origen no son hermanos.

El functoid Looping es una construcción poderosa que puedes usar para crear bucles condicionales y mapear esquemas a catálogos. También hay algunos efectos de las trayectorias de functoides de bucle superpuestas que hay que tener en cuenta.

Pasos siguientes

Véase también

Referencia del functoid de bucle de tabla en la guía de la interfaz de usuario y la referencia del espacio de nombres de la API de desarrolladores