Ir para o conteúdo

Preencher e Usar um Dicionário

Introdução

Um dicionário é um tipo especial de variável global que constrói uma matriz de pares chave-valor. Um caso de uso frequente é como uma lista de referência cruzada, como quando uma fonte de dados fornece uma chave e um destino requer um valor baseado nessa chave.

Preencher um Dicionário

Uma prática recomendada é inicializar primeiro o dicionário usando o Dict função:

$dict.mylist = Dict()

Uma entrada de dicionário pode então ser criada usando o AddToDict função:

AddToDict(<dict name>,<key>, <value>)

Existem cenários em que queremos simplesmente capturar as chaves no dicionário e quaisquer valores são irrelevantes. Nesse caso, é aceitável usar:

AddToDict(<dict name>, <key>, true)

Outro cenário é onde o próprio valor é uma lista, portanto, queremos primeiro verificar se a entrada do dicionário existe e, em seguida, obter o valor e anexá-lo de volta ao dicionário. Isso também pode ser usado para somar valores. HasKey é usado neste caso:

my_value = <data from source>;
my_key = <data from source>;
If(HasKey($dict.mylist,my_key)  // Check if my_key is in the dictionary
, // If true
value = $dict.mylist[my_key]; // Get the original value
new_value = value + “|” + my_value; // Append the new value
AddToDict($dict.mylist,new_value); // Write the new appended value back to the dictionary
, // If false
AddToDict($dict.mylist,my_value);
);

Leia um Dicionário

Se for feita uma tentativa de ler um valor de um dicionário e a chave não existir, isso será tratado como uma falha. Uma prática recomendada é sempre usar primeiro HasKey para verificar se a chave existe. Veja a terceira linha no código acima para um exemplo. Como as entradas do dicionário estão sempre em ordem alfabética e são sempre únicas, usando AddToDict com uma chave existente substituirá a entrada.

Os dicionários são frequentemente lidos para gerar uma lista de dados que são lidos com um While laço:

arr = Array();
arr = KeyList($dict.mylist);
i = 0;
While(i < Length(arr),
value = $dict.mylist[i];
<some action>
i++);

Os dicionários também são usados em condições de transformação como um filtro. Suponha que um dicionário seja preenchido e uma transformação precise ler uma origem e processar apenas registros se o valor do dicionário estiver no registro. A condição da transformação de destino teria um script como este:

pass = true;
If(!HasKey($dict.mylist,<mapped value from source record>), pass = false);
pass;

O escopo dos dicionários, como todas as variáveis globais, é limitado à instância do thread da operação. Mas eles não são thread-safe. Tenha cuidado ao preencher um dicionário ao usar a opção assíncrona com RunOperation. O dicionário não reterá seus dados entre vários threads.