Crie um iterador de transformação dinamicamente no Jitterbit Design Studio
Caso de uso
Um cenário de integração comum é onde os dados de origem são simples e o destino é hierárquico. Se mapeado um para um, a transformação usará como seu gerador o número de registros de entrada e o nó um para muitos não será preenchido corretamente. A transformação deve ser instruída a gerar várias instâncias do mesmo registro. Isso pode ser feito usando condições de transformação e as funções SetInstances()
e GetInstances()
.
Exemplos
CSV para arquivo simples
Esta operação cria dados de teste, lê a saída, passa por uma transformação e grava em um arquivo temporário. O script 'Read Output' pode ser usado para visualizar o arquivo.
Embora a transformação use o NetSuite WSDL, ela não executa uma ação Upsert e nenhum endpoint (ou credenciais) do NetSuite é necessário para executar a operação.
Os dados de exemplo a seguir têm informações de contato primárias e de cobrança (nomes e emails). Cada um tem seus próprios campos, mas o alvo usa linhas repetidas para informações de contato. Estas capturas de tela mostram o passo a passo pelos registros:
Observe que quando a operação é testada, o destino tem dois registros contactRoles da única origem.
Um iterador dinâmico é criado usando o SetInstances()
e GetInstances()
funções e passando uma matriz de valores.
Existem vários pré-requisitos:
- Condições (não scripts) são adicionadas ao destino da transformação para usar SetInstances() e GetInstances().
- A função SetInstance() deve estar dentro da condição do pai imediato de um nó filho.
- A criança deve ter uma cardinalidade de 0 para muitos ou 1 para muitos (E*).
Exemplo de script para nó pai (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.
Script de exemplo para condição de nó filho (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
Exemplo de script para campo de nó filho (email)
// Simply get the array value. This will get the email column in the array records
$instanceReference[1]
Exemplo de script para campo de nó filho (nome)
// Simply get the array value. This will get the name column in the array records
$instanceReference[0]
Arquivo simples para banco de dados
O segundo exemplo é semelhante ao primeiro, exceto que o alvo agora é um banco de dados:
Isso usa um banco de dados PostgreSQL local. As tabelas são descartadas e recriadas no primeiro script para facilitar a implantação. A transformação cria várias linhas para cada linha nos dados de origem:
Os scripts são muito semelhantes ao exemplo de texto (primeiro). SetInstances() está na condição do nó pai, e GetInstances() está na condição do nó filho. O nó pai tem que usar o nome do nó filho: SetInstances('ContactAddress', rolesArray)
Exibindo a tabela no PostgreSQL, vemos que a tabela ContactAddress mostra 400 linhas: a origem tem 200 linhas e 2 entradas são criadas para cada linha.