Filtrar Dataset no form não funciona?

Tenho um Dataset customizado que roda uma consulta no RM

function createDataset(fields, constraints, sortFields) {

    var NOME_SERVICO = "WSCONSSQL";
    var CAMINHO_SERVICO = "com.totvs.WsConsultaSQL";

    var dataset = DatasetBuilder.newDataset();

    try{
        var servico = ServiceManager.getServiceInstance(NOME_SERVICO);
        log.info("Servico: " + servico);

        log.info("Iniciando...");

        var serviceHelper = servico.getBean();
        log.info("Helper: " + serviceHelper);    

        var instancia = servico.instantiate(CAMINHO_SERVICO);
        log.info("Instancia: " + instancia);

        var ws = instancia.getRMIwsConsultaSQL();    
        log.info("WS: " + ws);


        var processo = getValue("WKNumProces"); //Número da solicitação de processo. PROBLEMA!!!!
        log.info("Processo: " + processo); 

        //var serviceHelper = servico.getBean();

        var authService = serviceHelper.getBasicAuthenticatedClient(ws, "com.totvs.IwsConsultaSQL", 'usuario', 'senha');           

        //log.info("Params: " + "NSEQITMMOV="+fields[3]+ ";CODCOLIGADA="+fields[1] + ";IDMOV="+fields[0] + ";TIPOAPROVACAOFLUIG="+fields[2]+ ";VALORLIQUIDO="+fields[4]);    

        // Executa uma consulta previamente disponibilizada e cadastrada no RM
        var result = authService.realizarConsultaSQL("BORDERO", 1, "F", "IDFLUIG="+processo);    
        log.info("result BORDERO: " + result);

        if ((result != null) && (result.indexOf("===") != -1))
        {
            var msgErro = result.substring(0, result.indexOf("==="));

            throw msgErro;
        }

        var xmlResultados = new XML(result);  
        dataset.addColumn("IDFLUIG");
        dataset.addColumn("IDBORDERO");
        dataset.addColumn("DESC_BORDERO");
        dataset.addColumn("IDLAN");
        dataset.addColumn("FAVORECIDO");
        dataset.addColumn("NUMERODOCUMENTO");
        dataset.addColumn("DATAPREVBAIXA");
        dataset.addColumn("DATAVENCIMENTO");
        dataset.addColumn("VALORORIGINAL");
        dataset.addColumn("VALORLIQUIDO");

        for each(lan in xmlResultados.Resultado) {
            dataset.addRow(new Array(lan.IDFLUIG.toString(),
                    lan.IDBORDERO.toString(),
                    lan.DESC_BORDERO.toString(),
                    lan.IDLAN.toString(),
                    lan.FAVORECIDO.toString(),
                    lan.NUMERODOCUMENTO.toString(),
                    lan.DATAPREVBAIXA.toString(),
                    lan.DATAVENCIMENTO.toString(),
                    lan.VALORORIGINAL.toString(),
                    lan.VALORLIQUIDO.toString()));        
        }

        return dataset;
    }
    catch (e) 
    {
        if (e == null)    
            e = "Erro desconhecido, verifique o log do AppServer.";

        var mensagemErro = "Erro na comunicação com o TOTVS TBC: " + e;
        log.error(mensagemErro);

        dataset.addColumn("ERROR");
        dataset.addRow(new Array(mensagemErro));

        return dataset;
    }    
}

function ValidaCampo(campo, valor)
{
    if ((valor != null) && (valor != ""))
    {
        return "<"+campo+">"+valor+"</"+ campo + "> ";
    }
    else
        return "";
}

function parseContext(constraints)
{
    var context = "";
    if ((constraints != null) && (constraints.length > 0) && (constraints[0].getFieldName() == "RMSContext"))
        {
            context = constraints[0].getInitialValue();
        }

    return context;
}

// Transforma o conceito de constraints do Fluig para o Filtro do TBC.
function parseConstraints(constraints)
{
    var filter = "";
    for    each(con in constraints) {

        if (con.getFieldName().toUpperCase() == "RMSCONTEXT")
            continue;

        filter += "(";

        if (con.getFieldName().toUpperCase() == "RMSFILTER")
        {
            filter += con.getInitialValue();
        }
        else if (con.getConstraintType() == ConstraintType.SHOULD)
        {
            filter += "(";
            filter += con.getFieldName();
            filter += "=";
            filter += con.getInitialValue();            
            filter += ")";
            filter += " OR ";
            filter += "(";
            filter += con.getFieldName();
            filter += "=";
            filter += con.getFinalValue()();            
            filter += ")";
        }
        else
        {
            if (con.getInitialValue() == con.getFinalValue())
            {
                filter += con.getFieldName();

                if (ConstraintType.MUST == con.getConstraintType())
                {
                    filter += " = ";
                }
                else if (ConstraintType.MUST_NOT == con.getConstraintType())
                {
                    filter += " <> ";
                }

                filter += con.getInitialValue();
            }
            else
            {
                filter += con.getFieldName();
                filter += " BETWEEN ";
                filter += con.getInitialValue();
                filter += " AND ";
                filter += con.getFinalValue()
            }
        }

        filter += ")";

        filter += " AND ";
    }

    if (filter.length == 0)
    {
        filter = "1=1";        
    }
    else
        filter = filter.substring(0, filter.length-5);

    return filter;

}

Criei um script no form que apresenta o resultado em dataTable, mas o filtro não funciona

<script> 

// Preparacao de filtro para consulta
var constraint = DatasetFactory.createConstraint("IDFLUIG", processo, processo, ConstraintType.MUST);
var filtros = new Array(constraint);

// coleta dados do dataset, utlizando filtro
var datasetReturned = DatasetFactory.getDataset("RM_DS_BORDERO", null, filtros, null);
var records = datasetReturned.values;
mydata = [];
for (var index in records) {
    var record = records[index];
    mydata.push({
        Documento: record.NUMERODOCUMENTO,
        Favorecido: record.FAVORECIDO,
        ValorLiquido: record.VALORLIQUIDO,
        noResults: false
    });
}

// preenchimento da tabela do formulario 
var myTable = FLUIGC.datatable('#target', {
    dataRequest: mydata,
    renderContent: ['Documento', 'Favorecido', 'ValorLiquido'],
    header: [
        {'title': 'Número Doc.'},
        {'title': 'Favorecido'},
        {'title': 'Valor Líquido'}
    ]
}, function(err, data) {
    // DO SOMETHING (error or success)
});

</script>
compartilhar
  • Qual o nome do parâmetro na consulta SQL?

    BRUNO DYEGO CORREIA RAYOL   07 de Jun de 2019
  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 datasets filtro formulario ou faça a sua própria pergunta.