Ir para o conteúdo

Linguagem de Jitterbit Script

A linguagem de script Jitterbit pode ser usada em todos os tipos de scripts dentro do Jitterbit, incluindo scripts criados como itens de projeto em operações, bem como scripts em mapeamentos de transformação. Consulte Criar um Script para obter instruções sobre como criar um script e usar o construtor de script no Jitterbit.

Sintaxe

Cada script Jitterbit é sempre cercado por um conjunto de <trans>...</trans> Tag. Isso se aplica a scripts criados como itens de projeto, bem como a scripts do "Formula Builder" criados em mapeamentos de transformação.

Nota

O resultado retornado em um script ou fórmula Jitterbit será o valor retornado da última instrução do script antes do fechamento </trans> marcação.

Dentro do <trans>...</trans> tags, "//" marca o início de um comentário e afeta o texto até o final dessa linha. Os comentários não farão parte do script executado ou do resultado transformado.

Por exemplo, um comentário em uma única linha pode ter a seguinte aparência:

Single-Line Comment in Jitterbit Script
<trans>
// This is a comment
DbLookup(...)
</trans>

Você também pode usar um comentário em estilo de bloco:

Multi-Line Comment in Jitterbit Script
<trans>
/* This is a multi-line comment
This line is also a comment
This is the final line of the comment */
DbLookup(...)
</trans>

Além disso, o Jitterbit oferece suporte a expressões regulares como meio de especificar e reconhecer sequências de texto, incluindo caracteres, palavras ou padrões de caracteres específicos. Jitterbit suporta a sintaxe de expressão regular da linguagem de programação Perl 5.

<trans>
RegExMatch(<input>,<expression>,...)
</trans>

Para obter mais informações, consulte http://www.boost.org/doc/libs/1_49_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html.

Funções e Elementos de Dados

Um script Jitterbit consiste em funções integradas, elementos de dados e lógica a serem executados, separados por caracteres de ponto e vírgula (;). A linguagem de script Jitterbit possui poucas estruturas de controle, mas possui muitas funções projetadas especificamente para manipulação de dados.

Funções

Todas as funções integradas do Jitterbit que estão disponíveis na aba Funções ao criar um script estão disponíveis para referência em Formula Builder.

Elementos de Dados Globais

Você pode acessar todos os elementos de dados globais na aba Elementos de dados ao criar um script. Isso inclui variáveis globais, variáveis de projeto e variáveis Jitterbit. Consulte Variáveis Globais e Variáveis do Projeto Para maiores informações. Variáveis Jitterbit são documentadas individualmente em Variáveis Jitterbit.

Os elementos de dados globais são acessados digitando um sinal $ antes do nome do elemento ou usando o Set e Get funções.

Os nomes das variáveis podem ser compostos de letras (a-z, A-Z), números (0-9), ponto final e caracteres de sublinhado. Outros caracteres não são permitidos. (Observe que no caso de variáveis locais, o caractere de ponto final não é permitido.)

Este exemplo faz referência a um elemento de dados global usando $ para criar um dicionário global:

<trans>
$org.lookup.currency=Dict();
$org.lookup.currency[1]="USD";
$org.lookup.currency[2]="EUR";
</trans>

Aqui, um elemento de dados global para outro elemento de dados global usando o Set e Get funções:

<trans>
Set("op2", Get("op"));
</trans>

Observe que para determinadas variáveis Jitterbit, como elas descrevem elementos de dados que incluem um hífen, um caractere não permitido para nomes de variáveis, você deve referenciá-las usando o método Set ou Get funções:

<trans>
Get("jitterbit.source.http.response.header.Content-Type");
</trans>

Elementos de Dados de Origem

Se estiver usando um script criado na transformação, você também terá acesso aos elementos de dados de origem. Os elementos de dados de origem são usados para fazer referência a dados de origem e são referenciados por seus caminhos na árvore de origem. Mais informações são fornecidas em Criar um Script.

Este exemplo atribui um elemento de dados de origem a um elemento de dados global:

<trans>
$org.calculate.operand1=root$transaction.request$body$Calculate$input.Operand1$;
</trans>

Elementos de Dados Locais

