Crear un Iterador de Transformación Dinámicamente
Caso de Uso
Un escenario de integración común es donde los datos de origen son planos y el destino es jerárquico. Si se asigna uno a uno, la transformación utilizará como generador el número de registros entrantes y el nodo uno a muchos no se completará correctamente. Se debe indicar a la transformación que genere varias instancias a partir del mismo registro. Esto se puede lograr mediante el uso de condiciones de transformación y las funciones SetInstances()
y GetInstances()
.
Ejemplos
CSV a Archivo Plano
Esta operación crea datos de prueba, lee la salida, la pasa a través de una transformación y escribe en un archivo temporal. La secuencia de comandos 'Leer salida' se puede utilizar para ver el archivo.
Si bien la transformación utiliza el WSDL de NetSuite, no realiza una acción Upsert y no se requiere ningún extremo de NetSuite (o credenciales) para ejecutar la operación.
Los siguientes datos de muestra tienen información de contacto principal y de facturación (nombres y correos). Cada uno tiene sus propios campos, pero el destino usa filas repetidas para la información de contacto. Estas capturas de pantalla muestran paso a paso a través de los registros:
Tenga en cuenta que cuando se prueba la operación, el destino tiene dos registros contactRoles de la única fuente.
Un iterador dinámico se crea usando el SetInstances()
y GetInstances()
funciones y pasando una matriz de valores.
Hay varios requisitos previos:
- Se agregan condiciones (no secuencias de comandos) al destino de transformación para usar SetInstances() y GetInstances().
- La función SetInstance() debe estar dentro de la condición del padre inmediato de un nodo secundario.
- El hijo debe tener una cardinalidad de 0 a muchos o de 1 a muchos (E*).
Secuencia de comandos de ejemplo para el nodo principal (contactRolesList)
primaryContactArray = Array(); // Instantiate the array. The array will be re-instantiated for each record
Set(primaryContactArray, Primary_Contact, -1); // Append the primary contact and primary email to array
Set(primaryContactArray, Primary_Email, -1);
billingContactArray = Array(); // Similar to the above
Set(billingContactArray,Bill_To_Name,-1);
Set(billingContactArray,Billing_Email,-1);
// Since the array contains two rows, the transformation generator will build two output children nodes
rolesArray = Array();
Set(rolesArray, primaryContactArray,-1);
Set(rolesArray, billingContactArray,-1);
SetInstances('contactRoles', rolesArray); // Must include the child node name.
// This stores the instance array to be used with GetInstances
/*
Example data at this point (Primary Contact, Billing Contact):
{{Judith Hall,sbishop0@pinterest.com},{Scott Bishop,sbishop0@mediafire.com,}}
Since the array contains two rows, the transformation generator will build two output nodes
*/
true // Since this is a condition, returned value must be true or else the record is skipped.
Ejemplo de secuencia de comandos para la condición del nodo secundario (contactRoles)
// Assign a global variable to the contents of GetInstance
$instanceReference = GetInstance();
// As this is a condition node, it must return true or else the record is skipped.
true
Ejemplo de secuencia de comandos para el campo de nodo secundario (correo)
// Simply get the array value. This will get the email column in the array records
$instanceReference[1]
Ejemplo de secuencia de comandos para el campo de nodo secundario (nombre)
// Simply get the array value. This will get the name column in the array records
$instanceReference[0]
Archivo Plano a Base de Datos
El segundo ejemplo es similar al primero, excepto que el objetivo ahora es una base de datos:
Esto utiliza una base de datos PostgreSQL local. Las tablas se descartan y se vuelven a crear en el primer secuencia de comandos para facilitar la implementación. La transformación crea varias filas para cada fila en los datos de origen:
Los secuencias de comandos son muy similares al texto (primer) ejemplo. SetInstances() está en la condición del nodo principal y GetInstances() está en la condición del nodo secundario. El nodo padre tiene que usar el nombre del nodo hijo: SetInstances('ContactAddress', rolesArray)
Al mostrar la tabla en PostgreSQL, vemos que la tabla ContactAddress muestra 400 filas: la fuente tiene 200 filas y se crean 2 entradas para cada fila.