Ir para o conteúdo

JavaScript no Jitterbit Design Studio

JavaScript está disponível a partir da versão 8.24.2 para scripts criados como parte de uma operação (em outras palavras, como um item de projeto). Neste momento, JavaScript não está disponível para uso dentro de mapeamentos de transformação ou no script pad. Veja Criando um script para instruções sobre como criar um novo JavaScript e usar o construtor de scripts no Jitterbit.

Importante

Para um desempenho aprimorado, recomendamos usar JavaScript apenas quando um Script Jitterbit equivalente não estiver disponível.

Suporte a JavaScript no Jitterbit

O mecanismo JavaScript do Jitterbit suporta o padrão ECMA-262 v5.1 conforme especificado pela ECMA International. Esta versão do JavaScript tem suporte nativo para JSON e a definição e uso de funções dentro de scripts. O JavaScript do Jitterbit está em conformidade com a manipulação e comportamento padrão de objetos JavaScript.

Aviso

Embora o Jitterbit suporte JavaScript com base no padrão, nem todas as funcionalidades do JavaScript estão disponíveis. O Jitterbit não suporta estes recursos do JavaScript:

  • APIs da Document Object Model (DOM) da web
  • Funções e objetos internos do Mozilla
  • Certos tipos de JavaScript, como Set e Map
  • Acesso a objetos Java

Tipos de dados simples, arrays e objetos JSON são totalmente suportados. Mapas do Jitterbit também são suportados dentro do JavaScript. O JavaScript trata os mapas do Jitterbit como objetos JSON, e os Scripts Jitterbit tratam objetos JSON como mapas do Jitterbit. As propriedades JSON são acessadas através das chaves do mapa.

Por exemplo, dado este objeto JSON definido em JavaScript:

var $myObj = {
 "name":"John",
 "age":30,
 "cars": {
   "car1":"Ford",
   "car2":"BMW",
   "car3":"Fiat"
   }
 };

Em um Script Jitterbit, o objeto seria acessado por um mapa. Acesse a propriedade "car3" assim:

$mycar = $myObj["cars"]["car3"];

Criar um novo JavaScript

Dentro do seu projeto no Jitterbit Studio, existem várias maneiras de criar um novo JavaScript como um item do projeto:

  • No painel à esquerda, clique com o botão direito na seção Scripts e selecione Novo JavaScript.

  • Dentro de uma operação existente, clique com o botão direito em qualquer ponto de inserção attachment e escolha Inserir > Script. Ou clique com o botão direito em uma fonte ou destino e escolha Inserir Antes Disso > Script ou Inserir Depois Disso > Script. Um ícone de script aparecerá dentro do gráfico da operação. Em seguida, faça uma das seguintes ações:

    • Clique com o botão direito no ícone do script e escolha Criar Novo JavaScript.

    • Clique duas vezes no ícone do script e clique no botão Criar Novo JavaScript.

Usar o construtor de scripts

Depois de criar um novo JavaScript no Jitterbit, você pode inserir seu JavaScript diretamente na área de script.

Nota

Ao contrário de um Script do Jitterbit, que requer que o script esteja envolto em tags <trans> ... </trans>, não são necessárias tags para scripts em JavaScript. Em vez disso, basta inserir seu JavaScript diretamente na área de script.

attachment

Funções

As funções disponíveis para uso em um JavaScript estão disponíveis em quatro categorias.

attachment

Jitterbit

Esta categoria contém uma lista de funções específicas do Jitterbit. Isso inclui um número limitado de funções padrão do Jitterbit, bem como várias funções de JavaScript específicas do Jitterbit.

Atualmente, um número limitado das funções do Script do Jitterbit está disponível para uso em JavaScript. Para acessar uma dessas funções do Jitterbit em seu JavaScript, prefixe a função com "jitterbit.". Essas funções do Jitterbit estão disponíveis para uso em JavaScript no Jitterbit:

  • Jitterbit.ReadFile(string source_id[, string file_name])
    Lê um arquivo da fonte especificada, conforme descrito nas Funções de Arquivo do Construtor de Fórmulas Funções de arquivo. O valor retornado é uma string. Por exemplo, em JavaScript, usando esta função do Jitterbit para ler um arquivo:
