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

Responder a