logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Jan 27

FlexORM – Framework ORM para persistência em AIR 1.5

Escrito por Stefan Horochovec em abas, action, Actionscript, Actionscript3, Adobe, Air, app, AR, Artigo, as3, auto, Banco de Dados, bar, BI, Bindable, blog, botão, busca, class, classe, codec, código, Componente, Componentes, CRUD, dados, DataGrid, DataProvider, demo, Desenvolvedor, Dica, Download, event, Evento, Eventos, filter, Flex, FlexBuilder, FlexDuck, fonte, for, Formulário, framework, function, Google, Gravação, handle, Hibernate, html, ide, IE, if, image, int, Java, Javascript, JPA, label, layout, lista, lite, live, map, mg, MXML, Number, O, on, Pessoal, programação, Projetos, pt, RIA, Ria’s Geral, servidor, SQLite, string, tag, TextInput, UI, uint, Ved, window, XML, XP, zend @ 01 27th, 2010 | via http://www.horochovec.com.br/blog | 1 comentário
Stefan Horochovec
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá pessoal,

Neste artigo, irei comentar um pouco sobre o FlexORM. Este framework tem como objetivo o mapeamento objeto-relacional em projetos que utilizem AIR e base de dados embarcada (SQLite).

O FlexORM é uma criação de Mark Moloney, e é hospedado pela RIAForge.

O FlexORM tem suporte a versão 1.5 do AIR e abaixo, podemos listar algumas de suas vantagens para seu uso:

* Não há necessidade de criação e atualização de tabelas. O FlexORM se encarrega da criação da estrutura do banco, através de um mapeamento feito dentro do próprio objeto a ser persistido;

* Possui suporte as operações CRUD;

* Suporta associações 1:N, N:M, N:1 e 1:1;

* Suporte a atributos transientes;

* Suporte a constraints para consistência de chaves-estrangeiras, através de triggers do SQLite;

* Transações;

* Criação automática de índices;

* Lazy Loading;

* Dentre outras;

Para exemplificar o uso do FlexORM, irei criar um projeto chamado DuckToDo e o objetivo do projeto é que eu possa cadastrar algumas tarefas que eu precise realizar. A aplicação é bem simples no quesito visual, uma vez que o intuito do artigo é o conhecimento do FlexORM.

Para iniciar, iremos criar um projeto no FlexBuilder chamado DuckToDo, conforme a tela abaixo:

Em seguida, vá as propriedades do projeto, e na opção Flex Compiler, adicione a seguinte linha de comando ” -keep-as3-metadata+=Table,Id,Column,ManyToOne,OneToMany,ManyToMany,Transient”, para que o compilador interprete as Metadatas adicionadas ao mapeamento dos Beans, conforme tela abaixo:

Feito isso, você deve fazer o download do FlexORM e adicionar ao seu projeto. Você pode optar por fazer o download do source através de um servidor de versionamento (subversion), ou fazer o download através deste link do arquivo .SWC do projeto FlexORM.

Depois de obter o .SWC, ou por download, ou recompilando o projeto, você deve adicioná-lo a pasta lib/ de seu projeto.

Feito isso, criaremos nossa classe de objeto que será persistida pela nossa aplicação.

Crie uma nova classe actionscript na package “org.flexduck.model” chamada Todo, e adicione o código abaixo:

?View Code ACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package org.flexduck.model
{

	[Bindable]
	[Table(name="TODO")]
	public class Todo
	{
		[Id]
		public var codigo 	: int;

		[Column(name="titulo")]
		public var titulo 	: String;

		[Column(name="descricao")]
		public var descricao : String;

	}

}

Neste momento, quem trabalha com Java e utiliza Hibernate ou JPA já percebe uma grande semelhança. Através da Metadata [Table] no escopo da classe, definimos a qual tabela este objeto deve ser persistido.

No atributo codigo, foi adicionado a Metadata [Id] indicando que esse atributo corresponde a chave primária, ou o identificador, do objeto.

E nos atributos, titulo e descrição, adicionado a Metadata [Column] indicando que refere-se a uma coluna. Junto a Metadata também foi adicionado o nome respectivo da coluna na tabela.

Com isso, nosso bean está pronto para ser persistido. Vamos para a sua gravação.

Dentro do arquivo DuckToDo.mxml foi criada a seguinte estrutura de componentes.

?View Code ACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<mx:Binding destination="todo.titulo" 		source="titulo.text"/>
<mx:Binding destination="todo.descricao" 	source="descricao.text"/>

<mx:Panel width="500" height="250" layout="absolute" title="O que tenho para fazer?" horizontalCenter="0" verticalCenter="0">

<mx:ViewStack id="vw" top="0" right="0" left="0" bottom="0">
	<mx:Canvas label="Grid" width="100%" height="100%">

		<mx:Label x="10" y="10" text="Título" fontWeight="bold"/>
		<mx:TextInput x="10" y="29" width="460" id="titulo" text="{this.todo.titulo}"/>

		<mx:Label x="10" y="58" text="Descrição" fontWeight="bold"/>
		<mx:TextArea x="10" y="75" width="460" height="85" id="descricao" text="{this.todo.descricao}"/>

		<mx:Button x="318" y="172" label="Adicionar" id="btnAdd" click="btnAddHandler(event);"/>
		<mx:Button x="252" y="172" label="Listar" id="btnListar" click="btnListarHandler(event);"/>
		<mx:Button x="189" y="172" label="Novo" id="btnNovo" click="btnNovoHandler(event);"/>
		<mx:Button x="406" y="172" label="Excluir" id="btnDel" click="btnDelHandler(event);"/>

	</mx:Canvas>

	<mx:Canvas label="Formulario" width="100%" height="100%">
		<mx:DataGrid 	top="5" right="5" left="5" bottom="30"
						id="dg"
						doubleClickEnabled="true"
						doubleClick="doubleClickHandler(event);">
			<mx:columns>
				<mx:DataGridColumn dataField="titulo"/>
			</mx:columns>
		</mx:DataGrid>
		<mx:Button label="Pesquisar" id="btnPesquisar" click="btnPesquisarHandler(event);" bottom="5" right="5"/>
		<mx:Button label="Cadastrar" id="btnCadastrar" click="btnCadastrarHandler(event);" bottom="5" right="90"/>
	</mx:Canvas>

