Saltar al contenido

Funciones de diccionario y arreglo en Jitterbit Studio

Introducción

Las funciones de diccionario y arreglo proporcionan estructuras de almacenamiento para información en scripts. Consulta las Funciones Relacionadas en el panel lateral para funciones adicionales que se pueden usar con arreglos.

Diferencia entre arreglos y diccionarios

Aunque son muy similares en muchos aspectos como método para almacenar información, los arreglos y los diccionarios difieren en estas características importantes:

  • Arreglos
    • Los elementos están ordenados
    • Los elementos se recuperan por posición
  • Diccionarios
    • Los elementos se almacenan sin tener en cuenta el orden y no tienen un orden intrínseco
    • Los elementos se recuperan por una clave

La sintaxis para establecer y recuperar un elemento es similar (ambos pueden usar la notación de corchetes) pero los arreglos no tienen claves asociadas con los elementos y deben almacenar todos los ítems secuencialmente, sin huecos. Los diccionarios pueden ser dispersos, con claves pobladas solo según sea necesario.

Cuál usar depende de la naturaleza de la información. Los diccionarios son adecuados para información que varía en cómo se recupera. Los arreglos son a menudo mejores para conjuntos ordenados.

Establecer y recuperar valores en arreglos y diccionarios

// Example of an array
$org.lookup.currency = Array();
$org.lookup.currency[1]="USD";
$org.lookup.currency[2]="EUR";

// currency will be "USD"
currency = $org.lookup.currency[1];

// Example of a dictionary
$common.dictionary.message = Dict();
AddToDict($common.dictionary.message, 'OP_START', 'Start');
AddToDict($common.dictionary.message, 'OP_END', 'End');
AddToDict($common.dictionary.message, 'API_PARMS', 'API Parameters');

// message will be "API Parameters"
message = $common.dictionary.message['API_PARMS'];

Encontrar valores en diccionarios y arreglos

Para diccionarios, la función HasKey permite probar si una clave está presente. Para un arreglo, puedes usar la función FindValue de manera similar pasando dos instancias del arreglo a la función:

arr = {1, 2, 3};
value = 1;
t = (FindValue(value, arr, arr) == value);
// t will be 1 (true)

value = 4;
t = (FindValue(value, arr, arr) == value);
// t will be 0 (false)

AddToDict

Declaración

bool AddToDict(dictionary dict, string key, type arg)

Sintaxis

AddToDict(<dict>, <key>, <arg>)

Parámetros requeridos

  • dict: Un diccionario existente
  • key: Clave que se usará en el diccionario
  • arg: Valor que se colocará en esa clave

Descripción

Agrega un valor a un diccionario para una clave específica.

La clave debe ser una cadena o tener una representación en cadena, con claves nulas no permitidas. Cualquier valor es permitido, incluso valores nulos.

Devuelve true si el valor fue agregado y la nueva clave se añadió al diccionario o false si la clave ya existía y el valor en esa clave fue actualizado en su lugar. Si el primer argumento no está definido o no es un diccionario, se inicializará a un diccionario vacío antes de que se agregue el valor.

Consulta también la función Dict.

Ejemplos

// Initialize a dictionary prior to use
d = Dict();


// Adds a value to a dictionary "d" if a key doesn't already exist
If(!HasKey(d, "key"), AddToDict(d, "key", "value"));

// To directly assign a key-value, use this syntax:
d["key"] = "value";

Advertencia

El uso de una clave nula causará un error y detendrá la ejecución de una operación.

Array

Declaración

array Array()

Sintaxis

Array()

Descripción

Crea un array vacío. Aunque los arrays no necesitan ser inicializados antes de su uso, este método puede ser utilizado para ser explícito o para reiniciar un array que ya existe. Los arrays son basados en cero, y los valores se recuperan utilizando índices.

Ejemplos

// Create an empty array and set values
arr = Array();
arr[0] = "value1";
arr[1] = "value2";

// Create an array and set the first value directly:
arr2[0] = "value";

// Arrays can be created with { } syntax:
arr3 = {};

Collection

Declaración

array Collection()

Sintaxis

Collection()

Descripción

Un alias para Array. Consulta la función Array.

CollectValues

Declaración

array CollectValues(dictionary dict, array names)

Sintaxis

CollectValues(<dict>, <names>)

Parámetros requeridos

  • dict: Un diccionario existente
  • names: Un arreglo de claves que se buscarán en el diccionario

Descripción

