Files
apitdn/fluig_rag_docs/Biblioteca de Snippets/Snippets JAVASCRIPT.md
T

721 lines
29 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Biblioteca de Snippets: JAVASCRIPT
## Origem: Acessando Datasets
```javascript
var newDataset = DatasetBuilder.newDataset();
newDataset.addColumn("Document ID");
newDataset.addColumn("Document version");
newDataset.addColumn("Document Name");
newDataset.addColumn("Document Type");
var listDocuments = datasets.get("document").search({
"documentType": ["1", "2"]
});
for(var index = 0; index < listDocuments.length; index++) {
newDataset.addRow([
listDocuments[index]["documentPK.documentId"],
listDocuments[index]["documentPK.version"],
listDocuments[index].documentDescription,
listDocuments[index].documentType
]);
}
return newDataset;
```
## Origem: Acessando Datasets
```javascript
var newDataset = DatasetBuilder.newDataset();
newDataset.addColumn("Document ID");
newDataset.addColumn("Document version");
newDataset.addColumn("Document Name");
newDataset.addColumn("Document Type");
var listDocuments = datasets.get("document").search({
"documentDescription": {
"value": "%API%",
"like": true
},
"limit": 5
});
for(var index = 0; index < listDocuments.length; index++) {
newDataset.addRow([
listDocuments[index]["documentPK.documentId"],
listDocuments[index]["documentPK.version"],
listDocuments[index].documentDescription,
listDocuments[index]["documentType"]
]);
}
return newDataset;
```
## Origem: Construção do Dataset Avançado
```javascript
function createDataset(fields, constraints, sortFields) {
var dataset = DatasetBuilder.newDataset();
//Cria as colunas
dataset.addColumn("Sigla");
dataset.addColumn("Estado");
dataset.addColumn("Capital");
dataset.addColumn("Area");
//Cria os registros
dataset.addRow(new Array("AM", "Amazonas", "Manaus", 1570746));
dataset.addRow(new Array("PA", "Pará", "Belém", 1247690));
dataset.addRow(new Array("MT", "Mato Grosso", "Cuiabá", 903358));
dataset.addRow(new Array("TO", "Tocantins", "Palmas", 277621));
dataset.addRow(new Array("PI", "Piauí", "Teresina", 251529));
return dataset;
}
```
## Origem: Construção do Dataset Avançado
```javascript
function createDataset(fields, constraints, sortFields) {
var company;
var initialDate;
var finalDate;
if (constraints != null) {
for (var i = 0; i < constraints.length; i++) {
if (constraints[i].fieldName == "company") { 
company = constraints[i].initialValue; 
}
else if (constraints[i].fieldName == "date") {
initialDate = constraints[i].initialValue; 
finalDate = constraints[i].finalValue;
}
}
}
.
.
.
}
```
## Origem: Construção do Dataset Avançado
```javascript
function createDataset(fields, constraints, sortFields) {
var dataset = DatasetBuilder.newDataset();
dataset.addColumn("DDD");
dataset.addColumn("Fone");
dataset.addColumn("Nome");
var tempDataset = getDefaultValues(); // consulta a fonte de dados do dataset
if(constraints!=null && constraints.length){ //se tiver constraint filtra
if(constraints[0].constraintType==ConstraintType.MUST) { // implementação somente para o MUST
for(var a=0;a< tempDataset.length;a++){
// se o valor inicial da constraint for igual ao valor do campo na constraint adiciona a linha
if(constraints[0].initialValue==tempDataset[a][constraints[0].fieldName]){
dataset.addRow(new Array(tempDataset[a]["DDD"], tempDataset[a]["Fone"],tempDataset[a]["Nome"]));
}
}
}
} else { // se não tiver constraint adiciona todas as linhas
for(var a=0;a< tempDataset.length;a++){
dataset.addRow(new Array(tempDataset[a]["DDD"], tempDataset[a]["Fone"],tempDataset[a]["Nome"]));
}
}
return dataset;
}
function getDefaultValues(){ // retorna valores default para serem filtrados
return [{
DDD: "47",
Fone: "1111-1111",
Nome: "Marcos"
},
{
DDD: "47",
Fone: "2222-2222",
Nome: "Roberto"
},
{
DDD: "41",
Fone: "3333-3333",
Nome: "Maria"
},
{
DDD: "31",
Fone: "4444-4444",
Nome: "Francisco"
},
{
DDD: "11",
Fone: "5555-5555",
Nome: "Michel"
}];
}
```
## Origem: Construção do Dataset Avançado
```javascript
function createDataset(fields, constraints, sortFields) {
var c1 = DatasetFactory.createConstraint("DDD", "47", "47", ConstraintType.MUST);
var dataset = DatasetFactory.getDataset("exemploFiltro", null, new Array(c1), null);
return dataset;
}
```
## Origem: Construção do Dataset Avançado
```javascript
function createDataset(fields, constraints, sortFields) {
var companyId = getValue("WKCompany");
var currentUser = getValue("WKUser");
.
.
.
}
```
## Origem: Construção do Dataset Avançado
```javascript
function createDataset(fields, constraints, sortFields) {
var newDataset = DatasetBuilder.newDataset();
try{
var dataset = "";
var filter = [];
var currentUser = getValue("WKUser"); //Código do usuário logado
var currentCompany = getValue("WKCompany"); //Código da empresa do usuário logado
var groupCode = "grupo"; //Código do grupo que o usuário precisa pertencer para passar na validação.
dataset = "colleagueGroup" //Nome do dataset que pesquisa a relação de grupos e usuários.
filter= [DatasetFactory.createConstraint("colleagueGroupPK.companyId", currentCompany , currentCompany, ConstraintType.MUST),
DatasetFactory.createConstraint("colleagueGroupPK.colleagueId", currentUser , currentUser, ConstraintType.MUST),
DatasetFactory.createConstraint("colleagueGroupPK.groupId", groupCode, groupCode, ConstraintType.MUST)]; //Cria o filtro para empresa, usuário e grupo.
/** Codigo para pesquisar por papel ao invés de grupo.
*
var roleCode = "papel"; //Código do papel que o usuário precisa pertencer para passar na validação.
dataset = "workflowColleagueRole" //Nome do dataset que pesquisa a relação de papéis e usuários.
filter= [DatasetFactory.createConstraint("workflowColleagueRolePK.companyId", currentCompany , currentCompany, ConstraintType.MUST),
DatasetFactory.createConstraint("workflowColleagueRolePK.colleagueId", currentUser , currentUser, ConstraintType.MUST),
DatasetFactory.createConstraint("workflowColleagueRolePK.roleId", roleCode, roleCode, ConstraintType.MUST)];
*/
var validation = DatasetFactory.getDataset(dataset, null, filter, null); //Realiza a chamada do dataset
if(validation.rowsCount==1){ //Se tiver uma linha quer dizer que o usuário logado faz parte do grupo/papel informado
//Esse retorno é só para informar que passou da validação, mas aqui dentro ficaria o codigo que o usuário tem permissão de acesso.
newDataset.addColumn("SUCCESS");
newDataset.addRow(["ok"]);
} else {
//Esse retorno é só para informar que o usuário não faz parte do grupo/papel.
newDataset.addColumn("ERROR");
newDataset.addRow(["sem permissão"]);
}
} catch(e) {
newDataset.addColumn("ERROR");
newDataset.addRow(["chamada incorreta"]);
return newDataset;
}
return newDataset;
}
```
## Origem: Construção do Dataset Avançado
```javascript
function createDataset(fields, constraints, sortFields) {
var c1 = null;
var c2 = null;
var filter = null;
if (constraints.length > 0)
{
c1 = DatasetFactory.createConstraint("mail", "%" + constraints[0].initialValue + "%" , "%" + constraints[0].finalValue + "%", ConstraintType.SHOULD);
c2 = DatasetFactory.createConstraint("mail", "%%", "%%", ConstraintType.SHOULD);
c1.setLikeSearch(true);
c2.setLikeSearch(true);
filter = new Array (c1, c2);
}
var dataset = DatasetFactory.getDataset("colleague", null, filter, sortFields);
return dataset;
}
```
## Origem: Construção do Dataset Avançado
```javascript
function createDataset(fields, constraints, sortFields) {
//Cria as colunas
var dataset = DatasetBuilder.newDataset();
dataset.addColumn("NumFormulario");
dataset.addColumn("Id");
dataset.addColumn("Peca");
dataset.addColumn("Quantidade");
//Cria a constraint para buscar os formulários ativos
var cst = DatasetFactory.createConstraint("metadata#active", true, true, ConstraintType.MUST);
var constraints = new Array(cst);
var datasetPrincipal = DatasetFactory.getDataset("dsExemploPaiFilho", null, constraints, null);
for (var i = 0; i < datasetPrincipal.rowsCount; i++) {
var documentId = datasetPrincipal.getValue(i, "metadata#id");
var documentVersion = datasetPrincipal.getValue(i, "metadata#version");
//Cria as constraints para buscar os campos filhos, passando o tablename, número da formulário e versão
var c1 = DatasetFactory.createConstraint("tablename", "tabelaPecas" ,"tabelaPecas", ConstraintType.MUST);
var c2 = DatasetFactory.createConstraint("metadata#id", documentId, documentId, ConstraintType.MUST);
var c3 = DatasetFactory.createConstraint("metadata#version", documentVersion, documentVersion, ConstraintType.MUST);
var constraintsFilhos = new Array(c1, c2, c3);
//Busca o dataset
var datasetFilhos = DatasetFactory.getDataset("dsExemploPaiFilho", null, constraintsFilhos, null);
for (var j = 0; j < datasetFilhos.rowsCount; j++) {
//Adiciona os valores nas colunas respectivamente.
dataset.addRow(new Array(
documentId,
datasetFilhos.getValue(j, "wdk_sequence_id"),
datasetFilhos.getValue(j, "peca"),
datasetFilhos.getValue(j, "qtde")));
}
}
return dataset;
}
```
## Origem: Datasets acessando banco de dados externo
```javascript
function createDataset(fields, constraints, sortFields) {
var newDataset = DatasetBuilder.newDataset();
log.info("QUERY: " + myQuery);
var dataSource = "/jdbc/MeuDataSet";
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var created = false;
var myQuery = "select * from pessoas";
try {
var conn = ds.getConnection();
var stmt = conn.createStatement();
var rs = stmt.executeQuery(myQuery);
var columnCount = rs.getMetaData().getColumnCount();
while (rs.next()) {
if (!created) {
for (var i = 1; i <= columnCount; i++) {
newDataset.addColumn(rs.getMetaData().getColumnName(i));
}
created = true;
}
var Arr = new Array();
for (var i = 1; i <= columnCount; i++) {
var obj = rs.getObject(rs.getMetaData().getColumnName(i));
if (null != obj) {
Arr[i - 1] = rs.getObject(rs.getMetaData().getColumnName(i)).toString();
} else {
Arr[i - 1] = "null";
}
}
newDataset.addRow(Arr);
}
} catch (e) {
log.error("ERRO==============> " + e.message);
} finally {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
return newDataset;
}
```
## Origem: Sincronização de datasets
```javascript
function onSync(lastSyncDate) {
var dataset = DatasetBuilder.newDataset();
var integracao = ServiceManager.getService('FLUIG3');
var serviceLocator = integracao
.instantiate('pkgWkfSolicPagamento.FLUIGLocator');
var service = serviceLocator.getFLUIGSOAP();
var cdEmp = 1; // código empresa pagadora
var cdFilial = 0; // todas as filiais
var cdTitulo = 0; // todos os titulos
var cdPrefixo = ""
var cnpj = 0; // cnpj fornecedor
var codForn = 0; // cod universal para todos os fornecedores
var lojaForn = 0; // loja fornecedor
// Invocando o servico passando a data da ultima sincronização com a plataforma.
// O webservice foi preparado para trazer apenas os dados desde a ultima
// sincronização.
var retorno = service.CONSPAG(cdEmp, cdFilial, cdTitulo, cdPrefixo, cnpj,
codForn.toString(), lojaForn.toString(), lastSyncDate);
var arrayListaTitulo = retorno.getLISTACPAG();
for (var i = 0; i < arrayListaTitulo.length; i++) {
var r = arrayListaTitulo[i];
if (r.getCE_TIPO() == "ADD") {
dataset.addRow(new Array(r.getCE_CODIGO(), r.getCE_LOJA(), r
.getCE_NUMTIT(), r.getCE_PARCELA(), r.getCE_PEFIXO(), r
.getCE_TIPO(), r.getCE_VALOR(), r.getCE_INSS(), r
.getCE_ISS(), r.getCE_IRRF(), new java.util.Date(r.getDT_TITULO()), r
.getCE_PIS(), r.getCE_COFINS()));
} else if (r.getCE_TIPO() == "MOD") {
dataset.updateRow(new Array(r.getCE_CODIGO(), r.getCE_LOJA(), r
.getCE_NUMTIT(), r.getCE_PARCELA(), r.getCE_PEFIXO(), r
.getCE_TIPO(), r.getCE_VALOR(), r.getCE_INSS(), r
.getCE_ISS(), r.getCE_IRRF(), new java.util.Date(r.getDT_TITULO()), r
.getCE_PIS(), r.getCE_COFINS()));
} else if (r.getCE_TIPO() == "DEL") {
dataset.deleteRow(new Array(r.getCE_CODIGO(), r.getCE_LOJA(), r
.getCE_NUMTIT(), r.getCE_PARCELA(), r.getCE_PEFIXO(), r
.getCE_TIPO(), r.getCE_VALOR(), r.getCE_INSS(), r
.getCE_ISS(), r.getCE_IRRF(), new java.util.Date(r.getDT_TITULO()), r
.getCE_PIS(), r.getCE_COFINS()));
} else {
// Estado do registro é desconhecido no cache
dataset.addOrUpdateRow(new Array(r.getCE_CODIGO(), r.getCE_LOJA(), r
.getCE_NUMTIT(), r.getCE_PARCELA(), r.getCE_PEFIXO(), r
.getCE_TIPO(), r.getCE_VALOR(), r.getCE_INSS(), r
.getCE_ISS(), r.getCE_IRRF(), new java.util.Date(r.getDT_TITULO()), r
.getCE_PIS(), r.getCE_COFINS()));
}
}
return dataset;
}
```
## Origem: Sincronização de datasets
```javascript
function onSync(lastSyncDate) {
var dataset = DatasetBuilder.newDataset();
dataset.addRow(new Array(2256, "SÃO PAULO", 1058, "6", "ESPORTE"));
dataset.addRow(new Array(1874, "RECIFE", 1258, "1247690", "2", "CALÇADOS"));
dataset.addRow(new Array(1205, "RIO DE JANEIRO", 2594, "10", "MOVEIS"));
dataset.addRow(new Array(985, "FLORIANOPOLIS", 2269, "10", , "ELETRONICOS"));
return dataset;
}
```
## Origem: Eventos de Formulário
```javascript
function displayFields(form, customHTML) {
if ( form.getFormMode() == MOD ) {
form.setValue('RNC_colab_abertura', new java.lang.Integer(1));
}
}
```
## Origem: Eventos de Formulário
```javascript
function displayFields(form, customHTML) {
form.setVisible("campoA", false);
form.setVisibleById("linha___1", false);
}
```
## Origem: Eventos de Formulário
```javascript
**displayFields.js - Clique para expandir** Expandir origem
```
## Origem: Eventos de Formulário
```javascript
Conforme explicado, o *customHTML* permite personalizar o formulário diretamente pelo método displayFields. Este exemplo, adaptado dos nos [Exemplos Avançados](../Plataforma Documentação técnica/Recurso de Processos (BPM).md)/Desenvolvimento de Workflow/Exemplos avançados.md), mostra como usar o displayFields para, no formulário, ter acesso ao modo de visualização, código do solicitante e número da atividade. Além de preencher alguns campos da solicitação com a data atual e o nome do solicitante:
```
## Origem: Eventos de Formulário
```javascript
Para que os dados sejam carregados e apresentados em tela, principalmente em dispositivos *mobile*, é necessário chamar as funções que irão carregá-los dentro de uma estrutura de *read*.
A invocação dos métodos que irão popular o formulário deve estar contida dentro de uma chamada $(function(), garantindo assim o carregamento dos arquivos exigidos pelo formulário antes das funções.
Por exemplo, deseja-se carregar dados de produtos em um formulário. Para que isto ocorra, foi criada uma função *loadProdutos()* que irá preencher um *grid* inserido no formulário HTML. Neste caso a chamada desta função dentro do *displayFields* ficaria:
```
## Origem: Eventos de Formulário - Exemplo de novo modelo
```javascript
function displayFields(form, customHTML) {
if ( form.getFormMode() == MOD ) {
form.setValue('RNC_colab_abertura', new java.lang.Integer(1));
}
}
```
## Origem: Eventos de Formulário - Exemplo de novo modelo
```javascript
function displayFields(form, customHTML) {
form.setVisible("campoA", false);
form.setVisibleById("linha___1", false);
}
```
## Origem: Eventos de Formulário - Exemplo de novo modelo
```javascript
**displayFields.js - Clique para expandir** Expandir origem
```
## Origem: Eventos de Formulário - Exemplo de novo modelo
```javascript
Conforme explicado, o *customHTML* permite personalizar o formulário diretamente pelo método displayFields. Este exemplo, adaptado dos nos [Exemplos Avançados](../Plataforma Documentação técnica/Recurso de Processos (BPM).md)/Desenvolvimento de Workflow/Exemplos avançados.md), mostra como usar o displayFields para, no formulário, ter acesso ao modo de visualização, código do solicitante e número da atividade. Além de preencher alguns campos da solicitação com a data atual e o nome do solicitante:
```
## Origem: Eventos de Formulário - Exemplo de novo modelo
```javascript
Para que os dados sejam carregados e apresentados em tela, principalmente em dispositivos *mobile*, é necessário chamar as funções que irão carregá-los dentro de uma estrutura de *read*.
A invocação dos métodos que irão popular o formulário deve estar contida dentro de uma chamada $(function(), garantindo assim o carregamento dos arquivos exigidos pelo formulário antes das funções.
Por exemplo, deseja-se carregar dados de produtos em um formulário. Para que isto ocorra, foi criada uma função *loadProdutos()* que irá preencher um *grid* inserido no formulário HTML. Neste caso a chamada desta função dentro do *displayFields* ficaria:
```
## Origem: formController.getCardData()
```javascript
function displayFields(form, customHTML) {
  var mapaForm = new java.util.HashMap();
  mapaForm = form.getCardData();
  log.info("### getCardData ###: " + mapaForm);
}
```
## Origem: Integração de aplicativos externos com o Fluig
```javascript
function displayFields(form,customHTML){
var CURRENT_STATE = getValue("WKNumState") ? getValue("WKNumState") : 0;
var CURRENT_USER = getValue("WKUser");
customHTML.append('<script>' +
' var NUM_PROCES = ' + getValue("WKNumProces") + '; ' +
' var CURRENT_USER = \'' + CURRENT_USER + '\'; ' +
' var CURRENT_STATE = ' + CURRENT_STATE + '; ' +
'</script>');
}
```
## Origem: Básico - Integração Fluig x Protheus: Centro de custo
```javascript
function defineStructure() {}
function onSync(lastSyncDate) {}
function createDataset(fields, constraints, sortFields) {
    var dataset = DatasetBuilder.newDataset();
    
    dataset.addColumn("InternalId");
    dataset.addColumn("CompanyInternalId");
    dataset.addColumn("CompanyId");
    dataset.addColumn("RegisterSituation");
    dataset.addColumn("Class");
    dataset.addColumn("Code");
    dataset.addColumn("Name");
    var sendData = {    
        companyId: String(fluigAPI.getSecurityService().getCurrentTenantId()),
        serviceCode: "API_PROTHEUS_REST",
        endpoint: "/api/ctb/v1/costcenters/",
        method: "GET"
    };
    // Fornece acesso aos serviços externos com autenticação oauth, documentação: http://127.0.0.1:8080/api/sdk/com/fluig/sdk/service/AuthorizeClientSdkService.html
    var clientService = fluigAPI.getAuthorizeClientService(); 
    
// Realizar a integração
// Documentação da API: https://api.totvs.com.br/apidetails/CostCenter_v1_000.json
    var vo = clientService.invokeService(JSON.stringify(sendData));
// Armazenar o status HTTP da integração, esse passo é muito importante para idenficar se tudo ocorreu como deveria!
// Fique atento!!! Cada API pode ter um retorno diferente, a melhor prática é consultar documentação oficial em api.totvs.com.br e checar 
// os seus respectivos métodos e retornos possíveis.
// O método getHttpStatusResult é da classe AuthorizeClientSdkServiceVO (Variavel clientService do nosso código)
// Documentação completa: http://127.0.0.1:8080/api/sdk/com/fluig/sdk/api/authorizeclient/AuthorizeClientSdkServiceVO.html
    var status = String(vo.getHttpStatusResult());
    if (status == "200") {
        var jsonResponse = JSON.parse(vo.getResult());       
        if (jsonResponse.items && jsonResponse.items.length > 0) {
            for (var i = 0; i < jsonResponse.items.length; i++) {
                var item = jsonResponse.items[i];                
                dataset.addRow(new Array(
                 item.InternalId,
                 item.CompanyInternalId,
                 item.CompanyId,
                 item.RegisterSituation,
                 item.Class,
                 item.Code,
                 item.Name
                ));
            }
        }
    } else {
        var errorMsg = "Erro desconhecido durante a integracao.";
        try {
            var parseResult = JSON.parse(vo.getResult());
            var parseError = JSON.parse(parseResult.errorMessage);
            errorMsg = parseError.detailedMessage;
        } catch (e) {
            errorMsg = vo.getResult();
        }
        
        dataset.addRow(new Array(
            status,
            errorMsg,
            "", "", "", "", ""
        ));
    }
  
    return dataset;
}
function onMobileSync(user) {}
```
## Origem: Integração com Aplicativos Externos
```javascript
function createDataset(fields, constraints, sortFields) {
// Cria o dataset
var dataset = DatasetBuilder.newDataset();
dataset.addColumn("Element Name");
dataset.addColumn("Symbol");
dataset.addColumn("Atomic Number");
dataset.addColumn("Atomic Weight");
// Conecta o servico e busca os livros
var periodicService = ServiceManager.getService('PeriodicTable');
var serviceHelper = periodicService.getBean();
var serviceLocator = periodicService.instantiate('net.webservicex.Periodictable');
var service = serviceLocator.getPeriodictableSoap();
// Invoca o serviço
try {
var result = service.getAtomicNumber("sodium"); // O termo "sodium" corresponde ao parâmetro do tipo String esperado na assinatura do método getAtomicNumber
var xml = new XML(result);
for ( var index in xml.Table) {
var element = xml.Table[index];
dataset.addRow(new Array(element.ElementName.toString(), element.Symbol.toString(), element.AtomicNumber
.toString(), element.AtomicWeight.toString()));
}
} catch (erro) {
dataset.addRow(new Array(erro));
}
return dataset;
}
```
## Origem: Métodos de contorno de lentidão na plataforma
```javascript
2022-11-23 15:59:03,511 WARN [com.fluig.monitoring.jschronos.JSChronos] (JSChronos.CustomizationManagerImpl.invokeFunction.createDataset) CustomizationManagerImpl.invokeFunction.createDataset ja esta sendo executado por 2211 segundos params: [[[Ljava.lang.String;@268d1e17, null, null], Thread = default task-6727, datasetId = dsDatabase]
2.211 segundos
2022-11-24 08:51:22,088 WARN [com.fluig.monitoring.jschronos.JSChronos] (JSChronos.CustomizationManagerImpl.invokeFunction.createDataset) CustomizationManagerImpl.invokeFunction.createDataset ja esta sendo executado por 60 segundos params: [[[Ljava.lang.String;@7cec0760, [Lcom.totvs.technology.foundation.dataset.SearchConstraint;@64de871c, null], Thread = default task-35, datasetId = dsChecklistCRUD]
2023-02-14 09:17:47,722 WARN [com.fluig.monitoring.jschronos.JSChronos] (JSChronos.CustomizationManagerImpl.invokeFunction.createDataset) CustomizationManagerImpl.invokeFunction.createDataset ja esta sendo executado por 300 segundos params: [[null, [Lcom.totvs.technology.foundation.dataset.SearchConstraint;@67eb8082, null], Thread = default task-389, datasetId = ds_sql_update]
2023-02-14 09:17:56,587 WARN [com.fluig.monitoring.jschronos.JSChronos] (JSChronos.CustomizationManagerImpl.invokeFunction.servicetask64) CustomizationManagerImpl.invokeFunction.servicetask64 ja esta sendo executado por 120 segundos params: [[Process id = alteracao_de_preco, Process Version = 23, Process Current UserId = usuario.user], Thread = default task-413, datasetId = workflowColleagueRole]
```
## Origem: Métodos de contorno de lentidão na plataforma
```javascript
2023-05-29 09:30:53,414 WARN [com.fluig.monitoring.jschronos.JSChronos] (default task-39) CustomizationManagerImpl.invokeFunction.createDataset executou por 32 segundos
2023-05-29 09:30:53,414 WARN [com.fluig.monitoring.jschronos.JSChronos] (default task-39) params: [[[Ljava.lang.String;@6c45e716, [Lcom.totvs.technology.foundation.dataset.SearchConstraint;@a1b6a73, null], Thread = default task-39, datasetId = ds_RMConsulta]
2023-05-29 09:30:53,437 WARN [com.fluig.monitoring.jschronos.JSChronos] (default task-39) DatasetFactory.getDataset.ds_RMConsulta executou por 32 segundos
2023-05-29 09:30:53,437 WARN [com.fluig.monitoring.jschronos.JSChronos] (default task-39) params: [[TBC012.05, 1, T], [FIELD_NAME=COLIGADA; INITIAL_VALUE=1; FINAL_VALUE=1; CONSTRAINT_TYPE=MUST; IS_LIKE_SEARCH=false; ], null]
2023-05-29 09:31:24,672 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-39) Executando Dataset com ID ds_RMConsulta do tipo Avançado.
2023-05-29 09:31:24,672 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-39) Builder rodando sem o mobile
2023-05-29 09:31:24,719 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-39) uf-log | Chamada do DataSet ds_RMConsulta
2023-05-29 09:31:24,734 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-39) Executando Dataset com ID ds_RMConecta do tipo Avançado.
2023-05-29 09:31:24,735 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-39) Builder rodando sem o mobile
2023-05-29 09:31:24,786 INFO [org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean] (default task-39) Creating Service {http://www.totvs.com/}wsConsultaSQL from WSDL: http://peg54p-prd-ws.totvscloud.com.br:8083/wsConsultaSQL/MEX?wsdl
2023-05-29 09:31:24,800 WARNING [org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean] (default task-39) No method was found for the WSDL operation {http://www.totvs.com/}RealizarConsultaSQLContexto.
2023-05-29 09:31:24,805 INFO [org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean] (default task-39) Creating Service {http://www.totvs.com/}IwsConsultaSQLService from class com.totvs.IwsConsultaSQL
2023-05-29 09:31:24,812 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-39) uf-log | Dados da chamada ao serviço wsConsultaSQL:
2023-05-29 09:31:24,812 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-39) uf-log | CODSENTECA: TBC012.03
2023-05-29 09:31:24,812 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-39) uf-log | CODCOLIGADA: 1
2023-05-29 09:31:24,812 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-39) uf-log | APLICACAO: T
2023-05-29 09:31:24,812 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-39) uf-log | PARAMETRO:
2023-05-29 09:31:24,922 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-39) uf-log | Chamada realizada com sucesso.
2023-05-29 09:31:24,923 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-39) uf-log | Quantidade de registros retornados: 57
```
## Origem: Conversão TOTVS ECM para plataforma TOTVS Fluig
```javascript
function createDataset(fields, constraints, sortFields) {
var query = "SELECT login,email FROM fdn_usertenant LIMIT 100";
var dataSource = "jdbc/FluigDSRO";
var newDataset = DatasetBuilder.newDataset();
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
try {
var conn = ds.getConnection();
var stmt = conn.createStatement();
var rs = stmt.executeQuery(query);
newDataset.addColumn("Login");
newDataset.addColumn("Email");
while (rs.next()) {
newDataset.addRow([ rs.getString("login"), rs.getString("email") ]);
}
} catch(e) {
newDataset.addColumn("erro");
newDataset.addRow([e.message]);
} finally {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
}
return newDataset;
}
```
## Origem: Personalização de formulários - Nova versão
```javascript
function displayFields(form,customHTML) {
// Obtendo o usuario via dataset
filter = new java.util.HashMap();
filter.put("colleaguePK.colleagueId","adm");
usuario = getDatasetValues('colleague',filter);
form.setValue('RNC_colab_abertura',usuario.get(0).get("colleaguePK.colleagueId"));
}
```
## Origem: Personalização de formulários - Nova versão
```javascript
function displayFields(form,customHTML) {
// Obtendo o usuario via dataset
filter = new java.util.HashMap();
filter.put("RNC_nr_solicitacao",new java.lang.Integer(20));
registrosform = DatasetFactory.getDatasetValues(Number(676),filter);
log.info("Usuário de Abertura: "+ registrosform.get(0).get("RNC_colab_abertura"));
}
```
## Origem: Personalização de formulários - Nova versão
```javascript
function displayFields(form,customHTML) {
// Obtendo o usuario via dataset
filter = new java.util.HashMap();
filter.put("RNC_nr_solicitacao",new java.lang.Integer(20));
registrosform = getDatasetValues(Number(676),filter);
log.info("Usuário de Abertura: "+ registrosform.get(0).get("RNC_colab_abertura"));
}
```