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

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!

0 resposta

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