Quero fazer um campo zoom que retorna em outro campo zoom ,atravez de um dataset customizado .
Quero fazer um campo zoom que retorna em outro campo zoom ,atravez de um dataset customizado .
Bom dia, @Ariel.
Existe uma função do Fluig que faz esse procedimento. É o setSelectedZoomItem.
Segue código para exemplificar:
function setSelectedZoomItem(selectedItem) {
if (selectedItem.inputId.indexOf("idDoZoomCEP") != -1) {
document.getElementById('idDoCampoQueSeraPreenchido').value = selectedItem['ColunaCorrespondenteNoDataset'];
}
}
EXEMPLO SOLICITADO PARA MELHOR ENTENDIMENTO DO PROCEDIMENTO INTEIRO:
Primeiro código que irei disponibilizar é o da criação do dataset customizado. Ele pode ser populado manualmente (como no exemplo que irei postar), ou pode ser criado por uma consulta ao seu BD.
DATASET:
function defineStructure() {
}
function onSync(lastSyncDate) {
}
function createDataset(fields, constraints, sortFields) {
var ds = DatasetBuilder.newDataset();
ds.addColumn("categoriaProduto");
ds.addColumn("nomeProduto");
ds.addColumn("pesoProduto");
ds.addColumn("valorProduto");
ds.addColumn("qtdProduto");
ds.addRow(new Array("comida", "Arroz Namorado", "5Kg", "R$12,39", "50"));
ds.addRow(new Array("comida", "Feijão Broto Legal", "1Kg", "R$5,29", "70"));
ds.addRow(new Array("comida", "Ervilha Quero", "200g", "R$1,65", "50"));
ds.addRow(new Array("limpeza", "Amaciante Comfort", "500ml", "R$16,24", "30"));
ds.addRow(new Array("limpeza", "Limpa Piso Destac", "750ml", "R$6,73", "35"));
ds.addRow(new Array("limpeza", "Limpa Vidro Vidrex Veja", "500ml", "R$6,10", "15"));
return ds;
}
function onMobileSync(user) {
}
Agora é necessário exportar o dataset e salvar seu nome para usar no zoom.
No seu HTML ficaria da seguinte forma: Nesse caso a pessoa vai selecionar o produto no zoom 1 e no campo 2 será preenchido automaticamente o valor do produto.
HTML:
<input
type="zoom"
id = "produto"
name="produto"
data-zoom="{
'displayKey':'nomeProduto',
'datasetId':'dsProduto',
'placeholder':'Escolha o produto',
'fields':[
{
'field':'nomeProduto',
'label':'Nome'
},{
'field':'pesoProduto',
'label':'Peso'
},{
'field':'valorProduto',
'label':'Valor',
'standard':true
}
]
}"
/>
<!-- displayKey: serve para você informar qual informação ficará amostra no campo, depois que o usuário selecionar alguma das opções no zoom -->
<!-- datasetId: nome do dataset customizado, ou interno, que você buscará as informações. -->
<!-- A tag fields serve para você selecionar quais campos irão aparecer quando o usuário abrir as opções do Zoom para escolher, dessa forma você garante mais informações para o usuário e ele não correr o risco de selecionar o item errado. Dentro de fields temos: 'field' que será a coluna do dataset que o sistema vai buscar a informação para apresentar ao usuário e 'label' que é a identificação que aparecerá para o usuário para ele saber o que é aquela informação.-->
<input
type="zoom"
id = "peso"
name="peso"
data-zoom="{
'displayKey':'pesoProduto',
'datasetId':'dsProduto',
'placeholder':'Escolha o produto',
'fields':[
{
'field':'pesoProduto',
'label':'Peso'
},{
'field':'nomeProduto',
'label':'Nome'
},{
'field':'valorProduto',
'label':'Valor',
'standard':true
}
]
}"
/>
<input
type="zoom"
id = "valor"
name="valor"
data-zoom="{
'displayKey':'valorProduto',
'datasetId':'dsProduto',
'placeholder':'Escolha o produto',
'fields':[
{
'field':'valorProduto',
'label':'Valor',
},{
'field':'pesoProduto',
'label':'Peso'
},{
'field':'nomeProduto',
'label':'Nome'
'standard':true
}
]
}"
/>
Agora implementaremos o setSelectedZoomItem para o exemplo acima:
function setSelectedZoomItem(selectedItem) {
var PRODUTO = "produto";
var PESO = "peso";
var VALOR = "valor";
var FIELD = selectedItem.inputId;
if(selectedItem.inputId == PRODUTO){
setZoomData("peso", selectedItem["pesoProduto"]); //"id do zoom que receberá o valor conforme selecionado", selectedItem["em qual coluna ele vai buscar o valor que será preenchido no id informado"];
setZoomData("valor", selectedItem["valorProduto"]);
}else if(selectedItem.inputId == PESO){
setZoomData("produto", selectedItem["nomeProduto"]);
setZoomData("valor", selectedItem["valorProduto"]);
}else if(selectedItem.inputId == VALOR){
setZoomData("produto", selectedItem["nomeProduto"]);
setZoomData("peso", selectedItem["pesoProduto"]);
}
}
Final do exemplo.
PARA VOCÊ FILTRAR O ZOOM2:
function setSelectedZoomItem(selectedItem) {
if(selectedItem.inputId == "id do campo"){
reloadZoomFilterValues("zoom2", "zoom1" + selectedItem["ColunaFilial"]);
}
}
Espero ter ajudado. Caso a resposta tenha solucionado seu problema, não esqueça de selecionar como "RESPOSTA" para ajudar as demais pessoas que possam vir a ter esse problema no futuro.
Qualquer outra dúvida basta perguntar que respondo o quanto antes.
Atenciosamente, Leonardo Fioretti.
Olá bom dia Leonardo, eu estou INICIANDO no fluig agora, poderia fazer um exemplo completo ? Como ficaria o HTML com os inputs, o ZOOM, dentro do HTML e javascript , pode até usar o datadset do proprio fluig o de nomes, algo parecido. Deste já Agraçedo
— Ariel 15 de Mar de 2019Claro, me dá um minuto que já posto para você a resposta atualizada.
— Leonardo Fioretti 15 de Mar de 2019Obrigado, pela avaliação positiva, Ariel. Bons estudos.
— Leonardo Fioretti 15 de Mar de 2019Funcionou ficou ótimo, porem eu tenho [Dataset de Filial] e outro de [Contratos] crei um dataset customizado que já esta fazendo essa ligação, porem uma afilia tem vários contratos, como eu faço para Selecionar no ZOOM, [FILIAL A] e no outro ZOOM , aparecer só os contratos da quela obra, Exempo: 1-CAMPO ZOOM ( FILIAL A)
2-CAMPO ZOOM(Contrato) (Iptu) (Agua) (Mercado) (alugel) Para pessoa selecionar um Contrato da quela Filia,
— Ariel 15 de Mar de 2019Funcionou ficou ótimo, porem eu tenho [Dataset de Filial] e outro de [Contratos] crei um dataset customizado que já esta fazendo essa ligação, porem uma afilia tem vários contratos, como eu faço para Selecionar no ZOOM, [FILIAL A] e no outro ZOOM , aparecer só os contratos da quela obra, Exempo: 1-CAMPO ZOOM ( FILIAL A)
2-CAMPO ZOOM(Contrato) (Iptu) (Agua) (Mercado) (alugel) Para pessoa selecionar um Contrato da quela Filia,
ae no primeiro Zoom eu iria coloca FILIAL CAMPO LARGO No outro ZOOM iria Filtra todos os OBJCTS, só da afilial campo largo
Ariel, nesse caso você teria que utilizar o reloadZoomFilterValues(inputName, filterValues);
— Leonardo Fioretti 15 de Mar de 2019Poderia me dá um exemplo por favor ? Igual o excelente Exemplo que vc fez acima
— Ariel 15 de Mar de 2019Se você tiver algo parecido no Git , me ajudaria muito , Me passaram esse Exemplo. é isso mesmo que eu quero : https://git.fluig.com/projects/SAMPLES/repos/projetos/browse/form-smart-zoom , Porem ele ussou "colleagueName ," colleagueEmail" , "nome", "email" ,e na hora que fui fazer o meu, não conseguir por causa disso, teria como você fazer um exemplo ? igual esse porem com um datasetCustomizado ? DESTE já GRATO
— Ariel 15 de Mar de 2019Vou editar meu exemplo e adaptar para o que vc precisa.
— Leonardo Fioretti 15 de Mar de 2019Mas nesse caso não é disso que você precisa, você precisa filtrar o zoom2 de acordo com o zoom1, não setar o valor. Para isso vou adicionar mais um trecho de código.
— Leonardo Fioretti 15 de Mar de 2019