Rafael,
.'.
Coloque um breakpoint na linha 216 e veja como está a estrutura da variavel
item.
O que o erro está informando é uma tentativa de acesso a uma propriedade
não definida.
return item['tipo_reuniao']['tr_nome'];
TypeError: Error #1010: A term is undefined and has no properties.
at br.com.cauirs.maconaria.view.screen::CadastroReuniao/getTipoReuniao
Ou não existe a propriedade 'tipo_reuniao' ou 'tr_nome'. Veja pelo
debug como está
a estrutura do objeto item.
TFA
--
Marco Catunda
2009/1/29 RafaelViana <[email protected]>:
>
> Não consegui aqui :/
>
> a coluna no data grid ta assim:
>
> <mx:DataGridColumn headerText="Tipo" dataField="tipoReuniao"
> width="150"
>
> labelFunction="getTipoReuniao"/>
>
> label function:
>
> public function getTipoReuniao(item:Object,
> column:DataGridColumn):String{
> return item['tipo_reuniao']['tr_nome'];
> }
>
> A pesquisa está assim:
>
> @SuppressWarnings("unchecked")
> public List<Reuniao> find(Date dataInicial, Date dataFinal,
> TipoReuniao tipo)
> throws Exception {
> return getHibernateTemplate().find("from Reuniao r INNER JOIN
> r.tipoReuniao tr " +
> "WHERE tr.tr_codigo = ? AND r.reun_data
> BETWEEN ? AND ? ORDER BY
> reun_data ASC",
> new Object[] {tipo.getTr_codigo(),
> dataInicial, dataFinal});
> }
>
> Ela está funcionando PERFEITAMENTE, pois, quando debugo ele me
> preenche o array listReuniao com os dados certos.So a única diferença
> que percebi é a seguinte.EX:
>
> A pesquisa no banco retorna 5 resultados
>
> Consulta sem Inner Join:
> *Dentro do Array 5 objetos Reuniao (utilizo apenas o dateField no
> Datagrid ele apresenta corretamente)
> *Para preencher os campos da tabela Reuniao no datagrid só preenchia
> com o nome do campo. Ex: reun_data
> *Para preencher o nome do tipo da reunião, usava uma labelFunction.
> Ex: return tipoReuniao.tr_nome;
>
> Consulta com Inner Join:
> Dentro do Array tem 5 Arrays cada array tem 2 objetos um objeto
> Reuniao e um objeto TipoReuniao
> *Não sei como preencher nem os campos da tabela Reuniao nem os campos
> da tabela TipoReuniao
>
> Quando faço a pesquisa com inner join me retorna esse erro:
>
> TypeError: Error #1010: A term is undefined and has no properties.
> at br.com.cauirs.maconaria.view.screen::CadastroReuniao/getTipoReuniao
> ()[F:\Projetos\SisMaconaria\src_flex\br\com\cauirs\maconaria\view
> \screen\CadastroReuniao.mxml:216]
> at mx.controls.dataGridClasses::DataGridColumn/itemToLabel()[C:
> \autobuild\3.2.0\frameworks\projects\framework\src\mx\controls
> \dataGridClasses\DataGridColumn.as:1410]
> at mx.controls.dataGridClasses::DataGridBase/makeListData()[C:
> \autobuild\3.2.0\frameworks\projects\framework\src\mx\controls
> \dataGridClasses\DataGridBase.as:1328]
> at mx.controls::DataGrid/http://www.adobe.com/2006/flex/mx/
> internal::setupRendererFromData()[C:\autobuild\3.2.0\frameworks
> \projects\framework\src\mx\controls\DataGrid.as:1645]
> at mx.controls::DataGrid/commitProperties()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\controls\DataGrid.as:1608]
> at mx.core::UIComponent/validateProperties()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:5807]
> at mx.managers::LayoutManager/validateProperties()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:
> 539]
> at mx.managers::LayoutManager/doPhasedInstantiation()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:
> 689]
> at Function/http://adobe.com/AS3/2006/builtin::apply()
> at mx.core::UIComponent/callLaterDispatcher2()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8628]
> at mx.core::UIComponent/callLaterDispatcher()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8568]
>
> A linha 216 do datagrid é a seguinte:
>
> public function getTipoReuniao(item:Object,
> column:DataGridColumn):String{
> return item['tipo_reuniao']['tr_nome'];
> //linha 216
> }
>
>
> A minha duvida acho que esta bem explicada, e parece ter uma simples
> resolução.
>
> Raciocinando um pouco:
>
> *O primeiro array contem 5 arrays
> *Cada um desses arrays tem 2 objetos
>
> Na função estou referenciado assim: return item['tipo_reuniao']
> ['tr_nome'];
> Ou seja, ja acessa diretamente ??Tem algo errado...
>
> Precisaria primeiro acessar a array depois o outro array e depois só
> pegar o objeto.Só que mesmo debugando vi que esses arrays não tem id
> ou um nome que eu possa usar para referencia-los, então como acessá-
> los?
>
> Resumindo: Preciso saber como acessar esses objetos que estão dentro
> desses arrays sem nomes, ou então, qual outra maneira posso realizar
> as consultas que utilizem duas ou mais tabelas?
> On 22 jan, 21:09, RafaelViana <[email protected]> wrote:
>> Eu conheco a labelFunction, uso ela para formatar as datas.Mas não
>> tinha pensado nela nesse caso...Vou dar uma olhada, mas não sei com
>> qual nome me refiro a essa array...
>>
>> On 22 jan, 19:03, Marco Catunda <[email protected]> wrote:
>>
>>
>>
>> > Rafael,
>>
>> > De uma olhada na propriedade 'labelFunction' do DataGrid
>>
>> >http://livedocs.adobe.com/flex/2/langref/mx/controls/listClasses/List...
>>
>> > Com essa propriedade você poderá criar uma função e trabalhar com o
>> > dado do jeito que vc
>> > quiser.
>>
>> > Para o seu problema seria algo semelhante com isso:
>>
>> > public function labelFunction(item:Object, column:DataGridColumn):String {
>> > return item['InnerJoinTable']['Field'];
>>
>> > }
>>
>> > --
>> > Marco Catunda
>>
>> > 2009/1/21 RafaelViana <[email protected]>:
>>
>> > > Quando a pesquisa não utiliza inner join, o array é preenchido com
>> > > objetos do tipo Reuniao, quando a pesquisa utiliza inner join ele é
>> > > preenchido com Arrays e dentro de cada array tem um objeto Reuniao e
>> > > um objeto TipoReuniao
>>
>> > > Pesquisa com Inner Join:
>>
>> > > @SuppressWarnings("unchecked")
>> > > public List<Lancamento> findByDateAndUser(Date dataInicial,
>> > > Date dataFinal, User user) throws Exception {
>> > > return getHibernateTemplate().find("from Lancamento l
>> > > INNER JOIN
>> > > l.user as i WHERE i.user_codigo = ? AND l.lanc_data BETWEEN ? AND ?" +
>> > > "ORDER BY lanc_data ASC", new Object[]
>> > > {user.getUser_codigo(),
>> > > dataInicial, dataFinal});
>> > > }
>>
>> > > Pesquisa sem Inner Join:
>>
>> > > @SuppressWarnings("unchecked")
>> > > public List<Lancamento> findByDate(Date dataInicial, Date
>> > > dataFinal)
>> > > {
>> > > return getHibernateTemplate().find("from Lancamento l
>> > > WHERE
>> > > l.lanc_data BETWEEN ? AND ?" +
>> > > "ORDER BY lanc_data ASC", new Object[]
>> > > {dataInicial, dataFinal});
>> > > }
>>
>> > > No DataGrid quando as pesquisas não utilizavam inner join, eu usava o
>> > > dataField do DataGridColumn dataField="reun_data" acessava o objeto
>> > > Reuniao diretamente, agora que ele retorna o array como faço para
>> > > acessar o objeto reuniao dentro do Array?
> >
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---