var MyData = Jitterbit.ReadFile("<TAG>Sources/myfile</TAG>");
  • Jitterbit.WriteFile(string target_id, type file_contents[, string file_name])
    Escreve em um arquivo e automaticamente grava o arquivo. Nenhum valor é retornado. Veja WriteFile em Funções de Arquivo do Construtor de Fórmulas.

  • Jitterbit.DbExecute(string database_id, string sql_str, ...)
    Executa uma instrução SQL em um banco de dados e retorna os resultados. O valor retornado é uma string. Veja DBExecute em Funções de Banco de Dados do Construtor de Fórmulas.

  • Jitterbit.DbLookup(string database_id, string sql_str)
    Executa uma instrução SQL em um banco de dados e retorna o primeiro resultado que corresponde aos critérios especificados. O valor retornado é uma string. Veja DBLookup em Funções de Banco de Dados do Construtor de Fórmulas.

  • Jitterbit.GetVar(string name) e Jitterbit.SetVar(string name, string value)

    Aviso

    As funções Jitterbit.GetVar e Jitterbit.SetVar são projetadas para permitir o uso de variáveis que contêm pontos dentro do nome da variável. No entanto, o uso de pontos em um nome de variável não é recomendado. Como o valor será convertido em uma string quando a variável for definida, essas funções não podem ser usadas com tipos de dados complexos, como arrays, dicionários ou objetos JSON. Em vez disso, recomenda-se criar variáveis globais sem pontos e usar sublinhados no lugar de pontos, utilizando a sintaxe padrão com o sinal de dólar $, conforme descrito em Variáveis globais.

    A função Jitterbit.GetVar recupera uma variável global do Jitterbit previamente atribuída (uma variável prefixada com "Jitterbit"). O valor retornado é do tipo de dado apropriado.

    A função Jitterbit.SetVar atribui um valor a uma variável global do Jitterbit (uma variável prefixada com "Jitterbit"). O valor retornado é uma string. Este exemplo utiliza uma API personalizada que executa uma operação contendo um JavaScript usando Jitterbit.GetVar e Jitterbit.SetVar:

    var response="Hello World";
    
    response += "\r\nProject name: " + Jitterbit.GetVar("$jitterbit.operation.project_name");
    response += "\r\nOperation Name: " + Jitterbit.GetVar("$jitterbit.operation.name");
    response += "\r\ntest_var: " + Jitterbit.GetVar("$jitterbit.api.request.parameters.test_var");
    
    Jitterbit.SetVar("$jitterbit.api.response.headers.content_type","text/plain");
    Jitterbit.SetVar("$jitterbit.api.response.headers.test_header", "This is a header test");
    Jitterbit.SetVar("$jitterbit.api.response",response);
    

Incluídas nesta categoria estão várias funções adaptadas para uso com JavaScript no Jitterbit. Essas funções não são prefixadas com "Jitterbit.".

  • WriteToOperationLog
    Envia a saída para o log da operação atual do Jitterbit. Criada para uso com JavaScript no Jitterbit, e funciona de maneira semelhante à função do Jitterbit descrita no Construtor de Fórmulas Funções de registro e erro.

  • SetScriptOutput e SetScriptResult
    Define a saída para o script. Essas duas funções são aliases, e qualquer uma pode ser usada dependendo da sua preferência. Ao contrário dos Scripts do Jitterbit, que retornam automaticamente o valor da última linha, os JavaScripts do Jitterbit não retornam automaticamente um valor. Você pode usar qualquer uma dessas funções no seu JavaScript para retornar o resultado do script. Por exemplo:

    var MyVariable = "Hello World";
    WriteToOperationLog(MyVariable);
    SetScriptResult(MyVariable);
    

Palavras-chave

Esta categoria contém uma lista de palavras-chave do JavaScript no padrão ECMAScript 5.1, e está incluída aqui para conveniência.

Funções comuns

Esta categoria contém uma lista de funções do JavaScript no padrão ECMAScript 5.1 que podem ser relevantes para os usuários do Jitterbit. Esta categoria não é abrangente – você pode usar outras funções do JavaScript que não estão listadas aqui, como objetos Array, Date e String do JavaScript e suas funções associadas.

Nota

