# 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(''); } ``` ## 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")); } ```