Ir para o conteúdo

Criar um Iterador de Transformação Dinamicamente

Caso de Uso

Um cenário de integração comum é onde os dados de origem são planos e o destino é hierárquico. Se mapeado um para um, a transformação usará como 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().

Nota

Este padrão de design usa Design Studio como um exemplo; você pode aplicar os mesmos conceitos em Cloud Studio usando etapas semelhantes.

Exemplos

CSV para Arquivo Simples

Essa 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 NetSuite (ou credenciais) é necessário para executar a operação.

anexo

Os dados de amostra a seguir têm informações de contato principal e de cobrança (nomes e e-mails). Cada um tem seus próprios campos, mas o destino usa linhas repetidas para informações de contato. Estas capturas de tela mostram a passagem pelos registros:

anexo

anexo

Observe que, quando a operação é testada, o destino possui 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 de transformação para usar SetInstances() e GetInstances().
  • A função SetInstance() deve estar dentro da condição do pai imediato de um nó filho.
  • O filho deve ter uma cardinalidade de 0 para muitos ou de 1 para muitos (E*).

Script de exemplo 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

Script de exemplo para campo de nó filho (e-mail)

// Simply get the array value. This will get the email column in the array records
$instanceReference[1]

Script de exemplo 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 destino agora é um banco de dados:

anexo

Isso usa um banco de dados PostgreSQL local. As tabelas são eliminadas e recriadas no primeiro script para facilitar a implantação. A transformação cria várias linhas para cada linha nos dados de origem:

anexo

Os scripts são muito semelhantes ao texto (primeiro) exemplo. SetInstances() está na condição do nó pai e GetInstances() está na condição do nó filho. O nó pai deve usar o nome do nó filho: SetInstances('ContactAddress', rolesArray)

Exibindo a tabela no PostgreSQL, vemos que a tabela ContactAddress mostra 400 linhas: a fonte tem 200 linhas e 2 entradas são criadas para cada linha.

anexo