Eu pensei fazer algo mais simples. Não sei se vai dar certo. Quando eu fosse montar o relatorio na string eu cololocaria uma referência do filtro dessa forma:
Relatório 1: sql: select * from desvio where cd_depto= "+referencia_do_filtro_texto.text+" and cd_area = "+referencia_do_filtro_combobox.selectedItem.cd_area+" Armazeno o relatório e os campos (referencia_do_filtro) com os nomes corretos e seus metodos.(.text ou selectdItem). E quando for montar a tela filtro para gerar o relatório eu trago o select sql em uma string e o filtros em um array. Como os filtros terão o id igual ao que armazenei junto ao sql os campos "+referencia_do_filtro_texto.text+" e "+referencia_do_filtro_combobox.selectedItem.cd_area+" deveriam ter valor igual ao digitado no textImput ou selecionado no combobox. Agora não sei se é possivel fazer isso com o select armazenado m em uma string! E aí você acha que da certo? Em 11 de abril de 2012 11:18, Fredy Gadotti <[email protected]>escreveu: > 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 <[email protected]>: > > 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 <[email protected]>: > >> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> > >>>> 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 <[email protected]>: > >>>>> > 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 < > [email protected]> > >>>>> > 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 <[email protected]>: > >>>>> >> > 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 > >>>>> >> > <[email protected]> > >>>>> >> > 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 <[email protected]>: > >>>>> >> >> > 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 <[email protected]> > 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 <[email protected]>: > >>>>> >> >> >> > >>>>> >> >> >> > >>>>> >> >> >> > >>>>> >> >> >> > 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 > >>>>> >> >> >> > [email protected] > >>>>> >> >> >> > Para sair da lista, envie um email em branco para > >>>>> >> >> >> > [email protected] > >>>>> >> >> >> > 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 > >>>>> >> >> > [email protected] > >>>>> >> >> > Para sair da lista, envie um email em branco para > >>>>> >> >> > [email protected] > >>>>> >> >> > 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 > >>>>> >> >> [email protected] > >>>>> >> >> Para sair da lista, envie um email em branco para > >>>>> >> >> [email protected] > >>>>> >> >> 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 > >>>>> >> > [email protected] > >>>>> >> > Para sair da lista, envie um email em branco para > >>>>> >> > [email protected] > >>>>> >> > 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 > >>>>> >> [email protected] > >>>>> >> Para sair da lista, envie um email em branco para > >>>>> >> [email protected] > >>>>> >> 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 > >>>>> > [email protected] > >>>>> > Para sair da lista, envie um email em branco para > >>>>> > [email protected] > >>>>> > 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 > [email protected] > >>>>> Para sair da lista, envie um email em branco para > >>>>> [email protected] > >>>>> 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 [email protected] > >> Para sair da lista, envie um email em branco para > >> [email protected] > >> 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 [email protected] > Para sair da lista, envie um email em branco para > [email protected] > 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 [email protected] Para sair da lista, envie um email em branco para [email protected] Mais opções estão disponíveis em http://groups.google.com/group/flexdev
