Versão atual:

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>

Versão (1):

Ver a versão formatada

Filtrar Dataset no form não funciona?

Comentário

new question