Para uma lista abrangente de funções JavaScript, consulte o padrão ECMAScript 5.1 em https://www.ecma-international.org/ecma-262/5.1/.

Math

Esta categoria contém propriedades de função disponíveis para o objeto JavaScript math, conforme especificado no padrão ECMAScript 5.1. Esta categoria é fornecida para facilitar a referência; para a documentação abrangente, consulte o padrão ECMAScript 5.1.

Project items

No JavaScript, você pode acessar itens do projeto, como fontes e alvos, assim como faria em um Script Jitterbit. Embora Scripts Jitterbit possam chamar JavaScripts Jitterbit, o contrário não é verdadeiro neste momento. JavaScripts Jitterbit não podem chamar outros scripts ou operações.

Data elements

Esta aba fornece acesso a elementos de dados que estão disponíveis globalmente para uso em todo o seu projeto, incluindo Variáveis globais, Variáveis e Variáveis Jitterbit.

attachment

Global variables

Todas as variáveis Jitterbit podem ser acessadas e atualizadas a partir do seu JavaScript. Quaisquer variáveis globais JavaScript recém-definidas se tornarão variáveis globais Jitterbit.

A sintaxe usada para definir e recuperar uma variável global depende de o nome da variável global conter um ponto.

Aviso

As funções Jitterbit.GetVar e Jitterbit.SetVar são projetadas para permitir o uso de variáveis que contêm pontos dentro do nome da variável. No entanto, não é recomendável usar pontos em um nome de variável. Como o valor será convertido em uma string quando a variável for definida, essas funções não podem ser usadas com tipos de dados complexos, como arrays, dicionários ou objetos JSON. Em vez disso, recomenda-se que você crie variáveis globais sem pontos e use sublinhados no lugar de pontos, utilizando a sintaxe padrão do cifrão $, conforme descrito em Variáveis globais.

Nota

Informações adicionais sobre as funções Jitterbit.GetVar e Jitterbit.SetVar estão na seção anterior sobre Funções.

Definir uma variável global
  • Nomes sem pontos (recomendado): Uma variável global que não contém pontos em seu nome pode ser criada inicialmente ou atualizada usando o comando var $, ou atualizada usando um sinal de dólar $ sem var.

    • var $: Usando var e começando com um sinal de dólar $, o exemplo de código var $serverURL="https://www.example.com" cria ou atualiza uma variável global chamada "serverURL" com um valor de "https://www.example.com". Novas variáveis globais que estão sendo inicializadas devem preceder o $ com var.
    • $: Com prefixo de um sinal de dólar $, o exemplo de código $serverURL="https://www.example.com" atualiza a mesma variável global chamada "serverURL" com a mesma URL. Isso funciona apenas para variáveis globais que já estão inicializadas.
  • Nomes com pontos (não recomendado): Uma variável global que contém pontos em seu nome pode ser criada inicialmente ou atualizada apenas com a função Jitterbit.SetVar.

    • Jitterbit.SetVar: Usando Jitterbit.SetVar, o exemplo de código Jitterbit.SetVar("$server.URL", "https://www.example.com") cria ou atualiza uma variável global chamada "server.URL" com um valor de "https://www.example.com" que será tratado como uma string. Observe que o sinal de dólar $ deve ser incluído dentro do nome da variável, ou a variável não será global para o sistema Jitterbit.
Obter uma variável global
  • Nomes sem pontos: O valor de uma variável global que não contém pontos em seu nome pode ser recuperado prefixando com um sinal de dólar $.

    • $: Com prefixo de um sinal de dólar $, o exemplo de código $serverURL recupera o valor da variável global "serverURL".
  • Nomes com pontos: O valor de uma variável global que contém pontos em seu nome pode ser recuperado apenas com a função Jitterbit.GetVar.

    • Jitterbit.GetVar: Usando Jitterbit.GetVar, o exemplo de código Jitterbit.GetVar("$server.URL") retorna o valor em string da variável global chamada "server.URL". Observe que o sinal de dólar $ deve ser incluído dentro do nome da variável para ler o valor global do sistema Jitterbit.

Variáveis de projeto

