Componente "zoom" e alto volume de dados

Olá,

Em um formulário mobile(offline) utilizamos um componente "zoom" alimentado através dataset sincronizado diariamente pelo Fluig com cerca de 24000 registros.

Javascript:


function defineStructure() {

    addColumn("CHAPARESPABONO", DatasetFieldType.TEXT);
    addColumn("NOMERESPABONO", DatasetFieldType.TEXT);
    setKey([ "CHAPARESPABONO" ]);
    addIndex([ "CHAPARESPABONO" ]);
}

function onSync(lastSyncDate) {

    var dataset = DatasetBuilder.newDataset();

    // Consulta Dataset Sincronizado
    var constraint = new Array();        
    constraint.push(DatasetFactory.createConstraint("SYNC_FLUIG_0002_00006", lastSyncDate, lastSyncDate, ConstraintType.MUST));

    var dataset = DatasetFactory.getDataset("FLUIG.0002.00006", null, constraint, null);

    // Valida se retornou resultado a consulta
    if (dataset != null && dataset.values != null && dataset.values.length > 0) {
        var records = dataset.values;
        for ( var index in records ) {
            var record = records[index];
            dataset.addRow(new Array(record.CODENTIDADE, 
                                     record.NOMEFANTENTIDADE));
        }
        return dataset;
    }
}

function onMobileSync(user) {
}

function createDataset(fields, constraints, sortFields) {

     var NOME_SERVICO = "wsConsultaSQL"; // Nome do serviço criado no Fluig Studio  
     var CAMINHO_SERVICO = "com.totvs.WsConsultaSQL"; // Caminho do serviço  
     var dataset = DatasetBuilder.newDataset();  

     try {  
         // Obtem a instancia do serviço   
         var servico = ServiceManager.getServiceInstance(NOME_SERVICO);          
         // Inicializa o serviço  
         var instancia = servico.instantiate(CAMINHO_SERVICO);
         // Obtem o WebService para consumo  
         var ws = instancia.getRMIwsConsultaSQL();            
         var serviceHelper = servico.getBean();  
         // Autenticação no serviço  
         var authService = serviceHelper.getBasicAuthenticatedClient(ws, "com.totvs.IwsConsultaSQL", 'SUPERUSER', 'ABOBRINHA:D');  

         //Criação das colunas dataset de retorno
         var COLUNAS = new Array("CHAPARESPABONO","NOMERESPABONO"); 
         for (var i = 0; i < COLUNAS.length; i++ ) {
             dataset.addColumn(COLUNAS[i]);
         }

         var result = authService.realizarConsultaSQL("FLUIG.0002.00006", 0, "G", "");
         log.info("!!! INFO !!!");  
         log.info(result);  
         if ((result != null) && (result.indexOf("===") != -1)) {  
             var msgErro = result.substring(0, result.indexOf("==="));  
             log.error("Erro: " + msgErro);  
             throw "Erro: " + msgErro;
         }  

         // Insere o resultado em um objeto XML para melhor manipulação dos dados  
         var xmlResultados = new XML(result);    
         log.info(xmlResultados);

         for(var i = 0; i < xmlResultados.Resultado.length(); i++)   
         { 
             dataset.addRow(new Array(   
                     xmlResultados.Resultado[i].CHAPARESPABONO.toString(),   
                     xmlResultados.Resultado[i].NOMERESPABONO.toString()))
         }
     }

     catch (e) {  
          if (e == null)  
              e = "Erro desconhecido; verifique o log do AppServer";  
          var mensagemErro = "Erro na comunicação com o app (linha: " + e.lineNumber + "): " + e;  
          log.error(mensagemErro);  
          log.info(mensagemErro);  
          dataset.addColumn("ERROR");  
          dataset.addColumn("MESSAGE_ERROR");  
          dataset.addRow(new Array(-1, mensagemErro));  
     }     

     return dataset;  
}

HTML:


<div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12">
        <label for="DESCRICAOCID">CID (Classificação Internacional de Doenças)</label>
        <span class="required text-danger"><strong> *</strong></span>
        <div class="input-group"><input type="zoom" class="form-control" id="DESCRICAOCID" 
                 name="DESCRICAOCID" dataset="dsFLUIG000200004" datasetvalue="DESCRICAOCID" zoomvalue="DESCRICAOCID"                                 
                 data-zoom="{'displayKey':'DESCRICAOCID',
                             'datasetId':'dsFLUIG000200004', 
                             'maximumSelectionLength':'1', 
                             'resultLimit':'99999',
                             'placeholder':'Escolha a classificação da doença',
                 'fields':[{'field':'CID',
                            'label':'CID',                                                                                        
                            'visible':'false'
                           },{'field':'DESCRICAOCID',
                            'label':'DESCRICAOCID',                                                                                        
                            'standard':'true',
                            'visible':'true'}]}">                                                                                                                 
                      <div class="input-group-addon zoom-preview">
                          <span 
                            class="fluigicon fluigicon-zoom-in">
                          </span>
                      </div>
                      <input type="hidden" name="CID" id="CID">
        </div>
    </div>
</div>

O componente "zoom" utiliza uma propriedade "resultLimit" onde por padrão retorna 300 registros. No código HTML está difinido "99999", entretanto no ato da pesquisa fica demorado o retorno do dados.

Existe alguma técnica contornar tal situação?

É importante observar que se definido o padrão (300 registros) os demais registro não serão exibidos na pesquisa. Preciso que todos os registros estejam disponíveis.

Obrigado, []s