Você também pode usar elementos de dados locais, também conhecidos como variáveis locais, que você cria e usa no mesmo script. Consulte Variáveis Locais Para maiores informações. As características dos elementos de dados locais são as seguintes:

  • Um elemento de dados local é definido e usado somente dentro da expressão; uma vez atribuído seu valor na expressão, o elemento de dados local é excluído. Portanto, o conflito entre o valor de um elemento de dados local na presente expressão e os valores de outras expressões não é uma preocupação.
  • O elemento de dados local não pode ser definido ou recuperado pelo set()/get() funções.
  • RunScript() pode passar argumentos para o script, por exemplo RunScript(SCRIPT_ID, 5, "abc",...). Os valores no script podem ser atribuídos a variáveis locais predefinidas _1, _2... Neste exemplo _1 representa o valor inteiro de 5, enquanto _2 representa o valor da string "abc". A variável local deve ser definida antes de poder ser referenciada, exceto no caso dos argumentos de entrada _1, _2,... descritos acima.
  • O ArgumentList() A função está disponível para redefinição de uma lista de elementos de dados locais como argumentos de entrada.

Tipos de Dados

Todos os elementos de dados de origem e elementos de dados globais que não são nulos possuem um tipo associado a eles. Jitterbit suporta os seguintes tipos de dados: Inteiro, Longo, Flutuante, Duplo, Data, String, Booleano, Timespan, Bit, Binário e Matriz. Os tipos de elementos de dados podem ser alterados usando as funções no arquivo Conversion categoria.

Matrizes

Uma matriz é uma coleção de elementos de dados. Cada membro da coleção pode ser de qualquer tipo compatível, incluindo matrizes. Os membros de um array podem ser acessados usando o Get() e Set() métodos ou usando o [] array sintaxe. As matrizes são indexadas em zero e os índices são numéricos, sequenciais e não podem ser ignorados.

Você também pode criar matrizes de variáveis globais. Uma variável global de matriz é uma matriz de outras variáveis globais que, por sua vez, podem ser matrizes.

Definir uma Matriz

Você pode definir valores em uma matriz usando o Set() método com esta sintaxe:

type Set(string name, type value [, int index1, int index2, ...])

Isso define o valor da variável global com o nome fornecido como valor e retorna o valor. Se o primeiro argumento for uma matriz ou o nome de um elemento de dados da matriz, você poderá definir o valor de um elemento da matriz especificando seu índice (ou índices para matrizes multidimensionais) como o terceiro argumento.

Nem todos os itens de uma matriz precisam ser do mesmo tipo. Por exemplo, você pode criar uma matriz que contenha uma data, um número inteiro e uma string. Você pode até criar arrays dentro de outros arrays.

Este exemplo cria um array com três elementos de tipos diferentes onde cada entrada representa a data e hora atuais:

<trans>
$right_now = Now();
Set($now, $right_now, 0);
Set($now, Long($right_now), 1);
Set($now, String($right_now), 2);
</trans>

Como os arrays são indexados em zero, o primeiro elemento está no índice 0 e o último elemento está no índice (tamanho -1). Para anexar dados a um array, passe um valor de índice negativo ou o tamanho do array (Length($arr)). Definir um elemento com um índice maior que o tamanho da matriz resulta em um erro de índice fora do intervalo. A configuração de elementos de dados não array também pode ser feita usando o $de_name sintaxe.

Aqui estão alguns exemplos de configuração de valores em uma matriz:

// Set the n:th entry in an array to the string "value"
Set($arr, "value", n-1);

// Another way to set the n:th entry an array
Set($arr, "value", Length($arr));

// Sets the value to a new element at the end of the array
Set($arr, "value", -1);

// Set the n:th entry of the m:th array
Set($record_set, "value", m-1, n-1);

Nota

Para sintaxe adicional que pode ser usada para definir valores em um array, consulte Dicionário e Funções de Array.

Acesse um Array

Você pode acessar os itens de um array usando o Get() método:

type Get(string name[, int index1, int index2, ...])

Isso retorna o valor da variável global com o nome fornecido. Se o primeiro argumento for uma matriz ou o nome de um elemento de dados da matriz, você poderá obter um elemento específico especificando seu índice (ou índices para uma matriz multidimensional, como um conjunto de registros) como o segundo argumento.

