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