As variáveis de projeto são criadas inicialmente como um item de projeto dentro do Design Studio. Uma vez que uma variável de projeto é criada, você pode definir valores para elas através do Design Studio, do Console de Gerenciamento ou do Citizen Integrator. Saiba mais sobre como criar e atualizar variáveis de projeto em Variáveis de projeto.

No JavaScript do Jitterbit, a sintaxe usada para recuperar o valor de uma variável de projeto depende de o nome da variável de projeto conter um ponto.

  • Nomes sem pontos: O valor de uma variável de projeto que não contém nenhum ponto em seu nome pode ser recuperado começando com um sinal de dólar $.

    • $: Prefixado com um sinal de dólar $, o exemplo de código $org_netsuite_auth_username recupera o valor da variável de projeto chamada "org_netsuite_auth_username".
  • Nomes com pontos: O valor de uma variável de projeto que contém pontos em seu nome pode ser recuperado apenas com a função Jitterbit.GetVar.

    • Jitterbit.GetVar: Usando Jitterbit.GetVar, o exemplo de código Jitterbit.GetVar("$server.URL") retorna o valor da variável de projeto chamada "server.URL". Observe que o sinal de dólar $ deve ser incluído dentro do nome da variável.

Variáveis Jitterbit

O sistema Jitterbit define certas variáveis globais que estão sempre disponíveis em todo o seu projeto, conhecidas como variáveis Jitterbit (ou conhecidas como variáveis globais pré-definidas). Estas podem ser usadas para buscar informações globais, como o nome do arquivo de origem atual ou o nome da operação atual. Estas estão documentadas individualmente na seção Variáveis Jitterbit.

Em Jitterbit JavaScript, as variáveis Jitterbit pré-definidas pela Jitterbit são acessíveis apenas com a função Jitterbit.GetVar. Isso ocorre porque todas as variáveis Jitterbit pré-definidas pela Jitterbit contêm pontos dentro do nome da variável.

  • Jitterbit.GetVar: Usando Jitterbit.GetVar, o exemplo de código Jitterbit.GetVar("$jitterbit.operation.error") recupera o valor da variável Jitterbit "jitterbit.operation.error". Observe que o sinal de dólar $ deve ser incluído dentro do nome da variável.

Plugins

Atualmente, o uso de plugins em um JavaScript não é suportado. Em vez disso, use um Script Jitterbit e chame tanto o plugin quanto seu JavaScript a partir dele.

Testar e depurar

Em um JavaScript, você pode ver e validar os valores das variáveis assim como faria em um Script Jitterbit. No entanto, a opção Desativar pontos de interrupção não é aplicável, uma vez que a depuração não está disponível em JavaScript. Ao testar, os resultados do script (conforme definido pelas funções SetScriptOutput ou SetScriptResult) aparecerão no campo "Resultado" da aba "Teste" do Design Studio.

Logs de depuração do mecanismo

Defina $javascript.debug como true em um script Jitterbit antes de qualquer JavaScript para registrar as durações de execução e tamanhos dos dados enviados para os mecanismos de processamento. Este log é armazenado em $javascript.debugoutput:

Exemplo de Log de Depuração
Javascript Debug Log
--------------------------------------------------------------------
/// Timer started: Total Execution
# variables to Javascript: 10
Approx. Size: 112
/// Timer started: JavaScript Run
@@@ 10 ms for: JavaScript Run

# variables to JB Engine: 12
Approx. Size: 115
@@@ 69 ms for: Total Execution

Total Script Elapsed Time: 50498ms

Exemplos

Os seguintes exemplos de JavaScript são fornecidos para referência.

Funções de arquivo JavaScript

Funções de Arquivo JavaScript
// This script will:
// * Generate some random numbers
// * Write them to a target file
// * Then read them back in
// * Write output to the Operation Log
//

// Get 200 random numbers between 1 and 10000
var mystring = getRandomNumbers(200,1,10000);

// Write the data to a file
Jitterbit.WriteFile("<TAG>Targets/tmpdata</TAG>", mystring);

// Read the data back in from the file
var filedata = Jitterbit.ReadFile("<TAG>Sources/tmpdata</TAG>");

// Output to the Operation Log
WriteToOperationLog("Read file, output: " + filedata);

// Displays the data in the result of the Studio test script tab
SetScriptResult(filedata);

/////////////////

