[Erro] Consulta a dataset está entrando em loop

Olá, bom dia,

Estou com o seguinte erro:

Criei um dataset que a partir de uma consulta SQL do RM retorna alguns registros; Quando consulto esse dataset através do Eclipse, os registros carregam normalmente, porém, quando realizo a consulta através de um evento do processo, a consulta entra em loop e não carrega nenhum resultado. Vale ressaltar, que já realizei testes não passando nenhum parâmetro no Fields e amarrando o filtro do dataset, e mesmo assim entrou em loop.

Código do dataset:

function createDataset(fields, constraints, sortFields) {

    log.info("INICIO CONSULTA UNIDADE");

    if (fields != null) {
        CODCOLIGADA = fields[0];
        log.info("INTEGRAÇÃO WEBSERVICE rm >>> CODCOLIGADA " + CODCOLIGADA);
        IDPS = fields[1];
        log.info("INTEGRAÇÃO WEBSERVICE rm >>> IDPS " + IDPS);
        NUMEROINSCRICAO = fields[2];
        log.info("INTEGRAÇÃO WEBSERVICE rm >>> NUMEROINSCRICAO " + NUMEROINSCRICAO);
    }
    else {
        CODCOLIGADA = 47;
        IDPS=1;
        NUMEROINSCRICAO=22;
    }

    var INTEGRADOR = "mestre";
    log.info("#1 "+INTEGRADOR);
    var SENHA = "senha";
    //log.info("#2 "+SENHA);
    var NOME_SERVICO = "wsConsultaSQL";
    log.info("#2 "+NOME_SERVICO);
    var CAMINHO_SERVICO = "com.totvs.WsConsultaSQL";
    log.info("#3 "+CAMINHO_SERVICO);

    var PARAMS ="CODCOLIGADA="+CODCOLIGADA+";"+"IDPS="+IDPS+";"+"NUMEROINSCRICAO="+NUMEROINSCRICAO;

    var servico = ServiceManager.getService(NOME_SERVICO);
    log.info("#4 "+servico);
    var instancia = servico.instantiate(CAMINHO_SERVICO);
    log.info("#5 "+instancia);
    var ws = instancia.getRMIwsConsultaSQL();
    log.info("#6 "+ws);
    var serviceHelper = servico.getBean();
    log.info("#7 "+serviceHelper);
    var authService = serviceHelper.getBasicAuthenticatedClient(ws,"com.totvs.IwsConsultaSQL",INTEGRADOR, SENHA);
    log.info("#8 "+authService);
    var result = authService.realizarConsultaSQL("TOTVS.PS.COMPL", 47, "S", PARAMS);
    log.info("#9 "+result);
    var JSONObj = org.json.XML.toJSONObject(result);
    log.info("#10 "+JSONObj);
    var dados = JSONObj.get("NewDataSet").get("Resultado");

    log.info("#11 "+dados);

    var cdUnidade;

    if (dados.isNull(0)) {
        row = dados;
        cdUnidade = row.has("UNIDADE") ? row.get("UNIDADE") : "";
        log.info("#12.1 "+cdUnidade);
    } else {
        for (var i = 0; i < dados.length(); i++) {
            var registro = dados.get(i);
            cdUnidade = registro.get("UNIDADE");
            log.info("#12.2 "+cdUnidade);
        }
    }


    var COLUNAS = new Array("CODUNIDADE", "NOMEUNIDADE"); 

    log.info("#13 "+COLUNAS);
    var dataset = DatasetBuilder.newDataset();
    log.info("#14 "+dataset);

    for (var i=0; i < COLUNAS.length; i++ ) {    
        dataset.addColumn(COLUNAS[i]);
    }

    log.info("#15 DEPOIS DO FOR");

    var PARAMS2 = "CODTABELA=UNIDADES;CODCLIENTE="+cdUnidade;
    //var PARAMS2 = "CODTABELA=UNIDADES;CODCLIENTE=01";

    var result2 = authService.realizarConsultaSQL("TOTVS.PS.UNIDADE", 47, "S", PARAMS2);
    log.info("#16 "+result2);
    var JSONObj2 = org.json.XML.toJSONObject(result2);
    log.info("#17 "+JSONObj2);
    var dados2 = JSONObj2.get("NewDataSet").get("Resultado");

    log.info("#18 "+dados2);

    if (dados2.isNull(0)) {
        row = dados2;
        dataset.addRow(new Array(row.has("CODCLIENTE") ? row.get("CODCLIENTE") : "",
                row.has("DESCRICAO") ? row.get("DESCRICAO") : ""));
    } else {
        for (var i = 0; i < dados2.length(); i++) {
            var registro = dados2.get(i);
            dataset.addRow(new Array(registro.get("CODCLIENTE"), registro.get("DESCRICAO")));
        }
    }

    return dataset;
}

Acompanhando o log, notei que a consulta entra em loop no trecho var result = authService.realizarConsultaSQL("TOTVS.PS.COMPL", 47, "S", PARAMS);

Evento que chama o dataset:

function beforeStateEntry(sequenceId){
    if (sequenceId == 7) {
        var CODUSUARIOPS = hAPI.getCardValue("CODUSUARIOPS");
        var fields = new Array(CODUSUARIOPS);
        var datasetDados = DatasetFactory.getDataset("ds-rm-dados-candidato", fields, null, null);

        if (datasetDados.rowsCount>0) {
            for (var h = 0; h < datasetDados.rowsCount; h++) {
                hAPI.setCardValue("DATANASCIMENTO", datasetDados.getValue(h, "DTNASCIMENTO"));
                hAPI.setCardValue("UF", datasetDados.getValue(h, "ESTADO"));
                hAPI.setCardValue("MUNICIPIO", datasetDados.getValue(h, "CIDADE"));
                hAPI.setCardValue("CPF", datasetDados.getValue(h, "CPF"));
                hAPI.setCardValue("FONE", datasetDados.getValue(h, "TELEFONE1"));
                hAPI.setCardValue("MAIL", datasetDados.getValue(h, "EMAIL"));
            }
        }

        var CPF = hAPI.getCardValue("CPF");
        var NOMECURSO = hAPI.getCardValue("CURSO");
        var fields = new Array(CPF, NOMECURSO);
        var datasetFormacoes = DatasetFactory.getDataset("ds-rm-formacoes-candidato", fields, null, null);

        if (datasetFormacoes != null) {
            hAPI.setCardValue("JACURSOU", 'sim');
        }
        else {
            hAPI.setCardValue("JACURSOU", 'nao');
        }

        hAPI.setCardValue("UNIDADEFORMACAO", 'CAMPINAS');
        var CODCOLIGADA = hAPI.getCardValue("COLIGADA");
        var IDPS = hAPI.getCardValue("IDPS");
        var NUMEROINSCRICAO = hAPI.getCardValue("NUMEROINSCRICAO");
        var fields = new Array(CODCOLIGADA, IDPS, NUMEROINSCRICAO);
        var datasetUnidade = DatasetFactory.getDataset("ds-rm-unidadeformacao-candidato", fields, null, null);

        if (datasetUnidade.rowsCount>0) {
            for (var h = 0; h < datasetUnidade.rowsCount; h++) {
                hAPI.setCardValue("UNIDADEFORMACAO", datasetUnidade.getValue(h, "NOMEUNIDADE"));
            }
        }
    }
}

Att,

Gabriel Firmino

compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do fluig Forum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags integracao fluigxrm consulta datasets ou faça a sua própria pergunta.