</mx:ViewStack>

</mx:Panel>

Essa estrutura corresponde a um Panel, contendo um ViewStack com dois Canvas dentro. Para o primeiro Canvas foi adicionado um Grid para conter a lista de tarefas e no segundo Canvas, um pequeno formulário para a manutenção dos registros.

Nesse artigo não irei comentar sobre a estrutura do formulário, considerando apenas como relevante as instruções de uso do FlexORM.

Foi adicionado um evento no creationComplete da minha aplicação, para instanciar o banco de dados, conforme declaração abaixo:

?View Code ACTIONSCRIPT3
1
2
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
						creationComplete="initApp(event);">

E dentro do bloco de programação em ActionScript foi adicionado:

?View Code ACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<mx:Script>
<![CDATA[

import org.flexduck.model.Todo;
import nz.co.codec.flexorm.EntityManager;

/**
 * Objeto de persistencia
 */
private var genericDAO 	: EntityManager	= EntityManager.instance;

/**
 * Classe para listar
 */
private var todoClass	: Class			= Todo;

/**
 * Bean
 */
[Bindable]
private var todo		: Todo			= new Todo();

/**
 * Evento disparado no creationComplete da aplicação para fazer a conexão com o banco de dados
 */
private function initApp(event:Event) : void
{
	var appDataBase : File = File.documentsDirectory.resolvePath("ducktodo.db");
	var sqlConn		: SQLConnection	= new SQLConnection();
	sqlConn.open(appDataBase);
	this.genericDAO.sqlConnection	= sqlConn;
}

/**
 * Função disparada no click do botão de "Adicionar"
 */
private function btnAddHandler(event:MouseEvent) : void
{
	this.genericDAO.save(this.todo);
	this.dg.dataProvider	= this.genericDAO.findAll(this.todoClass);
}

/**
 * Função disparada no click do botão de "Excluir"
 */
private function btnDelHandler(event:MouseEvent) : void
{
	this.genericDAO.remove(this.todo);
	this.dg.dataProvider	= this.genericDAO.findAll(this.todoClass);
}

/**
 * Função disparada no duplo click no grid de pesquisa
 */
private function doubleClickHandler(event:MouseEvent) : void
{
	this.todo	= this.dg.selectedItem as Todo;
	this.vw.selectedIndex	= 0;
}

/**
 * Função disparada no click do botão de "Pesquisar"
 */
private function btnPesquisarHandler(event:MouseEvent) : void
{
	this.dg.dataProvider	= this.genericDAO.findAll(this.todoClass);
}

/**
 * Função disparada no click do botão de "Cadastrar"
 */
private function btnCadastrarHandler(event:MouseEvent) : void
{
	this.vw.selectedIndex 	= 0;
}

/**
 * Função disparada no click do botão de "Listar"
 */
private function btnListarHandler(event:MouseEvent) : void
{
	this.vw.selectedIndex	= 1;
}

/**
 * Função disparada no click do botão de "Novo"
 */
private function btnNovoHandler(event:MouseEvent) : void
{
	this.todo	= new Todo();
}
]]>
</mx:Script>

Alguns comentários relevantes:

Na função initApp, foi criado uma conexão SQLConnection, e a mesma foi passada para um objeto chamado genericDAO. Este objeto é uma instancia da classe EntityManager do FlexORM, responsável por executar os métodos para manipulação do banco de dados.

Na função btnAddHandler foi feita a persistencia do objeto Todo. Perceba que essa função é responsável por gravar e atualizar o objeto, não sendo necessário que o desenvolvedor se preocupe com a operação específica, apenas que em determinado momento, o objeto deve ser persistido, gravando-o ou fazendo sua atualização.

Na função btnDelHandler foi solicitado que determinado objeto fosse apagado do banco de dados.

Na função btnPesquisarHandler foi solicitado uma busca em todos os registros de determinada Classe, e não um objeto, fique atento a essa situação.

Os demais eventos servem para a navegação da tela, portanto, não serão comentados.

Se você fez corretamente a inclusão de todos os fontes, terá o resultado:

?View Code ACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
						creationComplete="initApp(event);">

<mx:Script>
<![CDATA[

import org.flexduck.model.Todo;
import nz.co.codec.flexorm.EntityManager;

/**
 * Objeto de persistencia
 */
private var genericDAO 	: EntityManager	= EntityManager.instance;

/**
 * Classe para listar
 */
private var todoClass	: Class			= Todo;

/**
 * Bean
 */
[Bindable]
private var todo		: Todo			= new Todo();

/**
 * Evento disparado no creationComplete da aplicação para fazer a conexão com o banco de dados
 */
private function initApp(event:Event) : void
{
	var appDataBase : File = File.documentsDirectory.resolvePath("ducktodo.db");
	var sqlConn		: SQLConnection	= new SQLConnection();
	sqlConn.open(appDataBase);
	this.genericDAO.sqlConnection	= sqlConn;
}

/**
 * Função disparada no click do botão de "Adicionar"
 */
private function btnAddHandler(event:MouseEvent) : void
{
	this.genericDAO.save(this.todo);
	this.dg.dataProvider	= this.genericDAO.findAll(this.todoClass);
}

/**
 * Função disparada no click do botão de "Excluir"
 */
private function btnDelHandler(event:MouseEvent) : void
{
	this.genericDAO.remove(this.todo);
	this.dg.dataProvider	= this.genericDAO.findAll(this.todoClass);
}

/**
 * Função disparada no duplo click no grid de pesquisa
 */
private function doubleClickHandler(event:MouseEvent) : void
{
	this.todo	= this.dg.selectedItem as Todo;
	this.vw.selectedIndex	= 0;
}

/**
 * Função disparada no click do botão de "Pesquisar"
 */
private function btnPesquisarHandler(event:MouseEvent) : void
{
	this.dg.dataProvider	= this.genericDAO.findAll(this.todoClass);
}

/**
 * Função disparada no click do botão de "Cadastrar"
 */
private function btnCadastrarHandler(event:MouseEvent) : void
{
	this.vw.selectedIndex 	= 0;
}

/**
 * Função disparada no click do botão de "Listar"
 */
private function btnListarHandler(event:MouseEvent) : void
{
	this.vw.selectedIndex	= 1;
}

/**
 * Função disparada no click do botão de "Novo"
 */
private function btnNovoHandler(event:MouseEvent) : void
{
	this.todo	= new Todo();
}
]]>
</mx:Script>

