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