Marcella,
Não seria melhor deixar a chamada ao WS em um dataset? No seu formulário você colocaria apenas o combobox (<select>
) com as tags de dataset:
<select name="estado" dataset="estadosBR" datasetkey="Sigla" datasetvalue="Estado"></select>
Se o dataset necessitar de alguma informação do formulário você pode passar como constraint e recuperar no dataset customizado. No formulário, você pode usar o novo zoom e a função reloadZoomFilterValues invés do select.
Dataset customizado consultando serviços:
function createDataset(fields, constraints, sortFields) {
// Cria o dataset
var dataset = DatasetBuilder.newDataset();
dataset.addColumn("Element Name");
dataset.addColumn("Symbol");
dataset.addColumn("Atomic Number");
dataset.addColumn("Atomic Weight");
// Conecta o servico e busca os livros
var periodicService = ServiceManager.getService('PeriodicTable');
var serviceHelper = periodicService.getBean();
var serviceLocator = periodicService.instantiate('net.webservicex.Periodictable');
var service = serviceLocator.getPeriodictableSoap();
// Invoca o serviço
try {
var result = service.getAtomicNumber("sodium"); // O termo "sodium" corresponde ao parâmetro do tipo String esperado na assinatura do método getAtomicNumber
var xml = new XML(result);
for ( var index in xml.Table) {
var element = xml.Table[index];
dataset.addRow(new Array(element.ElementName.toString(), element.Symbol.toString(), element.AtomicNumber
.toString(), element.AtomicWeight.toString()));
}
} catch (erro) {
dataset.addRow(new Array(erro));
}
return dataset;
}
Segue um exemplo de como recuperar as constraint dentro um dataset customizado:
function createDataset(fields, constraints, sortFields) {
var company;
var initialDate;
var finalDate;
if (constraints != null) {
for (var i = 0; i < constraints.length; i++) {
if (constraints[i].fieldName == "company") {
company = constraints[i].initialValue;
}
else if (constraints[i].fieldName == "date") {
initialDate = constraints[i].initialValue;
finalDate = constraints[i].finalValue;
}
}
}
}
Recuperando as constraints, basta utiliza-las nas na consulta que é feito no WS.
Fonte dos exemplos acima:
Para utilizar o novo zoom é bem fácil, você informa o dataset desejado e os campos que devem ser exibidos:
<input
type="zoom"
id = "c7_total"
name="c7_total"
data-zoom="{
'displayKey':'colleagueName',
'datasetId':'colleague',
'maximumSelectionLength':'2',
'placeholder':'Escolha o usuário',
'fields':[
{
'field':'colleagueId',
'label':'ID'
},{
'field':'colleagueName',
'label':'Nome',
'standard':'true'
},{
'field':'login',
'label':'Login'
}
]
}"
/>
Para passar algum filtro no dataset que está sendo usado no zoom, basta chamar a função abaixo:
reloadZoomFilterValues(inputName, filterValues);
Segue um exemplo do reloadZoomFilterValues: https://git.fluig.com/projects/SAMPLES/repos/projetos/browse/form-smart-filter
Assim, você não precisa executar isso no lado client, e, dependendo o caso, pode usar a sincronização de datasets para deixar o seu dataset mais rápido - pois não será necessário consultar o WS externo quando o usuário preencher este campo.
Se tiver qualquer dúvida é só avisar que complemento a resposta.
Abs,
Marcos
@Marcella, qual navegador isso ocorre? O console do navegador retorna algum erro? Poderia postar o html?
— Gabriel Carvalho 22 de Mar de 2018Chrome, no console não mostra nada. Postei o HTML.
— Marcella 22 de Mar de 2018tem o script que faz o append desses dados?
— Gabriel Carvalho 22 de Mar de 2018Coloquei o arquivo na parte que lista as empresas.
— Marcella 22 de Mar de 2018@Marcela, dentro do loop para fazer o append no id #cmbNumeroEmpresa", verifique a concatenação do atributo "data-nome", está assim: data-nome=' "+dsEmpresas.values[i]["CRETEMP"]+'/'+ .. experimente trocar essa aspas simples por aspas duplas data-nome='"+dsEmpresas.values[i]["CRETEMP"]+"/"+ .. O mesmo acontece dentro do option dsEmpresas.values[i]["CRETEMP"] + '/' +
— Gabriel Carvalho 22 de Mar de 2018Ok, vou tentar fazer isso.
— Marcella 22 de Mar de 2018