<mx:Binding destination="todo.titulo" 		source="titulo.text"/>
<mx:Binding destination="todo.descricao" 	source="descricao.text"/>

<mx:Panel width="500" height="250" layout="absolute" title="O que tenho para fazer?" horizontalCenter="0" verticalCenter="0">

<mx:ViewStack id="vw" top="0" right="0" left="0" bottom="0">
	<mx:Canvas label="Grid" width="100%" height="100%">

		<mx:Label x="10" y="10" text="Título" fontWeight="bold"/>
		<mx:TextInput x="10" y="29" width="460" id="titulo" text="{this.todo.titulo}"/>

		<mx:Label x="10" y="58" text="Descrição" fontWeight="bold"/>
		<mx:TextArea x="10" y="75" width="460" height="85" id="descricao" text="{this.todo.descricao}"/>

		<mx:Button x="318" y="172" label="Adicionar" id="btnAdd" click="btnAddHandler(event);"/>
		<mx:Button x="252" y="172" label="Listar" id="btnListar" click="btnListarHandler(event);"/>
		<mx:Button x="189" y="172" label="Novo" id="btnNovo" click="btnNovoHandler(event);"/>
		<mx:Button x="406" y="172" label="Excluir" id="btnDel" click="btnDelHandler(event);"/>

	</mx:Canvas>

	<mx:Canvas label="Formulario" width="100%" height="100%">
		<mx:DataGrid 	top="5" right="5" left="5" bottom="30"
						id="dg"
						doubleClickEnabled="true"
						doubleClick="doubleClickHandler(event);">
			<mx:columns>
				<mx:DataGridColumn dataField="titulo"/>
			</mx:columns>
		</mx:DataGrid>
		<mx:Button label="Pesquisar" id="btnPesquisar" click="btnPesquisarHandler(event);" bottom="5" right="5"/>
		<mx:Button label="Cadastrar" id="btnCadastrar" click="btnCadastrarHandler(event);" bottom="5" right="90"/>
	</mx:Canvas>

</mx:ViewStack>

</mx:Panel>

</mx:WindowedApplication>

Basta exportar sua aplicação, e tudo deverá funcionar perfeitamente.

Forte abraço e até a próxima!

Jan 26

Introdução ao seno e coseno com Actionscript

Escrito por riaPT em flash, Introduções, Ria’s Geral, Ria's Geral, Tutoriais @ 01 26th, 2010 | via http://riapt.org | Sem comentários
riaPT
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Trigonometria

Quando se fala em trigonometria geralmente é associada por grande parte a um “bicho daqueles maus” com cosenos, senos e mais um monte de fórmulas.
A verdade é que nos mais variados problemas é constante termos que aliar o actionscript com este ramo da matemática.

- PI:

É um numero irracional, eu normalmente uso apenas a aproximação com duas casas decimais 3,14. O record actualmente do numero mais aproximado é de Fabrice Bellard — um programador, claro!

Mas o que é visualmente este valor PI?

Importa saber que se fizermos um circulo perfeito com um raio de 1 unidade usando por exemplo uma corda, se esticarmos essa corda numa linha recta vamos ver que ela mede 2*PI. Portanto, metade da corda mede PI — um valor aproximado a 3.14159 26535 89793 23846 26433 83279 50288 4197 …. unidades! É a mesma coisa que dizer que o raio cabe PI vezes no arco de meia circunferência (um arco de circunferência de 180 graus).

id=”fm_pi-1_1196260430″
class=”flashmovie”
width=”430″
height=”255″>


- Está bem, pronto.. já gravei o que é o PI e agora o que faço com ele?

As funções Math.cos, Math.sin e outras no actionscript aceitam como parâmetro uma variável em radianos, esta variável indicam uma amplitude, um ponto especifico do nosso circulo.

A definição de Radiano

“O ângulo definido no centro de um círculo por um arco de circunferência com o mesmo comprimento que o raio do círculo é 1 radiano”
Ou seja, dizer que o raio do circulo “cabe” n vezes numa determinada parte do arco pode-se simplificar e dizer simplesmente que essa parte mede “n” radianos

Num sistema de coordenadas no plano cartesiano centrando um circulo com uma unidade de raio, fixa-se o ponto (a) mais à direita do circulo e mede-se o arco em sentido contrário ao sentido dos ponteiros do relógio obtendo um segundo ponto (b);
- a medida do arco entre os dois pontos “n radianos” (a verde), corresponde o parâmetro que usamos no coseno e no seno (entre outras funções do actionscript).

id=”fm_pi-2_930335825″
class=”flashmovie”
width=”430″
height=”255″>


Seno

- traça-se uma recta paralela ao eixo dos xx’s que passa pelo ponto b e vai interceptar o eixo dos yy’s obtendo o valor do seno para “n radianos” (a laranja)

id=”fm_pi-3_726935008″
class=”flashmovie”
width=”430″
height=”255″>


Coseno

- traça-se uma recta paralela ao eixo dos yy’s que passa pelo ponto b e que vai interceptar o eixo dos xx’s obtendo o valor do coseno para “n radianos” (a azul)

id=”fm_pi-4_1797462398″
class=”flashmovie”
width=”430″
height=”255″>


Isto é a parte chata da coisa, mas é o suficiente para fazermos milhares e milhares de cenas espectaculares :D .