Devuelve un arreglo que contiene los valores correspondientes a los nombres en el arreglo de argumentos, devueltos en el mismo orden que las claves en el arreglo.

Ejemplos

// Retrieve a map from a source instance
map = GetSourceInstanceMap([Values$Value.]);
names = Array();
names[0] = "Attr1";
names[1] = "Attr2";
// Array containing the values of
// the attributes named in the names array
values = CollectValues(map, names);

Dict

Declaración

dictionary Dict()

Sintaxis

Dict()

Descripción

Crea un diccionario vacío. Un diccionario es una colección de pares nombre-valor donde el valor se recupera en función de un valor de clave de cadena. Se permite cualquier valor, incluso valores nulos. La clave debe ser una cadena o tener una representación de cadena. No se permiten claves nulas. Véase también la función AddToDict.

Advertencia

Los diccionarios deben ser inicializados antes de ser utilizados.

Advertencia

El uso de una clave nula causará un error y detendrá la ejecución de una operación.

Ejemplos

// Creating a dictionary "myDictionary"
myDictionary = Dict();

// Assigning a value ("text") to the key "myKey"
myDictionary["myKey"] = "text";
// Using the AddToDict function instead
AddToDict(myDictionary, "myKey", "text");

GetKeys

Declaración

array GetKeys(dictionary dict)

Sintaxis

GetKeys(<dict>)

Parámetros requeridos

  • dict: Un diccionario existente

Descripción

Devuelve un arreglo de las claves en un diccionario. El argumento debe ser un diccionario existente.

Ejemplos

// Retrieving the keys from the dictionary "myDictionary"
// using GetKeys and then looping through the array
// to retrieve all the values in the dictionary
// and writing them to the Operation Log
keys = GetKeys(myDictionary);
i=0;
While(i < Length(keys),
 WriteToOperationLog(myDictionary[keys[i]]);
 i++;
);

Vívelo en la práctica

GetSourceAttrNames

Declaración

array GetSourceAttrNames(node n)

Sintaxis

GetSourceAttrNames(<n>)

Parámetros requeridos

  • n: Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

Descripción

Devuelve un array que contiene los nombres de los atributos de un nodo, en el orden en que aparecen los atributos en el nodo.

Comparar con la función GetSourceInstanceMap que devuelve un mapa de las claves (los atributos) y valores para un nodo.

Para ingresar una ruta n en la función, arrastre y suelte la carpeta del nodo XML deseado desde la pestaña Objetos de origen del panel de componentes de script al script para insertar su ruta calificada en la ubicación de su cursor, o ingrese su ruta de referencia manualmente. Para más información, consulte las instrucciones sobre inserción de objetos de origen.

Precaución

Al usar agentes versión 11.52 y anteriores, esta función puede devolver errores FillDataElements() failed o DataElement::setCRData() failed si se utiliza contra nodos de estructura de datos plana.

Ejemplos

// Appends all the attributes together without having
// to explicitly reference their source data elements
map = GetSourceInstanceMap([Values$Value.]);
names = GetSourceAttrNames([Values$Value.]);
i = 0;
n = Length(names);
str = "";

While(i < n,
  str = str + map[names[i]];
  i++;
);

GetSourceElementNames

Declaración

array GetSourceElementNames(node n)

Sintaxis

GetSourceElementNames(<n>)

Parámetros requeridos

  • n: Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

Descripción

Devuelve un arreglo que contiene los nombres de los sub-elementos simples para un nodo en el orden en que aparecen los atributos en el nodo.

Compáralo con la función `GetSourceInstanceElementMap` que devuelve un mapa de un nodo.

