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