function getRandomNumbers(howMany,min,max) {
  var output = "";

  for (var i=0; i<howMany; i++) {
    output = output + getRandomNumber(min,max) + " \n";
  }

  return output;
}

function getRandomNumber(min,max) {
  return Math.floor((Math.random() * max) + min);
}

/////////////////

Funções matemáticas JavaScript

Funções Matemáticas JavaScript
// Create 200 random numbers
var $output = getRandomNumbers(200);

WriteToOperationLog($output);
SetScriptResult($output);

/////////////////

function getRandomNumbers(howMany) {
  var output = "";

  for (var i=0; i<howMany; i++) {
    output = output + Math.floor((Math.random() * 10000) + 1) + " \n";
  }

  return output;
}

/////////////////

Loop JavaScript

Loop JavaScript
// Create 100 random numbers

var $output = "";

for (var i=0; i<100; i++) {
  $output = $output + Math.floor((Math.random() * 10000) + 1) + " \n";
}

SetScriptResult($output);

O número máximo de iterações de loop permitido no Harmony é 50.000. O número máximo de iterações de loop em JavaScript é por script, não por loop.

Por exemplo, um script JavaScript contendo três loops, onde cada loop executa 25.000 iterações, resultaria em um total de 75.000 iterações rodando dentro do mesmo script.

Para aumentar o número máximo de iterações permitidas em qualquer script JavaScript, adicione manualmente JavaScriptMaxIterations=X, onde X é maior que 50000.

Para mais informações, veja Edite o arquivo de configuração (jitterbit.conf).

Exemplo de JSON JavaScript 1

Exemplo de JSON JavaScript 1
WriteToOperationLog("\n\n Parsing JSON...");

var jsonData = Jitterbit.ReadFile("<TAG>Sources/JSON_Data</TAG>");
var $jsonObj = JSON.parse(jsonData);

WriteToOperationLog("Value of 'status' is: " + $jsonObj.status);
WriteToOperationLog("Value of 'operation' is: " + $jsonObj.operation);
WriteToOperationLog("Value of 'serverUrl' is: " + $jsonObj.serverUrl);

var $firstOrg = $jsonObj.orgAttrs[0];

WriteToOperationLog("First Org ID is: " + $firstOrg.orgId);
WriteToOperationLog("First Org Name is: " + $firstOrg.orgName);

Exemplo de JSON JavaScript 2

Exemplo de JSON JavaScript 2
WriteToOperationLog("\n\n Parsing JSON...");

var jsonData = Jitterbit.ReadFile("<TAG>Sources/JSON_Data</TAG>");
var $jsonObj = JSON.parse(jsonData);

WriteToOperationLog("Status: " + $jsonObj.status);
WriteToOperationLog("Operation: " + $jsonObj.operation);

var orgs = "";
var needComma = false;

for (var i=0; i<$jsonObj.orgAttrs.length; i++) {
  if (needComma) orgs = orgs + ",";
  orgs = orgs + $jsonObj.orgAttrs[i].orgId;
  needComma = true;
}

WriteToOperationLog("Org IDs: " + orgs);

// You can modify existing JSON values
// Any changes will be reflected in the Jitterbit system as a map variable
// Here we'll insert a random number as an authentication token
var randomNumber = Math.floor((Math.random() * 10000) + 1);
$jsonObj.authenticationToken = randomNumber;

Exemplo de JSON JavaScript 3

Nota

O seguinte exemplo utiliza JSON stringify para criar facilmente estruturas de valores de propriedades e, em seguida, enviá-las para uma API.

Exemplo de JSON JavaScript 3
// This script uses JSON stringify
// to create a property value structure
// and then pushes it to an API

var $complexAPI = {
  "properties": [
    {
      "property": "email",
      "value": $email
    },
    {
      "property": "firstname",
      "value": $firstname
    },
    {
      "property": "lastname",
      "value": $lastname
    },
    {
      "property": "website",
      "value": $website
    },
    {
      "property": "phone",
      "value": $phone
    }
  ]
}

var $outputJSON = JSON.stringify($complexAPI);
Jitterbit.WriteFile("<TAG>Targets/Example HTTP Post</TAG>", $outputJSON);
WriteToOperationLog($outputJSON);
SetScriptResult($outputJSON);