Problema 1:

- Desenhar os pontos referentes às horas de um relógio analógico com raio de 80 pixeis e centro no ponto (200,122)

Resposta:

Sabemos que um circulo tem um arco de 2*PI, queremos dividir em 12 partes, portanto vamos ter 2*PI/12 como a medida de cada arco.
A partir daqui podemos passar estes arcos para coordenadas x,y usando o coseno e o seno.
Como queremos um raio maior que uma unidade temos que multiplicar os valores obtidos pelo novo raio desejado.

1
2
3
var arco_hora:Number=Math.PI*2/12;// simplificando Math.pi/6<br />
var raio:Number=80;//raio do nosso relogio<br />
this.graphics.lineStyle(4,0xff0000);//vamos por os pontos vermelhos

for (var i:int=0;i<12;i++)
{
var posx:Number=Math.cos(arco_hora*i)*raio;
var posy:Number=Math.sin(arco_hora*i)*raio;
this.graphics.drawCircle(posx,posy,4);
}

Ok, mas isto ficou no ponto (0,0), agora é necessário fazer uma translação para a posição final.

1
2
3
4
var arco_hora:Number=Math.PI*2/12;// simplificando Math.pi/6<br />
var raio:Number=80;//raio do nosso relogio<br />
var centro:Point=new Point(200,122);//posição central do relógio<br />
this.graphics.lineStyle(4,0xff0000);//vamos por os pontos vermelhos

for (var i:int=0;i<12;i++)
{
var posx:Number=Math.cos(arco_hora*i)*raio+centro.x;
var posy:Number=Math.sin(arco_hora*i)*raio+centro.y;
this.graphics.drawCircle(posx,posy,4);
}

id=”fm_pi-5_1812605422″
class=”flashmovie”
width=”430″
height=”255″>


Desafio:

- Desenhar os ponteiros

Dica: Assim por alto podemos por um TIMER de 1000 e no evento TimerEvent.TIMER obtemos a hora e actualizamos os ponteiros.
Os ponteiros podem ser desenhados com

1
2
3
4
<br />
graphics.lineStyle(4,0xff0000);<br />
graphics.moveTo(centro.x, centro.y);<br />
graphics.lineTo(posx, posy);<br />

Cuidados:

O coseno e seno são funções pesadas, o processador queixa-se se quando os usamos intensamente como por exemplo em sistemas de partículas.
Por isso uma leitura a este post do Michael Baczynski é recomendada.

Obrigado,
Paulo Afonso (semmais)
http://www.semmais.com/

Jan 26

Flex for Kids: video institucional

Escrito por Ved em 1, e-genial, Flex, Flex For Kids, Flex For Kids 2010, for, O, on, Ria’s Geral, UI @ 01 26th, 2010 | via http://www.vedovelli.com.br | Sem comentários
Ved
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Flex for Kids 2010 from e-Genial on Vimeo.
Clique aqui e faça sua doação!

Jan 26

TUTORIAL JAVA + FLEX NA PRÁTICA (9) – Atualizando o Swiz

Escrito por Janderson Cardoso em #JAVA + FLEX NA PRÀTICA, Action Script 3.0, Adobe Flex, código fonte Flex, Código Fonte java, Dicas, mvc, pratica java flex, Ria’s Geral, Swiz Framework, TUTORIAL FLEX, TUTORIAL JAVA @ 01 26th, 2010 | via http://www.jandersonfc.com/ | 3 comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

 TUTORIAL JAVA + FLEX NA PRÁTICA (9)   Atualizando o Swiz

Outra dúvida muito solicitada por email pela galera é a respeito da atualização do swiz, quando atualiza o framework logo de kara dá erro,confesso que esse tempo todo não trabalhei com projetos usando o swiz, só quando fiz esse Tutorial, e também por falta de tempo, não atualizei o framework, mas esse final de semana para minha surpresa tentei migrar e foi super tranquilo, então vou passar a dica para vocês agora.

Esse artigo é continuação do

TUTORIAL JAVA + FLEX NA PRÁTICA 1/6

TUTORIAL JAVA + FLEX NA PRÁTICA 2/6

TUTORIAL JAVA + FLEX NA PRÁTICA 3/6

TUTORIAL JAVA + FLEX NA PRÁTICA 4/6

TUTORIAL JAVA + FLEX NA PRÁTICA 5/6

TUTORIAL JAVA + FLEX NA PRÁTICA 6/6

TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

TUTORIAL JAVA + FLEX NA PRÁTICA 8 – Datas

Caso queira o projeto java é só baixar aqui (sem as libs).

Caso queira o projeto java é só baixar aqui.(com as libs).

Caso queira o projeto flex é só baixar aqui.

ATUALIZANDO O SWIZ FRAMEWORK

Primeira coisa que vamos fazer é baixar a última versão stable e atualmente (25/01/2009) é a swiz-0.6.4-flex3.swz. Digo isso porque vi no site da swiz que existe a versão alpha 1.0 do framework, esse sim pelo que vi terá algumas novidades notável, como metadata personalizado, estou migrando para essa versão 0.6.4 e quando lançar a 1.0 atualizo vocês por aqui no blog ;) . vamos ao que interessa .

  1. se ainda não baixou baixe o swiz-0.6.4-flex3.swz.
  2. na pasta libs do nosso projeto flex (CrudFlex) retiramos a antiga lib (swiz-0.0.5-010609.swc) e adicionamos a nova 0.6.4.

depois de ter feito isso vai dar erro na nossa models.delegates, isso porque a classe AbstractDelegate foi retirada do framework do swiz, basta retirar o extends AbstractDelegate que nossa classe voltará a funcionar, se vc tentar rodar agora já vai funcionar, blz.. espero que tenha ajudado muita gente.

Tô brincando galera… já que é para atualizar vamos atualizar direito..hehe assim funciona mais não está de acordo com a documentação do Swiz.

Próximo passo nosso será criar o nosso SwizConfig, no nosso projeto na index.mxml temos um preinitialize que invocava a funcção que iniciava o Swiz, agora temos o Swiz config que substitui essa antiga configuração, então nosso index.mxml era assim:

PLAIN TEXT
XML:

  1. <?xml version=“1.0″ encoding=“utf-8″?>
  2. <mx:Application xmlns:mx=“http://www.adobe.com/2006/mxml” layout=“absolute”
  3.     preinitialize=“{iniciar(event)}”>
  4.    
  5.     <mx:Script>
  6.         <![CDATA[
  7.             import com.saberprogramar.views.CidadeView;
  8.             import com.saberprogramar.views.EstadoView;
  9.             import mx.managers.PopUpManager;
  10.             import org.swizframework.Swiz;     
  11.             import mx.events.FlexEvent;   
  12.            
  13.             private function iniciar(event:FlexEvent):void{    
  14.                 Swiz.setStrict(false).loadBeans( [Beans] );           
  15.             }
  16.            
  17.             private function chamarCidadeView():void{
  18.                 PopUpManager.createPopUp(this,CidadeView,false);
  19.             }
  20.            
  21.             private function chamarEstadoView():void{
  22.                 PopUpManager.createPopUp(this,EstadoView,false);
  23.             }
  24.            
  25.         ]]>
  26.     </mx:Script>
  27.     <mx:Button x=“10″ y=“22″ label=“Estado” height=“52″ width=“88″ click=“{chamarEstadoView()}”/>
  28.     <mx:Button x=“10″ y=“93″ label=“Cidade” width=“88″ height=“54″ click=“{chamarCidadeView()}”/>
  29.    
  30.    
  31. </mx:Application>

ficou agora assim:

PLAIN TEXT
XML:

  1. <?xml version=“1.0″ encoding=“utf-8″?>
  2. <mx:Application xmlns:mx=“http://www.adobe.com/2006/mxml” layout=“absolute”
  3.     xmlns:swiz=“http://swiz.swizframework.org”>
  4.    
  5.     <mx:Script>
  6.         <![CDATA[
  7.             import mx.logging.LogEventLevel;
  8.             import com.saberprogramar.views.CidadeView;
  9.             import com.saberprogramar.views.EstadoView;
  10.             import mx.managers.PopUpManager;
  11.             import org.swizframework.Swiz;     
  12.             import mx.events.FlexEvent;   
  13.                                    
  14.             private function chamarCidadeView():void{
  15.                 PopUpManager.createPopUp(this,CidadeView,false);
  16.             }
  17.            
  18.             private function chamarEstadoView():void{
  19.                 PopUpManager.createPopUp(this,EstadoView,false);
  20.             }
  21.            
  22.         ]]>
  23.     </mx:Script>
  24.    
  25.     <swiz:SwizConfig
  26.         strict=“true”
  27.         eventPackages=“com.saberprogramar.events”
  28.         mediateBubbledEvents=“true”
  29.         viewPackages=“com.saberprogramar.views”
  30.         beanLoaders=“{[Beans]}”  
  31.         logEventLevel=“{LogEventLevel.WARN}”
  32.     />
  33.    
  34.     <mx:Button x=“10″ y=“22″ label=“Estado” height=“52″ width=“88″ click=“{chamarEstadoView()}”/>
  35.     <mx:Button x=“10″ y=“93″ label=“Cidade” width=“88″ height=“54″ click=“{chamarCidadeView()}”/>
  36.        
  37. </mx:Application>

tá, mas se funcionava antes porque vou fazer isso? explico, está vendo esse viewPackages e eventPackeges, isso é muito importante para usar uma nova Metadata do Swiz, o mediate, tinha na versão anterior mas não era interessante como agora , já que agora conseguimos passar para o nosso Mediate nosso Evento customizado, tudo isso graças a esse atributo eventPackeges. Além disso na 1.0 esse arquivo vai ser mantido pelo que vi, então você estará mais próximo para atualizar quando o mesmo for lançado.

USANDO O MEDIATE

Mas afinal o que é esse Mediate? o Mediate é uma Metadata, assim como usamos o Autowire, que serve para não precisar ficar adicionando escuta de eventos, vamos explicar na prática… vá em “views.action.CidadeAction” na função init temos duas escuta de evento

PLAIN TEXT
ACTIONSCRIPT:

  1. Swiz.addEventListener(CidadeEvent.SAVE,onSaveComplete);
  2.     Swiz.addEventListener(CidadeEvent.REMOVE,onRemoveComplete);

não precisamos fazer mais isso, pode apagar.. agora vá na função onSaveComplete e coloque o Mediate

PLAIN TEXT
ACTIONSCRIPT:

  1. [Mediate(event=“CidadeEvent.SAVE”)]
  2. public function onSaveComplete(event:CidadeEvent):void{ 
  3.     stack.selectedChild = canvasDefault;
  4.     findAll();
  5. }

o mesmo no onRemoveComplete

PLAIN TEXT
ACTIONSCRIPT:

  1. [Mediate(event=“CidadeEvent.REMOVE”)]
  2. public function onRemoveComplete(event:CidadeEvent):void{
  3.     stack.selectedChild = canvasDefault;
  4.     findAll();
  5. }

e como as duas funções fazem a mesma coisa podemos também utilizar de uma apenas assim:

PLAIN TEXT
ACTIONSCRIPT:

  1. [Mediate(event=“CidadeEvent.SAVE”)]
  2. [Mediate(event=“CidadeEvent.REMOVE”)]
  3. public function onSaveComplete(event:CidadeEvent):void{ 
  4.     stack.selectedChild = canvasDefault;
  5.     findAll();
  6. }

só observe que foi necessário modificar o “modificador de acesso” para public, caso contrário não funciona.

Agora sim é isso galera, o swiz está por enquanto atualizado, vi alguns exemplos na internet usando coisas que nunca vi no swiz(Documentação) por isso me retive e mostrei baseado na documentação… seguindo os passos do mesmo..(Os delegates não são mais necessários mas já que está aí resolvi manter). Espero que te ajude e estimule a manter o framework atualizado, porque esse merece seu carinho e atenção :)

