Mar
28

Resolver problemas de mapeamento de VO’s entre o Flex 2 e PHP através de AMFPHP

Depois de várias horas a bater com a cabeça devido ao famoso “warning: unable to bind to property ‘titulo’ on class ‘Object’ (class is not an IEventDispatcher)” quando se usa Flash Remoting no Flex 2, cheguei finalmente à rídicula (mas lógica) solução. Para que outros não caiam na mesma armadilha que eu, fica aqui a explicação do problema e respectiva resolução.

O Flash Remoting permite mapear tipos de dados simples ou complexos entre o cliente o servidor. Assim, se tivermos a definição de um objecto que possui um: id:int; nome:String; data_de_nascimento:Date; do lado do cliente (Actionscript), e outro do lado do servidor (php) com a mesma estrutura, se utilizarmos Flash Remoting para trocar objectos deste género ele encarregar-se-á de reconhecer os tipos de dados e fazer os mapeamentos automaticamente. Aliás, este é o comportamento desejado em qualquer RPC.

Porém, quando combinamos AMF3 com AMFPHP 1.9 b2 é habitual surgir o famoso erro descrito acima. Quando isto acontece, devem ser verificados os seguintes critérios (para simplificar, vou chamar VO aos objectos trocados):

  • O VO do lado do servidor deverá estar dentro de uma estrutura de pastas (ex.: org/riapt/vo/NoticiaVO.php) igual à do VO do lado do cliente;
  • O VO do lado do servidor deverá possuir um atributo public $_explicitType= “org.riapt.vo.NoticiaVO” onde org.riapt.vo.NoticiaVO deverá corresponder à estrutura de pastas descrita anteriormente;
  • O VO do lado do cliente deverá possuir a metadata RemoteClass(alias=”org.riapt.vo.NoticiaVO”) antes da definição da classe;
  • Ambos os VOs devem ter a mesma estrutura (i.e. os mesmos nomes para os atributos e os mesmos tipos de dados)
  • Se forem VO’s compostos por atributos de tipos de dados complexos (i.e. atributos cujo tipo de dados não é int, boolean, date ou string), esses atributos devem obedecer à regra descrita anteriormente (i.e. também eles devem ter uma estrutura idêntica e o mesmo tipo de dados)
  • E finalmente… A definição do VO deverá ser (obviamente) compilada juntamente com a aplicação, tanto usando os parâmetros do compilador, como criando um “dummy” object só para obrigar à inclusão da definição desse VO (i.e. var dummyObject:NoticiaVO).

A razão da minha última guerra foi este último critério. Apesar de estar a receber NoticiaVO’s e a usar os dados recebidos em imensos locais na minha aplicação, em nenhum sítio precisei de importar o meu NoticiaVO. Porquê? Porque o meu NoticiaVO implementa um interface (ArtigoVO) que estou a usar para permitir Dependency Injection. Logo, os componentes que usam o NoticiaVO não precisam de saber que é um NoticiaVO, apenas têm que saber que esse VO cumpre o interface definido pelo ArtigoVO. E assim sendo, em nenhum local do meu código, em quase mil ficheiros estava uma referência a um NoticiaVO…

… resultando em horas de desespero a perceber porque é que a minha aplicação não conseguia mapear os objectos recebidos para NoticiaVO. Adicionei ao meu código a linha “var dummyObject:NoticiaVO” e os meus problemas ficaram resolvidos!




Mar
27

As novidades no Flash CS3

A partir desta noite ficará disponível a versão trial será anunciado o novo Adobe Flash CS3. No site da Adobe é já possível encontrar muita informação sobre o novo Flash.
Fica aqui uma lista resumida das novidades no Flash CS3:

  • Importação do Adobe Photoshop e Illustrator mantendo as layers e estrutura
  • Conversão das animações por timeline para Actionscript 3.0
  • Novo interface com várias optimizações
  • Nova linguagem: Actionscript 3.0, com mais performance e melhor estruturada
  • Debugger avançado
  • Adobe Device Central, para testar conteúdo para dispositivos móveis
  • Mais e melhores ferramentas de desenho
  • Novos componentes interactivos em Actionscript 3.0, com skinning facilitado
  • Exportação para Quicktime
  • Novas ferramentas de vídeo
  • Editor de código melhorado



Mar
26

Integração de Flash CS3 com Flex 2

(UPDATE)
A Adobe lançou o Flex Component Kit for Flash CS3 exactamente para facilitar esta integração. Essa deve ser a metodologia correcta para integrar Flex 2 com Flash CS3, e não a explicação neste post, que ficou invalidada.

