Pesquisa dupla no campo ZOOM

Caros, Como realizar uma pesquisa de duas informações que estão no fiedlname do zoom. Por exemplo num campo que me retorna uma cadastro de cliente eu quero digitar tanto nome como cpf no zoom me retornar a pesquisa.

Campo zoom do Formulário:


  <input
             type="zoom" 
             id = "Id_fcfo_nomefantasia"
             name="nm_fcfo_nomefantasia"
             data-zoom="{
                    'displayKey':'NOME',
                    'datasetId':'ds_totvs_fcfo_sgc',
                    'fields':[
                        {
                            'field':'CODCFO',
                            'label':'Código'
                        },{
                            'field':'NOME',
                            'label':'Nome',
                            'search':'true'
                        },{
                            'field':'CGCCFO',
                            'label':'CPF/CNPJ',
                            'standard':'true',
                            'search':'true'
                        },{
                            'field':'PESSOAFISOUJUR',
                            'label':'Tipo',
                            'standard':'true'
                        }
                    ]
             }"  />

Dataset do Campo zoom acima:


/***********************************************************************************************
* @Nome            ds_totvs_fcfo_sgc
* @author         Italo Ribeiro
* @data           04/07/2017
* @Descricao    Listar os Fornecedores cadastrados consulta SQL RM
* @Ambiente     Homologacao
***********************************************************************************************/

function createDataset(fields, constraints, sortFields) {
    log.info("X-10");
    var INTEGRADOR = "webservice.FLUIG"; log.info("X-11");
    var SENHA = "fluig@2017"; log.info("X-12");
    var NOME_SERVICO = "wsconsultasql"; log.info("X-13");
    var CAMINHO_SERVICO = "com.totvs.WsConsultaSQL"; log.info("X-14");
    var COLUNAS = new Array("CODCFO","NOME","CGCCFO","PESSOAFISOUJUR"); log.info("X-15");

    var dataset = DatasetBuilder.newDataset(); log.info("X-17");

    for (var i=0; i < COLUNAS.length; i++ ) { 
    log.info("X-21");
        dataset.addColumn(COLUNAS[i]);
    }
    log.info("X-24");

    var filtroNome;
    var filtroId;


     if (constraints != null) {

         for (var i = 0; i < constraints.length; i++) {

         if (constraints[i].fieldName == "NOME") {

         filtroNome += " AND NOME like UPPER('%" +constraints[i].initialValue + "%')";

             } else if (constraints[i].fieldName == "CGCCFO") { 

         filtroId += " AND CGCCFO like UPPER('%" +constraints[i].initialValue + "%')";

           }


         }

     }

     var CREDENCIAMENTO = "1";
     var PARAMS="CREDENCIAMENTO="+CREDENCIAMENTO;

     log.info("X-38");

    var servico = ServiceManager.getService(NOME_SERVICO);
    var instancia = servico.instantiate(CAMINHO_SERVICO);
    var ws = instancia.getRMIwsConsultaSQL();
    var serviceHelper = servico.getBean();
    var authService = serviceHelper.getBasicAuthenticatedClient(ws, "com.totvs.IwsConsultaSQL",INTEGRADOR, SENHA);
    var result = authService.realizarConsultaSQL("TOTVS.F006.03", 1, "F", PARAMS);
    var JSONObj = org.json.XML.toJSONObject(result);
    var dados = JSONObj.get("NewDataSet").get("Resultado");
    log.info("X-48");

    for (var i = 0; i < dados.length(); i++) {
        var registro = dados.get(i);
        dataset.addRow(new Array(

                registro.get("CODCFO"),
                registro.get("NOME"),
                registro.get("CGCCFO"),
                registro.get("PESSOAFISOUJUR")




                           )
        );

    }
    log.info("X-61");
    return dataset;
}

Boa tarde Italo, creio que teria que adicionar o valor das constraints na sua variável PARAMS, só não sei como que ficaria isso para utilizar como LIKE na consulta, se seria só colocar o % mesmo tipo var PARAMS=“CREDENCIAMENTO=”+CREDENCIAMENTO+“;NOME=%”+NOME+“%”;.

Diogo, não preciso passar, eu fixei o valor, é pra ficar assim mesmo, somente credenciado do tipo 1. Eu preciso entender como fazer com que se eu digitar tanto CPF ou Nome ele retorna na pesquisa. Ja vi o filtervalues mas nao funcionou.

Acho que o zoom interno só permite buscar em um campo que geralmente é o que você informa ali no displayKey no seu caso é o NOME, talvez com o zoom externo que Felipe citou ali na resposta você consiga utilizar mais de um campo.

@Italo,

Eu normalmente crio no webservice um campo que esteja concatenado os campos que desejo consultar, no seu caso eu criaria um campo CPF_NOME e concatenaria o CPF e Nome nesse campo.

Boa sugestão Gabriel. Eu havia pensando nisso. Mas eu queria de fato saber se no zoom por padrão não dar pra ter no searchfield a pesquisa mais de um ou somente no zoom externo é possivel fazer isso, porque o cliente quer usar o zoom o zoom externo com datatable eu já tenho. Eu queria usar de fato o zoom com multipla pesquisa.

Nessa mesma linha, se você vai montar o filtro dentro do dataset, podes procurar o conteudo da constraint NOME tanto no NOME quanto no CGCCFO. Mas essas opções só funcionariam se você não for sincronizar e tornar o dataset offline pois você não teria mais controle sobre o filtro que seria feito direto na tabela do dataset.

Pode ser também, tô começando a achar que é melhor eu usar o componente datatable.net e criar meus próprios filtros com zoom externo.

Bom dia. Já tive esse problema no passado, e realmente não tem alternativa para pesquisar mais que 1 campo no zoom interno, é uma limitação. Durante um tempo usei a mesma solução paleativa que o Gabriel sugeriu e funciona bem, porém, preferi desistir de usar esse tipo de zoom e passei a usar somente zoom externo.