Cumps.

  • Share this on del.icio.us
  • Digg this!
  • Share this on Reddit
  • Share this on Technorati
  • Share this on Facebook
  • Tweet This!
  • Subscribe to the comments for this post?
  • Share this on FriendFeed
  • Send this page to Print Friendly

Similar Posts:

  • TUTORIAL JAVA + FLEX NA PRÁTICA 3/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 6/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 4/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

 TUTORIAL JAVA + FLEX NA PRÁTICA (9)   Atualizando o Swiz

Jan 25

TUTORIAL JAVA + FLEX NA PRÁTICA (8) – Datas

Escrito por Janderson Cardoso em #JAVA + FLEX NA PRÀTICA, Action Script 3.0, Adobe Flex, código fonte Flex, Código Fonte java, Componentes, Data java flex, Dicas, pratica java flex, TUTORIAL FLEX, TUTORIAL JAVA @ 01 25th, 2010 | via http://www.jandersonfc.com/ | 2 comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

 TUTORIAL JAVA + FLEX NA PRÁTICA (8)   Datas

“O QUE È BOM TEM QUE CONTINUAR”        “O SENTIMENTO NÂO PODE PARAR”

Ano de 2010 começa e a vontade de ajudar a comunidade java e flex aumenta, e como podem perceber reativo hoje o Tutorial mais bombado do meu blog(JAVA + FLEX NA PRÀTICA) e os Motivos para reativar esse tutorial foi:

  • Percebi que o público do meu blog é uma galera que busca um pouco além de pequenas dicas, gostaram é de tutorial.
  • É mais fácil dar continuidade neste tutorial e mostrar algumas coisas mais avançadas ou continua de que começar outra, ter que ficar explicando d+, ter que no final ficar no básico.
  • Muitas dúvidas por email que valem um novo post para explicações, atualizações e dicas.
  • Quem sabe não sai um Ebook legal aí ,hein! ;)

Então se prepara, pegue um café que no Tutorial Java + Flex Na Prática (8) – Datas você vai aprender como trabalhar com datas usando Flex e Java (já que essa é a dúvida campeão da galera por email).

Para você que ainda não leu esses artigos para facilitar lá vai

Esse artigo é continuação do

TUTORIAL JAVA + FLEX NA PRÁTICA 1/6

TUTORIAL JAVA + FLEX NA PRÁTICA 2/6

TUTORIAL JAVA + FLEX NA PRÁTICA 3/6

TUTORIAL JAVA + FLEX NA PRÁTICA 4/6

TUTORIAL JAVA + FLEX NA PRÁTICA 5/6

TUTORIAL JAVA + FLEX NA PRÁTICA 6/6

TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

Caso queira o projeto java é só baixar aqui (sem as libs).

Caso queira o projeto java é só baixar aqui.(com as libs).

Caso queira o projeto flex é só baixar aqui.

TRABALHANDO COM DATAS NO JAVA  + FLEX

Sim, parece simples mas causa uma dúvida na galera que começa com JAVA + FLEX, seja na parte java com qual anotação usar ou seja no flex como pegar os valores em DD/MM/YYYY e converter em YYYY/MM/DD (já que é nesse formato que se armazena data no banco) . Tem muita gente que esquece que é data, se estressa e trata como se fosse string, nada contra mas se quiser pode aproveitar esse artigo para trabalhar Data como Data… vamos começar :)

A primeira coisa que vamos fazer é acrescentar um novo atributo na nossa entidade Cidade, vamos acrescentar a data de fundação(lógico que isso é redículo mas é um exemplo, ok) e com sua anotação correta.Vamos adicionar o atributo na nossa entidade:

PLAIN TEXT
JAVA:

  1. @Temporal(TemporalType.DATE)
  2.  
  3. private Date dataFundacao;
  4.  
  5. public Date getDataFundacao() {
  6.  
  7. return dataFundacao;
  8.  
  9. }
  10.  
  11. public void setDataFundacao(Date dataFundacao) {
  12.  
  13. this.dataFundacao = dataFundacao;
  14.  
  15. }

simples não, apenas vale lembrar que o Date é o “java.util.Date” e não “java.sql.Date”, vamos agora pro flex que aqui acabou, perceberam como OO ajuda… mexemos em uma classe, o resto fica do jeito que está :)

No Flex adicionamos a atributo também na nossa entidade que é nosso clone da Cidade:

PLAIN TEXT
ACTIONSCRIPT:

  1. public var dataFundacao:Date;

Agora, vamos criar um componente customizado, na verdade vamos extender o componente data Padrão do Flex (o DateField) chamei de DateFieldpt, só um detalhe, achei esse componente na net e não vou dar créditos pois não sei quem fez, então dentro do nosso projeto vamos criar um package components e vamos adicionar esse nosso componente, vamos ao código:

PLAIN TEXT
ACTIONSCRIPT:

  1. package com.saberprogramar.components
  2.  
  3. {
  4.  
  5. import com.saberprogramar.utils.Util;
  6.  
  7. import mx.controls.DateField;
  8.  
  9. import mx.events.FlexEvent;
  10.  
  11. public class DateFieldpt extends DateField
  12.  
  13. {
  14.  
  15. private const diasNomes:Array = [“D”,“S”,“T”,“Q”,“Q”,“S”,“S”];
  16.  
  17. private const mesesNomes:Array = [“Janeiro”,“Fevereiro”,“Março”,“Abril”,“Maio”,“Junho”,“Julho”,“Agosto”,“Setembro”,“Outubro”,“Novembro”,“Dezembro”];
  18.  
  19. public function DateFieldpt() {
  20.  
  21. super();
  22.  
  23. this.width=95;
  24.  
  25. dayNames=diasNomes;
  26.  
  27. monthNames=mesesNomes;
  28.  
  29. formatString=“DD/MM/YYYY”;
  30.  
  31. restrict=“0-9″;
  32.  
  33. editable=true;
  34.  
  35. showToday=true;
  36.  
  37. text = Util.dateToString(new Date());
  38.  
  39. addEventListener(FlexEvent.VALUE_COMMIT,completar);
  40.  
  41. }
  42.  
  43. private function completar(event:FlexEvent):void {
  44.  
  45. var str:String = event.target.text as String;
  46.  
  47. if ( str.charAt(2) != “/” || str.charAt(5) != “/” ) {
  48.  
  49. var mask:String;
  50.  
  51. var dataAtual:Date = new Date();
  52.  
  53. if ( str.length == 2 ) {
  54.  
  55. mask = str.substr(0, 2) + “/” +
  56.  
  57. (dataAtual.getMonth()+1).toString() + “/” +
  58.  
  59. dataAtual.getFullYear();
  60.  
  61. event.target.text = mask;
  62.  
  63. }
  64.  
  65. else if ( str.length == 4 ) {
  66.  
  67. mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” +
  68.  
  69. dataAtual.getFullYear().toString();
  70.  
  71. event.target.text = mask;
  72.  
  73. }
  74.  
  75. else if ( str.length == 6 ) {
  76.  
  77. mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” +
  78.  
  79. str.substr(4, 4);
  80.  
  81. event.target.text = mask;
  82.  
  83. }
  84.  
  85. else if ( str.length == 8 ) {
  86.  
  87. mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” +
  88.  
  89. str.substr(4, 4);
  90.  
  91. event.target.text = mask;
  92.  
  93. }
  94.  
  95. }
  96.  
  97. }
  98.  
  99. }
  100.  
  101. }

além desse componente precisamos de uma função que converta data para string e string para data, então crie mais um package utils e crie sua classe(sugeri Util.as) com essas funções, vamos ao código:

PLAIN TEXT
ACTIONSCRIPT:

  1. package com.saberprogramar.utils
  2.  
  3. {
  4.  
  5. import mx.formatters.DateFormatter;
  6.  
  7. public class Util
  8.  
  9. {
  10.  
  11. public static function stringToDate(data:String):Date{
  12.  
  13. if (data != “”) {
  14.  
  15. var novaData:String = data.substring(3,5) +“/”+ data.substring(0,2) +“/”+ data.substring(6);
  16.  
  17. return new Date(novaData);
  18.  
  19. }
  20.  
  21. else {
  22.  
  23. return null;
  24.  
  25. }
  26.  
  27. }
  28.  
  29. public static function dateToString(data:Date):String{
  30.  
  31. var format:DateFormatter = new DateFormatter();
  32.  
  33. format.formatString = “DD/MM/YYYY”;
  34.  
  35. return format.format(data);
  36.  
  37. }
  38.  
  39. }
  40.  
  41. }

pronto, agora é moleza,adicionamos um novo campo na view que é o nosso componente customizado:

PLAIN TEXT
CODE:

  1. <mx:FormItem label=“Data Fundação:” required=“true”>
  2.                     <components:DateFieldpt id=“txtDataFundcao”
  3.                         text=“{Util.dateToString(cidade.dataFundacao)}” tabIndex=“4″ />
  4.                 </mx:FormItem>

e pra finalizar em nossa action na function confirm adicionamos isso:

PLAIN TEXT
ACTIONSCRIPT:

  1. cidade.dataFundacao = Util.stringToDate(txtDataFundcao.text);

pronto, testa aí e você vai ver que já está funcionando, mas espera aí, ainda falta uma grande dica.

O HORÀRIO DE VERÂO BRASILEIRO!

Você vai testar agora, vai ver que está funcionando, vai ficar feliz e depois de um tempo pode acontecer de ter problemas com o nosso bendito horário de verão, explico, no Brazil não temos dia certo pra começar nem para terminar o bendito horário de verão, então como o sdk do java não utiliza a informaçao do sistema operacional(Windows, Linux, Mac) e sim do prório sdk, o sdk fica perdido com o nosso horário de verão. Mas como saber que estou tendo problemas?

  • Quando você mandar gravar uma data (23/01/2010)  essa data vai retroceder um dia (22/01/2010). Putz kara, é exatamente o que está me acontecendo, como eu resolvo isso?

simples :) um POG do bem..hehe quando você manda gravar uma data como fazemos aqui a data vai com o time (00:00:00), então quando chega no java o time volta, consequentemente um dia anteior com o time (22:00:00 ou as 23:00:00), então a forma mais rápida foi setar o time para 12:00:00 e por mais que o sdk volte o time ainda será o mesmo dia :) , então na nossa classe Util na função stringToDate ficará assim:

PLAIN TEXT
ACTIONSCRIPT:

  1. public static function stringToDate(data:String):Date{
  2.  
  3. if (data != “”) {
  4.  
  5. var novaData:String = data.substring(3,5) +“/”+ data.substring(0,2) +“/”+ data.substring(6);
  6.  
  7. var dateTime:Date = new Date(novaData);
  8.  
  9. dateTime.setHours(12,0,0,0);
  10.  
  11. return dateTime;
  12.  
  13. }
  14.  
  15. else {
  16.  
  17. return null;
  18.  
  19. }
  20.  
  21. }

fica aí a dica, aguardem que vem novos artigos para este tutorial, como atualização de swiz e relatórios integrando JAVA + FEX + IREPORT, até a próxima e bons estudos.

Cumps.

  • Share this on del.icio.us
  • Digg this!
  • Share this on Reddit
  • Share this on Technorati
  • Share this on Facebook
  • Tweet This!
  • Subscribe to the comments for this post?
  • Share this on FriendFeed
  • Send this page to Print Friendly

Similar Posts:

  • Formatando e Somando Datas no Flex
  • TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 6/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 1/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

 TUTORIAL JAVA + FLEX NA PRÁTICA (8)   Datas

Jan 24

Exportar dados para o Excel – Microsoft Silverlight 3