Para ingresar una ruta `n` en la función, arrastra y suelta la carpeta del nodo XML deseado desde la pestaña **Objetos de origen** del panel de componentes de script al script para insertar su ruta calificada en la ubicación de tu cursor, o ingresa su ruta de referencia manualmente. Para más información, consulta las instrucciones sobre [inserción de objetos de origen](/es/integration-studio/design/scripts/jitterbit-script#jitterbitscript-source-objects).

!!! caution "Advertencia"
    Al usar agentes versión 11.52 y anteriores, esta función puede devolver errores `FillDataElements() failed` o `DataElement::setCRData() failed` si se utiliza contra nodos de [estructura de datos plana](/es/integration-studio/design/transformations/key-concepts/#flat-structures).

### Ejemplos {: #examples }
// Appends all the attributes together without having // to explicitly reference their source data elements map = GetSourceInstanceElementMap([Values\(Value.]); names = GetSourceElementNames([Values\)Value.]);

// The values as an array of values from the sub-elements values = CollectValues(map, names);

<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Volver al inicio]](#top)

</div>


## `GetSourceInstanceArray` {: #dictionaryandarrayfunctions-getsourceinstancearray }

### Declaración {: #declaration }
array GetSourceInstanceArray(node n)
### Sintaxis {: #syntax }
GetSourceInstanceArray()
#### Parámetros requeridos {: #required-parameters }

-   **`n`:** Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

### Descripción {: #description }

Devuelve un arreglo que contiene el valor del atributo de un nodo de elemento. El valor en el arreglo está etiquetado con el nombre del atributo y puede ser recuperado ya sea por su índice o por su nombre como en un elemento de datos de diccionario.

Como alternativa a esta función, consulta `GetSourceInstanceMap`.

Para ingresar una ruta `n` en la función, arrastra y suelta la carpeta del nodo XML deseado desde la pestaña **Objetos de origen** del panel de componentes de script al script para insertar su ruta calificada en la ubicación de tu cursor, o ingresa su ruta de referencia manualmente. Para más información, consulta las instrucciones sobre [inserción de objetos de origen](/es/integration-studio/design/scripts/jitterbit-script#jitterbitscript-source-objects).

!!! caution "Advertencia"
    Al usar agentes de la versión 11.52 y anteriores, esta función puede devolver errores `FillDataElements() failed` o `DataElement::setCRData() failed` si se utiliza contra nodos de [estructura de datos plana](/es/integration-studio/design/transformations/key-concepts/#flat-structures).

### Examples {: #examples }
arr = GetSourceInstanceArray([Values\(Value.]); // To retrieve the value of the "Attr1" attribute: // If "Attr1" is the first attribute name, you can use: v = arr[0]; // Or, you can use the name "Attr1": v = arr["Attr1"];
<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Back to top]](#top)

</div>


## `GetSourceInstanceElementArray` {: #dictionaryandarrayfunctions-getsourceinstanceelementarray }

### Declaration {: #declaration }
array GetSourceInstanceElementArray(node n)
### Syntax {: #syntax }
GetSourceInstanceElementArray(<n>)
#### Required parameters {: #required-parameters }

-   **`n`:** Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

### Description {: #description }

Devuelve un arreglo que contiene el valor del sub-elemento de un nodo de elemento. El valor en el arreglo está etiquetado con el nombre del sub-elemento y se puede recuperar ya sea por su índice o por su nombre, como en el elemento de datos del diccionario.

Como alternativa a esta función, consulte `GetSourceInstanceElementMap`.

Para ingresar una ruta `n` en la función, arrastre y suelte la carpeta del nodo XML deseado desde la pestaña **Objetos de origen** del panel de componentes de script al script para insertar su ruta calificada en la ubicación de su cursor, o ingrese su ruta de referencia manualmente. Para más información, consulte las instrucciones sobre [inserción de objetos de origen](/es/integration-studio/design/scripts/jitterbit-script#jitterbitscript-source-objects).

!!! caution "Advertencia"
    Al usar agentes de la versión 11.52 y anteriores, esta función puede devolver errores `FillDataElements() failed` o `DataElement::setCRData() failed` si se utiliza contra nodos de [estructura de datos plana](/es/integration-studio/design/transformations/key-concepts/#flat-structures).

### Examples {: #examples }
arr = GetSourceInstanceElementMap([Values\)
Value.]); // To retrieve the value of the "e1" sub-element: // If "el" is the first sub-element, you can use: v = arr[0]; // Or, you can use the name "e1": v = arr["e1"];
<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Back to top]](#top)

</div>


## `GetSourceInstanceMap` {: #dictionaryandarrayfunctions-getsourceinstancemap }

### Declaración {: #declaration }
dictionary GetSourceInstanceMap(node n)
### Sintaxis {: #syntax }
GetSourceInstanceMap()
#### Parámetros requeridos {: #required-parameters }

-   **`n`:** Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

### Descripción {: #description }

Devuelve un diccionario (mapa) que contiene el nombre del atributo y su valor de un nodo de elemento.

Como alternativa a esta función, consulte [`GetSourceInstanceArray`](#dictionaryandarrayfunctions-getsourceinstancearray).

Para ingresar una ruta `n` en la función, arrastre y suelte la carpeta del nodo XML deseado desde la pestaña **Objetos de origen** del panel de componentes de script al script para insertar su ruta calificada en la ubicación de su cursor, o ingrese su ruta de referencia manualmente. Para más información, consulte las instrucciones sobre [inserción de objetos de origen](/es/integration-studio/design/scripts/jitterbit-script#jitterbitscript-source-objects).

!!! caution "Advertencia"
    Al usar agentes de la versión 11.52 y anteriores, esta función puede devolver errores `FillDataElements() failed` o `DataElement::setCRData() failed` si se utiliza contra nodos de [estructura de datos plana](/es/integration-studio/design/transformations/key-concepts/#flat-structures).

### Ejemplos {: #examples }
map = GetSourceInstanceMap([Values\(Value.]); v = map["Attr1"]; // Devuelve el valor del atributo "Attr1"
<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Back to top]](#top)

</div>


## `GetSourceInstanceElementMap` {: #dictionaryandarrayfunctions-getsourceinstanceelementmap }

### Declaración {: #declaration }
dictionary GetSourceInstanceElementMap(node n)
### Sintaxis {: #syntax }
GetSourceInstanceElementMap(<n>)
#### Parámetros requeridos {: #required-parameters }

-   **`n`:** Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

### Descripción {: #description }

Devuelve un diccionario (mapa) que contiene el valor del sub-elemento de un nodo de elemento.

Como alternativa a esta función, consulta [`GetSourceInstanceElementArray`](#dictionaryandarrayfunctions-getsourceinstanceelementarray).

Para ingresar una ruta `n` en la función, arrastra y suelta la carpeta del nodo XML deseado desde la pestaña **Objetos de origen** del panel de componentes de script al script para insertar su ruta calificada en la ubicación de tu cursor, o ingresa su ruta de referencia manualmente. Para más información, consulta las instrucciones sobre [inserción de objetos de origen](/es/integration-studio/design/scripts/jitterbit-script#jitterbitscript-source-objects).

!!! caution "Advertencia"
    Al usar agentes versión 11.52 y anteriores, esta función puede devolver errores `FillDataElements() failed` o `DataElement::setCRData() failed` si se utiliza contra nodos de [estructura de datos plana](/es/integration-studio/design/transformations/key-concepts/#flat-structures).

### Ejemplos {: #examples }
map = GetSourceInstanceElementMap([Values\)
Value.]); v = map["e1"]; // Devuelve el valor del sub-elemento "e1"
<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Volver al inicio]](#top)

</div>


## `HasKey` {: #dictionaryandarrayfunctions-haskey }

### Declaración {: #declaration }
bool HasKey(dictionary dict, string key)
### Sintaxis {: #syntax }
HasKey(, )
#### Parámetros requeridos {: #required-parameters }

-   **`dict`:** Un diccionario existente
-   **`key`:** Una clave para verificar en el diccionario

### Descripción {: #description }

Verifica si un diccionario contiene una clave especificada. Devuelve `false` si el primer argumento no es un diccionario o si la clave no fue encontrada. Como función equivalente que funciona para arreglos, consulta los ejemplos de la función `FindValue`.

### Ejemplos {: #examples }
// Update the value in a dictionary "myDictionary" // only if the key already exists If(HasKey(myDictionary, "key"), myDictionary["key"] = "value");
<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Volver al inicio]](#top)

</div>


## `Map` {: #dictionaryandarrayfunctions-map }

### Declaración {: #declaration }
dictionary Map()
### Sintaxis {: #syntax }
Map()
### Descripción {: #description }

Un alias para `Dict`. Consulta la función `Dict`.

<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Volver al inicio]](#top)

</div>


## `MapCache` {: #dictionaryandarrayfunctions-mapcache }

### Declaración {: #declaration }
string MapCache(dictionary dict, string key, string value)
### Sintaxis {: #syntax }
MapCache(, , )
#### Parámetros requeridos {: #required-parameters }

-   **`dict`:** Un diccionario existente
-   **`key`:** Una clave para verificar en el diccionario
-   **`value`:** Un valor que se utilizará (y almacenará) si la clave no está en el diccionario

### Descripción {: #description }

Esta función almacena en caché un par clave/valor en un diccionario. Si la clave ya existe en el diccionario, se devolverá el valor correspondiente; de lo contrario, se evaluará el tercer argumento y ese valor se almacenará en el diccionario para la clave.

### Ejemplos {: #examples }
// Creating a dictionary "myDictionary" // and caching values in it, // if they don't already exist myDictionary = Dict(); i=0; a=MapCache(myDictionary, "key1", ++i); b=MapCache(myDictionary, "key2", ++i); c=MapCache(myDictionary, "key1", ++i); result = i; // The result will be // result=2, a=1, b=2, and c=1 // as c's value will be retrieved // rather than incremented
<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Volver al inicio]](#top)

</div>


## `ReduceDimension` {: #dictionaryandarrayfunctions-reducedimension }

### Declaración {: #declaration }
array ReduceDimension(array arrayMultiD)
### Sintaxis {: #syntax }
ReduceDimension()
#### Parámetros requeridos {: #required-parameters }

-   **`arrayMultiD`:** Un arreglo multidimensional

### Descripción {: #description }

Dado un arreglo multidimensional con _n_ dimensiones, la función devuelve un arreglo con _n-1_ dimensiones. La dimensión más baja del arreglo de entrada desaparecerá y sus miembros se recopilarán en la siguiente dimensión superior.

### Ejemplos {: #examples }

prices = ReduceDimension(orders\(company.order#.detail#.price); // If orders\)company.order#.detail#.price // is a 2-dimensional source data element array, // the function will return a one-dimensional array

a = {{"0_0", "0_1"}, {"1_0", "1_1"}}; result = ReduceDimension(a); // result will be {0_0, 0_1, 1_0, 1_1}

<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Volver al inicio]](#top)

</div>


## `RemoveKey` {: #dictionaryandarrayfunctions-removekey }

### Declaración {: #declaration }
bool RemoveKey(dictionary dict, string key)
### Sintaxis {: #syntax }
RemoveKey(, )
#### Parámetros requeridos {: #required-parameters }

-   **`dict`:** Un diccionario existente
-   **`key`:** Una clave para verificar en el diccionario

### Descripción {: #description }

Elimina un par clave-valor con una clave específica de un diccionario. La clave debe ser una cadena o tener una representación de cadena, y los valores nulos no están permitidos. Devuelve `true` si el par clave-valor fue eliminado y `false` si la clave no existía.

### Ejemplos {: #examples }
// Removes a key-value pair if it // exists in dictionary "myDictionary" If(HasKey(myDictionary, "key"), RemoveKey(myDictionary, "key"));
<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Volver al inicio]](#top)

</div>


## `SortArray` {: #dictionaryandarrayfunctions-sortarray }

### Declaración {: #declaration }
void SortArray(array arrayToSort[, bool isAscending])

void SortArray(array arrayToSort, int index[, bool isAscending])

### Sintaxis {: #syntax }
SortArray([, ])

SortArray(, [, ])

#### Parámetros requeridos {: #required-parameters }

-   **`arrayToSort`:** Un arreglo que se va a ordenar
-   **`index`:** Para arreglos multidimensionales, índice del arreglo que se va a ordenar (por defecto 0)

#### Parámetros opcionales {: #optional-parameters }

-   **`isAscending`:** Si el arreglo se va a ordenar en orden ascendente (el valor por defecto)

### Descripción {: #description }

Ordena un arreglo por referencia. El valor de retorno es indefinido y debe ser ignorado.

En la primera forma, el segundo parámetro (opcional) especifica el orden de ordenación.

En la segunda forma, para arreglos multidimensionales, la función ordena el arreglo de acuerdo con un índice basado en cero especificado en el segundo parámetro (requerido). En la segunda forma, el tercer argumento (opcional) especifica el orden de ordenación.

El orden de ordenación por defecto es ascendente en ambas formas.

Después de que la función regrese, el arreglo estará ordenado en su lugar. Si se especifica, se ordenará de acuerdo con el índice.

La clasificación múltiple del mismo arreglo es posible aplicando la función SortArray repetidamente.

Para solucionar problemas, consulte SortArray ordena nombres de archivos lexicográficamente, no cronológicamente en la guía de solución de problemas de operaciones.

Ejemplos

// Sorting a one-dimensional array
arr1 = {"Carol", "Bob", "Alice"};
SortArray(arr1);
// arr1 is now {Alice, Bob, Carol}

// Sorting a two-dimensional array
arr2 = {{"a", 20, 1}, {"bc", 7, 12}, {"x", 20, 13}, {"d", 5, 4}};

// Sort arr2, order by third column, descending
SortArray(arr2, 2, false);
// arr2 is now {{x, 20, 13}, {bc, 7, 12}, {d, 5, 4}, {a, 20, 1}}

// Sort arr2, order by second column, ascending
SortArray(arr2, 1);
// arr2 is now {{d, 5, 4}, {bc, 7, 12}, {x, 20, 13}, {a, 20, 1}