Faltou uma linha importante. Após a verificação eu guardava em uma variável a referência do componente sendo processado.
if (filterContainer.getChildAt(i) is FilterComponent){ var fc:FilterCondition = new FilterCondition(); var fcv:FilterComponente = filterContainer.getChildAt(i) as FilterComponent; 2012/4/11 Fredy Gadotti <fredy.gado...@gmail.com>: > Tipo, eu varria o container de filtros e cada "linha do filtro" era um > outro componente. > Eu sabia que na posição 1 era o campo a ser filtrado, na posição 2 > seria a condição e na posição 3 seria o valor. > > Ficava algo mais ou menos assim: > > var filters:ArrayCollection = new ArrayCollection(); > > for (var i:int = 0; i < filterContainer.numChildren; i++){ > if (filterContainer.getChildAt(i) is FilterComponent){ > var fc:FilterCondition = new FilterCondition(); > fc.fieldName = tableFields.selectedItem.fieldName; > fc.filterConstraint = fieldConstraints.selectedItem.fieldConstraint; > fc.fieldValue = fieldValues.text; // Aqui tinha uma verificação > para ver qual é o tipo do item, para adicionar como Date ou outra > coisa > filters.addItem(fc); > } > } > > > Depois no servidor, só tinha que varrer essa coleção e montar o SQL > dinamicamente igual o que eu mandei no outro email. > > > Abraço, > > Fredy. > > 2012/4/11 Re JMD <rjmdf...@gmail.com>: >> Freddy, >> >> Consegui montar a tela filtro do relatório dinamicamente, agora você poderia >> explicar melhor como vou montar a string sql sendo que os valores serão >> recuperados dos componentes que serão "ainda" criados? >> >> ta meio na gambiarra mas funciona: >> >> >> switch(filtros[i].component) >> >> { >> >> case "TextInput": >> >> var textInput:TextInput = new TextInput(); >> >> var formItem:FormItem = new FormItem (); >> >> textInput.id=filtros[i].column+ >> >> "_"+filtros[i].component >> >> formItem.addChild(textInput); >> >> formItem.label = filtros[i].column >> >> form.addChild(formItem); >> >> //window.filters.push("id":textInput.id); >> >> break; >> Em 10 de abril de 2012 14:05, Re JMD <rjmdf...@gmail.com> escreveu: >> >>> Conseguir trazer as tabelas com seus devidos campos, agora como vou montar >>> frame com os filtros para o usuário digitar u selecionar, ou seja, o >>> relatório A tem 3 filtros: >>> >>> 2 textimput: >>> -mes >>> -centro de custo >>> >>> e 1 combobox : >>> -departamento >>> >>> Como vou armazernar essa informaçãoe e depois montar um frame, um popup ou >>> um componente com esses campos. >>> >>> Em 10 de abril de 2012 10:21, Re JMD <rjmdf...@gmail.com> escreveu: >>> >>>> Freddy, >>>> >>>> Obrigado pelas dicas vou focar nesse desenvolvimento e já te falo se tive >>>> alguma dificuldade! >>>> >>>> Em 10 de abril de 2012 09:40, Fredy Gadotti <fredy.gado...@gmail.com> >>>> escreveu: >>>> >>>>> O que eu faria. ( WALL OF TEXT ) >>>>> Criaria um arquivo que listasse as tabelas que fossem passiveis de >>>>> consulta. >>>>> >>>>> <tables> >>>>> <table name="Fornecedores" /> >>>>> <table name="Produtos" /> >>>>> ... >>>>> </tables> >>>>> >>>>> Assim não poderia consultar todas as tabelas. >>>>> >>>>> Cria uma tela com um ComboBox que carregaria esse XML. >>>>> >>>>> No meu servidor, eu teria um método que eu passaria o nome da tabela e >>>>> ele retornaria a estrutura dela da seguinte forma. >>>>> Campo, Tipo, Quantidade Máxima de Caracteres, ToolTip e por ai vai. >>>>> Guardaria todas as informações dentro de um ValueObject e passaria >>>>> para o lado Client. >>>>> >>>>> Exemplo: >>>>> >>>>> public class FieldInformationVO { >>>>> public var name:String; >>>>> public var type:String; >>>>> public var toolTip:String; >>>>> // Outros campos uteis >>>>> } >>>>> >>>>> Chamaria o método criado que retornaria uma coleção de >>>>> FieldInformationVO e com base nisso teria um segundo ComboBox com os >>>>> campos da tabela que escolhi no primeiro ComboBox. >>>>> >>>>> Se eu escolher no segundo ComboBox o campo "código" ele adicionaria >>>>> dinamicamente um TextInput ao lado direito do segundo ComboBox. Onde >>>>> seria digitado o Valor para a query. E ao canto direito do TextInput ( >>>>> ou qualquer outro campo dinamico ) adicionaria um botão de "mais" que >>>>> poderia adicionar uma nova condição. >>>>> >>>>> Para fazer a query eu criaria uma classe para transportar os valores >>>>> do filtro ( poderia adicionar mais de uma condição, e não apenas uma >>>>> como você sugeriu ). >>>>> >>>>> O filtro eu faria da seguinte maneira, varreria os campos visuais do >>>>> tipo pré-definido. Pegaria o nome do campo e qual o valor que ele >>>>> recebeu e adicionaria novamente em uma coleção e enviaria para o >>>>> servidor. >>>>> >>>>> No servidor eu daria iteraria sobre essa coleção e concatenaria o >>>>> campo com o valor. >>>>> >>>>> var conditions:String = ""; >>>>> >>>>> for each ( var item:Object in filters){ >>>>> if (conditions != "") >>>>> conditions += " AND "; >>>>> else if (conditions == ""){ >>>>> conditions = " WHERE "; >>>>> } >>>>> >>>>> conditions += item.fieldName + " = " item.fieldValue; >>>>> } >>>>> >>>>> Talvez fosse necessário fazer alguma coisa para evitar SQL Injection, >>>>> mas nem se preocupe com isso agora. >>>>> >>>>> Depois diria >>>>> >>>>> var fullSQL:String = "SELECT * FROM "; >>>>> >>>>> fullSQL += filter.tableName; >>>>> >>>>> fullSQL += conditions; >>>>> >>>>> >>>>> >>>>> Fiz em ActionScript mas pode converter a ideia para sua linguagem >>>>> backend. >>>>> >>>>> >>>>> >>>>> 2012/4/10 Re JMD <rjmdf...@gmail.com>: >>>>> > Fredy, minha idéia seria fazer algo mais simples. >>>>> > Tenho esse sql: >>>>> > >>>>> > select * from desvio where cd_departamento = [TextImput.text] >>>>> > >>>>> > E com essa informação aramazenada que o primeiro campo desse sql seria >>>>> > esse >>>>> > textimput quando chamar o relatório ele deveria exibir esse pcampo >>>>> > para ser >>>>> > digitado. >>>>> > >>>>> > Ou nesse caso: >>>>> > >>>>> > select * from vendas where cd_departamento = >>>>> > [ComboboxDepartamento.selectedItem] >>>>> > A minha dúvida é essa como armazenar a informação e depois como montar >>>>> > uma >>>>> > tela com os componentes do select? >>>>> > >>>>> > Em 9 de abril de 2012 20:23, Fredy Gadotti <fredy.gado...@gmail.com> >>>>> > escreveu: >>>>> > >>>>> >> Eu expliquei o que eu fiz no primeiro post, tenta dar uma relida para >>>>> >> ver se fica alguma dúvida. >>>>> >> Se não entender só explicar o que não entendeu que tenho melhorar >>>>> >> essa >>>>> >> parte :) >>>>> >> >>>>> >> 2012/4/9 Re JMD <rjmdf...@gmail.com>: >>>>> >> > Entao fredy, para eu salvar o xml no banco preciso de saber como >>>>> >> > adcionar os >>>>> >> > componentes pela interface da aplicacao, se houvesse alguma forma >>>>> >> > do >>>>> >> > usuario >>>>> >> > conseguir montar a tela filtro do relatorio eu salvaria esse xml >>>>> >> > relacionado >>>>> >> > com o relatoririo, como ja tenho o resultado sendo trazido por um >>>>> >> > xml >>>>> >> > dinamico no qual posso montar o relatorio pelo stimulsoft so esta >>>>> >> > faltando >>>>> >> > criar um tela para geracao de filtro dinamico. >>>>> >> > >>>>> >> > Em 9 de abril de 2012 20:02, Fredy Gadotti >>>>> >> > <fredy.gado...@gmail.com> >>>>> >> > escreveu: >>>>> >> > >>>>> >> >> Pior que não. A gente tinha montado do zero a solução. >>>>> >> >> Por que não cria um campo do tipo XML no banco e salva ele do >>>>> >> >> jeito >>>>> >> >> que você montou e depois só lê ele para fazer o filtro? >>>>> >> >> >>>>> >> >> 2012/4/9 RE JMD <rjmdf...@gmail.com>: >>>>> >> >> > Fredy, >>>>> >> >> > >>>>> >> >> > Você conhece algum exemplo que tenha essa solução por você >>>>> >> >> > apresentada? Já conseguir montar o XML dinâmicamente e o que >>>>> >> >> > está >>>>> >> >> > faltando é entender como armazenar e apresentar os componentes >>>>> >> >> > filtro >>>>> >> >> > de cada relatório! >>>>> >> >> > >>>>> >> >> > On 29 mar, 13:18, Fredy Gadotti <fredy.gado...@gmail.com> wrote: >>>>> >> >> >> Precisei fazer isso em um projeto. O backend era Java, não >>>>> >> >> >> tenho >>>>> >> >> >> acesso aos fontes mas era algo mais ou menos assim, tinha um >>>>> >> >> >> método >>>>> >> >> >> que retornava a estrutura da tabela que queria fazer o >>>>> >> >> >> relatório. >>>>> >> >> >> Com >>>>> >> >> >> a estrutura em mãos, populava um ComboBox com os campos que tem >>>>> >> >> >> a >>>>> >> >> >> tabela. Sabendo os tipos, era possível adicionar dinamicamente >>>>> >> >> >> um >>>>> >> >> >> editor equivalente ao tipo do dado da tabela, se fosse Data um >>>>> >> >> >> DateField, se fosse String um TextInput se fosse Integer um >>>>> >> >> >> TextInput >>>>> >> >> >> com restrict e por ai vai; >>>>> >> >> >> E mais um que indicava qual o tipo de filtro queria fazer, >>>>> >> >> >> maior, >>>>> >> >> >> menor, igualdade ou diferença. >>>>> >> >> >> >>>>> >> >> >> Exemplo do Filtro: >>>>> >> >> >> >>>>> >> >> >> Campo: [ ComboBox de Campos] | [ ComboBox de Condições ] | [ >>>>> >> >> >> Campo >>>>> >> >> >> dinâmico conforme tipo de dado ] [ Botão para adicionar nova >>>>> >> >> >> condição >>>>> >> >> >> ] >>>>> >> >> >> >>>>> >> >> >> Ao clicar no botão, adicionava uma nova linha onde podia >>>>> >> >> >> escolher >>>>> >> >> >> outras restrições. >>>>> >> >> >> >>>>> >> >> >> Ao clicar no botão aplicar, varria o filtro e criava uma >>>>> >> >> >> coleção >>>>> >> >> >> para >>>>> >> >> >> enviar ao server para criar dinamicamente o SQL que iria fazer >>>>> >> >> >> a >>>>> >> >> >> filtragem. >>>>> >> >> >> >>>>> >> >> >> Espero ter dado o caminho das pedras. >>>>> >> >> >> >>>>> >> >> >> Abraço, >>>>> >> >> >> >>>>> >> >> >> Fredy. >>>>> >> >> >> >>>>> >> >> >> 2012/3/29 Re JMD <rjmdf...@gmail.com>: >>>>> >> >> >> >>>>> >> >> >> >>>>> >> >> >> >>>>> >> >> >> > Pessoal, >>>>> >> >> >> >>>>> >> >> >> > Estou querendo desenvolver uma opção na minha aplicação para >>>>> >> >> >> > o >>>>> >> >> >> > usuário >>>>> >> >> >> > conseguir criar relatórios dinamicamente. >>>>> >> >> >> > O design do relatório vou fazer via stimulsoft passando os >>>>> >> >> >> > parâmetros(filtro) da aplicação para o relatório via URL. >>>>> >> >> >> >>>>> >> >> >> > - No cadastro do relatório o usuário informa quais >>>>> >> >> >> > campos(filtros) >>>>> >> >> >> > o >>>>> >> >> >> > relatório vai ter e isso ficará armazenado no banco. >>>>> >> >> >> >>>>> >> >> >> > - Quando o usuário chamar o relatório o flex vai montar o >>>>> >> >> >> > pop-up >>>>> >> >> >> > com >>>>> >> >> >> > os >>>>> >> >> >> > filtros de acordo com o cadastro do relatório. >>>>> >> >> >> >>>>> >> >> >> > Tem como fazer isso? Existe algum exemplo? >>>>> >> >> >> >>>>> >> >> >> > -- >>>>> >> >> >> > Você recebeu esta mensagem porque está inscrito na lista >>>>> >> >> >> > "flexdev" >>>>> >> >> >> > Para enviar uma mensagem, envie um e-mail para >>>>> >> >> >> > flexdev@googlegroups.com >>>>> >> >> >> > Para sair da lista, envie um email em branco para >>>>> >> >> >> > flexdev-unsubscr...@googlegroups.com >>>>> >> >> >> > Mais opções estão disponíveis >>>>> >> >> >> > emhttp://groups.google.com/group/flexdev- Ocultar texto das >>>>> >> >> >> > mensagens >>>>> >> >> >> > anteriores - >>>>> >> >> >> >>>>> >> >> >> - Mostrar texto das mensagens anteriores - >>>>> >> >> > >>>>> >> >> > -- >>>>> >> >> > Você recebeu esta mensagem porque está inscrito na lista >>>>> >> >> > "flexdev" >>>>> >> >> > Para enviar uma mensagem, envie um e-mail para >>>>> >> >> > flexdev@googlegroups.com >>>>> >> >> > Para sair da lista, envie um email em branco para >>>>> >> >> > flexdev-unsubscr...@googlegroups.com >>>>> >> >> > Mais opções estão disponíveis em >>>>> >> >> > http://groups.google.com/group/flexdev >>>>> >> >> >>>>> >> >> -- >>>>> >> >> Você recebeu esta mensagem porque está inscrito na lista "flexdev" >>>>> >> >> Para enviar uma mensagem, envie um e-mail para >>>>> >> >> flexdev@googlegroups.com >>>>> >> >> Para sair da lista, envie um email em branco para >>>>> >> >> flexdev-unsubscr...@googlegroups.com >>>>> >> >> Mais opções estão disponíveis em >>>>> >> >> http://groups.google.com/group/flexdev >>>>> >> > >>>>> >> > >>>>> >> > -- >>>>> >> > Você recebeu esta mensagem porque está inscrito na lista "flexdev" >>>>> >> > Para enviar uma mensagem, envie um e-mail para >>>>> >> > flexdev@googlegroups.com >>>>> >> > Para sair da lista, envie um email em branco para >>>>> >> > flexdev-unsubscr...@googlegroups.com >>>>> >> > Mais opções estão disponíveis em >>>>> >> > http://groups.google.com/group/flexdev >>>>> >> >>>>> >> -- >>>>> >> Você recebeu esta mensagem porque está inscrito na lista "flexdev" >>>>> >> Para enviar uma mensagem, envie um e-mail para >>>>> >> flexdev@googlegroups.com >>>>> >> Para sair da lista, envie um email em branco para >>>>> >> flexdev-unsubscr...@googlegroups.com >>>>> >> Mais opções estão disponíveis em >>>>> >> http://groups.google.com/group/flexdev >>>>> > >>>>> > >>>>> > -- >>>>> > Você recebeu esta mensagem porque está inscrito na lista "flexdev" >>>>> > Para enviar uma mensagem, envie um e-mail para >>>>> > flexdev@googlegroups.com >>>>> > Para sair da lista, envie um email em branco para >>>>> > flexdev-unsubscr...@googlegroups.com >>>>> > Mais opções estão disponíveis em >>>>> > http://groups.google.com/group/flexdev >>>>> >>>>> -- >>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev" >>>>> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com >>>>> Para sair da lista, envie um email em branco para >>>>> flexdev-unsubscr...@googlegroups.com >>>>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev >>>> >>>> >>> >> >> -- >> Você recebeu esta mensagem porque está inscrito na lista "flexdev" >> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com >> Para sair da lista, envie um email em branco para >> flexdev-unsubscr...@googlegroups.com >> Mais opções estão disponíveis em http://groups.google.com/group/flexdev -- Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com Para sair da lista, envie um email em branco para flexdev-unsubscr...@googlegroups.com Mais opções estão disponíveis em http://groups.google.com/group/flexdev