Por volta das 20h (GMT) de amanhã, 27 de Março, será anunciado pela Adobe o pacote CS3, que inclui, entre muitas outras coisas, o Flash CS3. Uma das questões que ainda se mantém em aberto, é saber como será feita a integração do Flash CS3 com o Flex 2.

Ora, graças à ajuda preciosa do Glenn Ruehle da Adobe, fica aqui em primeira mão uma das técnicas propostas para utilizar no Flex 2 conteúdo criado no Flash CS3. Essa técnica passa por simplesmente exportar um SWC no Flash, de forma a que o código seja “incluído” no Flex. Os passos são:

1- No publish settings, confirmar que a compilação está a ser feita para o Flash Player 9 e Actionscript 3

2- Nas propriedades do símbolo, confirmar que o Export For Actionscript está seleccionado, e que o nome da classe é igual ao nome do símbolo

3- Escolher “Export SWC” na caixa de diálogo “Publish Settings”, e fazer o publish

4- No Flex, em vez de se usar o Embed, aceder à classe directamente da seguinte forma:

public var myComp:NomeDaMinhaClasse = new NomeDaMinhaClasse();

5- O último passo, é adicionar o SWC à aplicação Flex. Para quem usa o Flex Builder 2, na caixa “Project Properties”, escolher a opção “Flex Build Path” e na “Library Path”, clicar em “Add SWC” e procurar o SWC exportado pelo Flash. Quem compila usando a linha de comandos, terá que adicionar o SWC exportado aos argumentos do compilador da seguinte forma:

mxmlc -l+=”caminho/para/AssetLibrary.swf” AMinhaAplicacao.mxml

Esta é uma técnica possível, mas julgo que a partir de amanhã vamos começar a ver outras soluções diferentes de integração do Flash com o Flex. Aguardemos… ;)




Mar
22

Seminário de Usabilidade no dia 4 de Abril às 15h

Realiza-se no próximo dia 4 de Abril às 15h o 3 º Seminário de Usabilidade, o evento anual da Associação Portuguesa de Profissionais de Usabilidade, este ano dedicado ao tema “Novos Desafios.

O programa é o seguinte:

14:30 – Recepção aos Participantes
15:00 – Apresentação / Boas Vindas
15:15 – Processos de design centrados no utilizador para sistemas interactivos (Francisco Rebelo)
15:45 – Prototipagem em Papel (Ivo Gomes)
16:15 – Coffee Break Apresentação sobre Usabilidade de Sistemas Comandados pela Voz no Windows Vista (Microsoft)
16:45 – Usabilidade em Rich Internet Applications (Bruno Figueiredo)
17:15 – Usabilidade em Comunidades Geradas pelos Utilizadores (Pedro Custódio)
17:45 – Mesa Redonda / Debate: “Os Novos Desafios das Aplicacões Web: Interacções Ricas”
18:30 – Encerramento

Para mais informações, consulte http://www.usabilidade.org/.

Se houverem interessados em ir, avisem na Mailing List ou deixem um comentário neste post, porque assim talvez nos possâmos juntar para não irmos sozinhos.




Mar
21

Mini-aplicação em Flex 2 para testar Regular Expressions

Por muito estranho que apareça, só ontem é que tive a minha primeira experiência com Regular Expressions. Durante vários anos consegui evitá-las, mas desta vez não tive qualquer hipótese de fuga…

O projecto que estou a desenvolver actualmente faz parte da rede Sapo, e tem que ter um banner no topo. Ora, para podermos exibir o banner, temos primeiro que carregar um código que a Sapo nos disponibiliza… em Javascript. E o nosso projecto é 100% em Flash….
Solução: usar Regular Expressions para procurar dentro do código Javascript as strings que precisamos para exibir o banner, nomeadamente, o url do SWF, o url de destino do clique e mais algumas coisas.

Como eram vários casos, achei melhor criar um pequeno programa em Flex 2 para testar as expressões em “tempo real”. Ou seja, à medida que vamos escrevendo a expressão, vamos obtendo imediatamente os resultados.

Sei que já existem espalhados pela internet centenas de scripts parecidos ou iguais a este em javascript, mas este… este é em Flex 2.

Clique aqui para ver o exemplo, e aqui para ver o código fonte.

(UPDATE)

Nem cinco minutos se passaram desde que fiz “submit”, e recebo do MXNA um post do Raymond Camden a disponibilizar um Apollo regex checker. Além de ser melhor que o meu , é para Apollo! Para quem o quiser experimentar, pode descarregá-lo aqui

top