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

Responder a