Escrito por Robson Fernandes em 1, 4, 6, Adobe, Adobe Flex, AR, BI, blog, C#, class, classe, cliente, código, CSharp, dados, DataGrid, Dica, Dicas, Download, event, Excel, exemplo, filter, Flex, fonte, for, html, IE, if, image, int, library, mg, Microsoft, Microsoft Silverlight, MSDN, NaN, O, on, Pessoal, RIA, Ria’s Geral, Scroll, silverlight, Silverlight - Core, SilverLight - Design, Silverlight - Dicas, Silverlight - PHP, Silverlight - WebClient, Silverlight 3, Software, tag, UI, window, windows, XP @ 01 24th, 2010 | via http://www.riasoftware.com.br/blog/ | Sem comentários
Robson Fernandes
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Microsoft Silverlight Dicas

INTRODUÇÃO

Boa noite pessoal!

No post anterior fiz um exemplo de exportação de dados utilizando o Adobe Flex. Para continuar, farei neste um exemplo utilizando Silverlight, abordando o uso da classe SaveFileDialog, para manipular arquivos no Silverlight.
A partir desta, irei disponibilizar uma classe que efetua a leitura de dados, e os converte para um arquivo no formato do Excel, para depois, gravá-lo na máquina cliente utilizando o SaveFileDialog.


CÓDIGO C#

Observe o código abaixo. Este método recebe um objeto DataGrid como parâmetro, que será utilizado para ler dos dados e depois converte-los no formato *.xls. Depois veja que o objeto file é instanciado a partir da classe SaveFileDialog. Veja também, que há uma classe que eu programei chamada ExportExcel que possui um método DgToHTML para gerar o arquivo no formato especificado.

/**
 * Exporta dados do DataGrid para o Excel
 * @param event
 *
 */
 private void btnExportar_Click(object sender, System.Windows.RoutedEventArgs e)
 {
     SaveFileDialog  file    =  new SaveFileDialog();
     ExportExcel        export  = new ExportExcel();

     file.DefaultExt = "*.xls";
     file.Filter = "Excel Worksheets|*.xls";
     if (file.ShowDialog() == false) return;
     using (StreamWriter sw = new StreamWriter(file.OpenFile()))
     {
        sw.WriteLine(export.DgToHTML<ClienteVo>(dataGridCliente));
     }
}

Massa demais!!!

APLICAÇÃO – RUN

DOWNLOAD

Fontes SILVERLIGHT – SilverlightToExcel

Vlw Galerinha!!!

Robson Fernandes

Jan 24

Converter imagem em SWF no Flash

Escrito por Eduardo Kraus em AR, Artigo, demo, exemplo, Flex, image, O, on, RIA, Ria’s Geral, swf, UI @ 01 24th, 2010 | via http://blog.mxml.com.br | Sem comentários
Eduardo Kraus
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

No artigo anterior já havia demonstrado o poder do Flex, criando um FLV. Neste agora, em um pequeno exemplo vou demonstrar como converter uma Imagem PNG em um SWF e salvar em sua maquina.

Jan 24

Exportar dados para o Excel – Adobe Flex 3

Escrito por Robson Fernandes em Adobe Flex - 3, Adobe Flex - Core, Adobe Flex - Design, Adobe Flex - Dicas, Adobe Flex - HTTPService, Adobe Flex - PHP @ 01 24th, 2010 | via http://www.riasoftware.com.br/blog/ | 3 comentários
Robson Fernandes
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Adobe Flex Dicas

INTRODUÇÃO

Boa noite pessoal!

Faz tempo que não posto conteúdo sobre Adobe Flex… Então, nesta abordagem irei demonstrar o uso da classe FileReference, para manipular arquivos no Adobe Flex.
A partir desta, irei disponibilizar uma classe que efetua a leitura de dados, e os converte para um arquivo no formato do Excel, para depois, gravá-lo na máquina cliente utilizando o FileReference.


CÓDIGO AS3

Observe o código abaixo. Este método recebe um objeto DataGrid como parâmetro, que será utilizado para ler dos dados e depois converte-los no formato *.xls. Depois veja que o objeto file é instanciado a partir da classe FileReference, e logo abaixo é utilizado um método save, que recebe dois parâmetros.

O primeiro parâmetro, é o conteúdo que será salvo dentro do arquivo. Neste caso foi implementado um método chamado DgToHTML que recebe o DataGrid, e converte os dados para o Excel, retornando-os como uma String.

O segundo parâmetro, é fornecido o nome do arquivo “arquivo.xls” juntamente com sua extensão, como uma String.

/**
 *
 * @param dataGrid
 *
 */
public function exportDataGridToExcel(dataGrid:*):void
{
	try
	{
		var file:FileReference = new FileReference();
		file.save(DgToHTML(dataGrid),"arquivo.xls");
	}
	catch(e:Error)
	{
		Alert.show(e.message);
	}
}

Bem simples, não é pessoal!

APLICAÇÃO – RUN

Para acessar os códigos fontes do Aplicativo, click com o botão da direita do mouse sobre o aplicativo, e escolha a opção View source

Abraços pessoal!

Robson Fernandes

Jan 23

0×46 0×4C 0×56 0×01 0×01

Escrito por Eduardo Kraus em AR, Flex, O, pt, Ria’s Geral, Tema, UI, web, WebCam @ 01 23rd, 2010 | via http://blog.mxml.com.br | Sem comentários
Eduardo Kraus
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Vocês devem achar muito estranho este título. Este é um sistema que captura no Flex a WebCam e salva como FLV. Se quiser saber mais leia o POST.

Jan 23

Flex X Cache – 3° Round

Escrito por Eduardo Kraus em AR, cache, Cache no Flex, Desenvolvimento, Flex, flex php, Flex XML, O, PHP, problema, problemas, RIA, Ria’s Geral, Tema, UI, XML @ 01 23rd, 2010 | via http://blog.mxml.com.br | Sem comentários
Eduardo Kraus
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Sempre ele o cache que nos atrapalha no desenvolvimento de aplicações Flex.

Você quando cria um sistema que carrega XML tem muitos problemas com Cache. O Cache faz com que você atualize o XML mais este não se atualiza na aplicação Flex.

« Entradas anteriores | Entradas recentes »

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2790 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com