As matrizes são indexadas a zero. Para acessar o n:th elemento de um array chamado "arr", usar Get("arr", n-1). Para arrays multidimensionais você precisa especificar todos os índices. Para acessar o n:th coluna do m:th linha em uma matriz chamada ResultSet você usaria Get("ResultSet", m-1, n-1). A tentativa de obter um elemento além do final do array resultará em um erro de array fora do intervalo.

Estes são exemplos de recuperação de valores de um array:

// Return the third array element
Get($arr, 2);

// Another way to return the third array element
Get("arr", 2);

// Get the n:th element of the m:th array in arr
Get($arr, m-1, n-1);

Este exemplo mostra como você pode primeiro criar um script que constrói e retorna um array. O segundo bloco mostra a execução desse script e a atribuição do valor retornado a uma variável.

Build Array
<trans>
// Script to build and return an array
a = Array();
a[Length(a)] = "A";
a[Length(a)] = "B";
a[Length(a)] = "C";
a;
</trans>
Call Script to Get Array
<trans>
// Call the script to retrieve the array
$Arr = RunScript("<TAG>Scripts/Build Array</TAG>";
</trans>

Certos Construtor de Fórmulas funções retornam matrizes. Por exemplo, SelectNodesFromXMLAny()retorna os resultados de uma consultar XPath como uma matriz. O DbExecute() A função retorna um conjunto de registros como uma matriz bidimensional: primeiro as linhas e depois as colunas. Este exemplo retorna os dados selecionados como uma matriz de matrizes (representando as linhas e colunas selecionadas):

<trans>
$resultSet = DbExecute("Project Name/Sources/Database Name", "select Result from SimpleCalculatorResults");
$firstRow = Get($resultSet, 0);
$thirdColumnOfSecondRow = $resultSet[2][3];
$secondColumnOfThirdRow = Get($resultSet, 3, 2);
</trans>

Nota

Para sintaxe adicional que pode ser usada para acessar valores em um array, consulte Funções de dicionário e array.

Dicionários

No Jitterbit, um dicionário é um tipo especial de array de variáveis globais que contém pares de valores-chave. As etapas e funções são:

  1. Inicialize o dicionário usando o Dict função:

    $d = Dict();
    
  2. Carregue os dados com uma chave e um valor:

    $d['4011'] = 'Banana';
    $d['4063'] = 'Tomato';
    
  3. Verifique se a chave já existe no dicionário usando o HasKey função:

    HasKey($d,'4011'); // Returns true
    

    No exemplo, já carregamos a chave '4011' então HasKey retornaria true.

    HasKey($d,'4089'); // Returns false
    

    Se a chave ainda não estiver carregada, por exemplo '4089', o HasKey retornaria false.

  4. Procure o valor no dicionário passando a chave e recuperando o valor:

    $d['4011']; // Returns 'Banana'
    

    Neste exemplo, o valor retornado seria Banana.

Com dicionários, tenha em mente estas características:

  • O escopo dos dicionários é limitado ao workflow. Por exemplo, se uma operação carrega um dicionário com 10.000 registros, apenas as operações vinculadas usando os caminhos Em caso de sucesso ou Em caso de falha — ou com o método RunOperation() função - terá acesso a esse dicionário. No entanto, se uma operação usar fragmentação de dados e threading e tiver uma transformação que preencha um dicionário, esse dicionário será inconsistente. Isso ocorre porque o Jitterbit não pega valores atribuídos a variáveis por vários threads de operação e os concatena em um único conjunto de valores. Isto é verdade para todas as variáveis e matrizes globais. Para evitar esse problema, use os valores padrão de fragmentação de dados/threading ao criar uma operação que preencha dicionários.
  • Os dicionários, por utilizarem uma busca binária, são muito rápidos em encontrar chaves e retornar valores. Uma chave geralmente pode ser encontrada em cinco a seis tentativas. Em contraste, compare essa pesquisa com o trabalho necessário para percorrer uma matriz de 10.000 registros para encontrar uma chave específica.
  • Os dicionários são escritos de forma que não afetem materialmente a memória disponível do servidor para processamento.

Operadores

Este é um resumo dos operadores suportados pelo script Jitterbit. O script Jitterbit tentará converter os argumentos para ativar a operação. Se isso não for possível, um erro será relatado.

Aritmética

Operador Descrição
+ Adiciona dois números ou concatena duas strings. Se uma string for adicionada a qualquer outra coisa, ambos os argumentos serão convertidos em strings. Se ambos os argumentos forem números, o resultado será do tipo double.
++ Aumenta o valor em 1. Exemplo: $count++; se prefixado, a atribuição precede o incremento.
+= Concatena uma string ou adiciona números à variável de destino. Exemplo: $count+=2 é o mesmo que $count=$count+2.
- Subtrai dois números. O resultado é do tipo double.
-- Diminui um valor em 1. Exemplo: $count--; se prefixado, a atribuição precede o decremento.
-= Subtrai números da variável de destino. Exemplo: $count-=2 é o mesmo que $count=$count-2.
/ Divide dois números. O resultado é do tipo double.
* Multiplica dois números. O resultado é do tipo double.
^ Eleva o primeiro argumento à potência do segundo argumento. Se ambos os argumentos forem inteiros, o resultado será um inteiro.

Lógico

Operador Descrição
& Operador lógico AND. O resultado é do tipo booleano. && também pode ser usado. Este é sempre um operador de curto-circuito, o que significa que se o argumento da esquerda for avaliado como falso, o argumento da direita não será avaliado.
| Operador lógico OR. O resultado é do tipo booleano. || também pode ser usado. Este é sempre um operador de curto-circuito, o que significa que se o argumento da esquerda for avaliado como verdadeiro, o argumento da direita não será avaliado.

Comparação

Use os seguintes operadores para comparar os valores de dois argumentos do mesmo tipo de dados:

Operador Descrição
= Atribui a uma variável. O argumento da direita é atribuído ao argumento da esquerda.
== Operador de equivalência. Retorna verdadeiro se os argumentos forem iguais. Retorna falso se eles não forem iguais.
!= Operador não equivalente. Retorna verdadeiro se os argumentos não forem iguais. Retorna falso se forem iguais.
<
>
<=
>=
Operadores de comparação. Retorna verdadeiro ou falso.

Nota

Não há suporte para comparação de argumentos de diferentes tipos de dados.

Negação

Operador Descrição
!

Operador de negação. Converte um valor verdadeiro em falso e vice-versa. Exemplo:

!IsNull($org.workorder.id)

Variedade

Operador Descrição
{ }

Usado para construir um array. Exemplos:

\(a={"London","Paris","New York"};<br/>\)b={{"John",25},
{"Steve",32},
{"Daniel",26}
};
$c={"\"quoted\"", '"quoted"'};

Sequências de Fuga

O Jitterbit reconhece estas sequências de escape quando usadas em strings literais:

Sequência Definição
\t Guia
\r Retorno de transporte
\n Nova linha

Strings literais devem ser colocadas entre aspas duplas (") ou aspas simples (').

A citação ao redor deve ser escapada usando uma barra invertida se for usada dentro da string. As barras invertidas podem precisar de escape se forem usadas com qualquer um dos caracteres da sequência de escape. Por exemplo:

$str = "String with line break.\nThat's the last line.";

$str = 'Tony "The Gun" Marcello';

$str = "Tony \"The Gun\" Marcello";

$path = "C:\\tacos"

Estruturas de Controle

A linguagem Jitterbit Script não inclui instruções de controle como if ou while rotações. Em vez disso, você pode usar funções Jitterbit para obter a mesma funcionalidade. Veja o Case, If, e While funções em Funções Lógicas. O Eval função em Funções Gerais pode ser usado como uma instrução "try-catch".

Nota

  • O número máximo de iterações de loop permitidas no Harmony é 50.000.
  • O número máximo de iterações de loop na Jitterbit Script Language é para cada loop individual. Para aumentar o número permitido de iterações por loop em um script Jitterbit Script Language, consulte jitterbit.scripting.while.max_iterations em Script de variáveis Jitterbit.
  • O número máximo de iterações de loop em JavaScript é por script (agregado de todos os loops dentro de um script). Para aumentar o número máximo de iterações de loop em JavaScript, consulte Java Script Loop em JavaScript.