new ScriptRunner(fileId [, options])
Esta classe é responsável por criar um ambiente JavaScript isolado do atual, possibilitando a execução de scripts e sua manipulação.
Deve-se observar que os recursos alocados pelo ambiente JavaScript utilizado internamente pelo ScriptRunner podem ser altos e a liberação desses recursos ocorrerá apenas quando esta instância deixar de ser referenciada por outros objetos, momento em que o garbage collector do JavaScript irá destruir o objeto e liberar os recursos associados a ele. Por esse motivo, devem ser evitadas referências às instâncias desta classe quando elas não estiverem mais em uso. A liberação imediata dos recursos também pode ser solicitada por meio do método #dispose, sendo recomendado o seu uso em um bloco try..finally.
Parameters:
Name | Type | Argument | Description | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
fileId |
string | number | URI ou chave do script que se será executado. |
|||||||||||||||||||||
options |
Object |
<optional> |
Opções do ambiente a ser criado. Properties
|
Examples
// Executa um código JavaScript compatível apenas com o runtime V8 const ScriptRunner = require('@nginstack/engine/lib/runner/ScriptRunner'); const scriptRunner = new ScriptRunner('test.js', { runtime: 'v8' }); try { scriptRunner.callFunction('test'); // 'is-v8' } finally { scriptRunner.dispose(); } // test.js source /* class Test { get id() { return 'is-v8'; } } function test() { const t = new Test(); return t.id; } *\/
// Executa um código JavaScript compatível apenas com o runtime V8 const ScriptRunner = require('@nginstack/engine/lib/runner/ScriptRunner'); const scriptRunner = new ScriptRunner('test.js'); try { scriptRunner.callFunction('test'); // 'is-v8' } finally { scriptRunner.dispose(); } // test.js source /* class Test { get id() { return 'is-v8'; } } function test() { const t = new Test(); return t.id; } *\/
// Restaura uma sessão stateful a partir do seu id const ScriptRunner = require('@nginstack/engine/lib/runner/ScriptRunner'); const sid = request.sid; const scriptRunner = new ScriptRunner('test.js', { sessionId: sid, waitTimeout: 60000 }); try { const data = scriptRunner.callFunction('test'); response.contentType = 'application/json'; response.write(JSON.stringify({ success: true, data: data, sid: scriptRunner.sessionId })); } finally { scriptRunner.dispose(); }
Members
-
sessionId :string
-
Identificador único da sessão JavaScript criada ou adquirida pelo ScriptRunner para executar o script informado.
Type:
- string
-
trackingId :string
-
Identificador de rastreio da sessão JavaScript criada ou adquirida pelo ScriptRunner para executar o script informado.
Mais detalhes em Session.trackingId.
Type:
- string
Methods
-
applyFunction(functionName [, args])
-
Executa uma função global declarada pelo script. O script será completamente executado ao menos uma vez para a identificação das funções globais definidas.
Parameters:
Name Type Argument Description functionName
string Nome da função que será executada.
args
Array <optional>
Parâmetros para a função que será invocada.
- See:
Returns:
O valor retornado pela função.
Importante: apenas valores primitivos e DataSets podem ser retornados.- Type
- DataSet | number | Date | string | boolean
Example
// Considerando que o script "echo" tenha esse código function doEcho(value) { const result = value ? value : "none"; return result; } // Temos que: const ScriptRunner = require('@nginstack/engine/lib/runner/ScriptRunner'); const scriptRunner = new ScriptRunner(-1898145715); // echo scriptRunner.loginBySession(session); scriptRunner.applyFunction('doEcho', []); // retorna "none" scriptRunner.publishGlobalProperty('value', 'opa'); scriptRunner.applyFunction('doEcho', []); // retorna "none" scriptRunner.applyFunction('doEcho', ['opa']); // retorna "opa"
-
callFunction(functionName [, params])
-
Executa uma função global declarada pelo script. O script será completamente executado ao menos uma vez para a identificação das funções globais definidas. A diferença para o applyFunction é que neste método é com uma lista aberta de argumentos, semelhante a diferença entre Function.apply e o Function.call.
Parameters:
Name Type Argument Description functionName
string Nome da função que deve ser executada.
params
Object <optional>
<repeatable>
Objetos passados como parâmetro para a função. Todos os valores passados devem ser capazes de serialização.
Returns:
O valor retornado pela função.
Importante: apenas valores primitivos e DataSets podem ser retornados.- Type
- DataSet | number | Date | string | boolean
Example
// Considerando que o script "echo" tenha esse código function doEcho(value) { const result = value ? value : "none"; return result; } // Temos que: const ScriptRunner = require('@nginstack/engine/lib/runner/ScriptRunner'); const scriptRunner = new ScriptRunner(-1898145715); // echo scriptRunner.loginBySession(session); scriptRunner.callFunction('doEcho'); // retorna "none" scriptRunner.publishGlobalProperty('value', 'opa'); scriptRunner.callFunction('doEcho'); // retorna "none" scriptRunner.callFunction('doEcho', 'opa'); // retorna "opa"
-
clear()
-
Limpa todas as propriedades do ambiente JavaScript incluindo as propriedades publicadas via publishGlobalProperty.
-
dispose()
-
Libera imediatamente os recursos associados a este objeto.
-
evaluate(expression)
-
Executa uma expressão JavaScript no contexto global da sessão, permitindo a manipulação ou inspeção do ambiente. Será retornado o resultado da expressão informada.
Parameters:
Name Type Description expression
string Expressão que serpa executada.
Returns:
O valor retornado pela expressão.
- Type
- DataSet | number | Date | string | boolean
Example
// Considerando que o script "echo" tenha esse código function doEcho(value) { const result = value ? value : "none"; return result; } // Temos que: const ScriptRunner = require('@nginstack/engine/lib/runner/ScriptRunner'); const scriptRunner = new ScriptRunner(-1898145715); // echo scriptRunner.loginBySession(session); scriptRunner.callFunction('doEcho', 'ops'); // retorna "ops" scriptRunner.evaluate('function doEcho() { return 'ok'; }'); scriptRunner.callFunction('doEcho', 'ops'); // retorna "ok"
-
login(userId, password)
-
Efetua login na sessão utilizando as credenciais de um usuário. Por padrão, o ambiente recém criado será executado em nome do usuário "anonymous".
Parameters:
Name Type Description userId
string Nome ou e-mail do usuário que será logado.
password
string Senha do usuário que será logado.
Returns:
Indica se o login foi executado com sucesso.
- Type
- boolean
-
loginByAuthToken(authToken)
-
Efetua o login na sessão do ambiente gerado por este ScriptRunner utilizando um token criado no sistema anteriormente pela classe AuthToken ou por meio de tokens de identificação gerados por provedores de identidade externos ao sistema.
Tokens do sistema devem ser autorizados utilizando os métodos Session.authorizeToken ou Security.authorizeToken, momento em que será gerado o token de identificação esperado por este método.
Tokens de identificação externos podem ser gerados utilizando a classe OpenIdClient. Somente serão aceitos tokens dos provedores de identidade configurados em "Admin > Segurança > Provedores de identidade".
Parameters:
Name Type Description authToken
string Token de autorização do usuário.
-
loginBySession(session)
-
Efetua login utilizando o usuário da sessão informada. Este método é útil para executar o novo ambiente com o mesmo usuário da sessão corrente.
Parameters:
Name Type Description session
Session Sessão cujo usuário corrente será utilizado para realizar o login neste ambiente.
- See:
Example
// O código abaixo é equivalente à um executeScript(key) var scriptRunner = new ScriptRunner(key); scriptRunner.loginBySession(session); scriptRunner.run();
-
publishGlobalProperty(name, value)
-
Cria no ambiente de execução do script a variável global passada.
Importante: apenas valores primitivos e DataSets podem ser usados.Parameters:
Name Type Description name
string Nome da variável.
value
DataSet | Number | Date | String | Boolean Valor da variável.
- See:
-
readGlobalProperty(name)
-
Retorna do ambiente de execução do script o valor de uma variável global anteriormente publicada ou definida pelo script.
Importante: apenas valores primitivos e DataSets podem ser usados.Parameters:
Name Type Description name
string Nome da variável.
Returns:
Valor da variável.
- Type
- DataSet | Number | Date | String | Boolean
-
run()
-
Roda o script utilizando o login previamente realizado, ou anonimamente caso nenhum método de login tenha sido executado. Essa função roda o script informado no construtor e retorna o último valor deixado na pilha do script.
Importante: apenas valores primitivos e DataSets podem ser retornados.
Returns:
Último valor deixado na pilha do script.
- Type
- Object
Example
// Considerando que o script "echo" tenha esse código const value; const result = value ? value : "none"; result; // Temos que: const ScriptRunner = require('@nginstack/engine/lib/runner/ScriptRunner'); const scriptRunner = new ScriptRunner(-1898145715); // echo scriptRunner.loginBySession(session); scriptRunner.run(); // retorna "none" scriptRunner.publishGlobalProperty('value', 'opa'); scriptRunner.run(); // retorna "opa"