<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>BobFernandes's Weblog</title>
	<atom:link href="http://bobfernandes.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bobfernandes.wordpress.com</link>
	<description>Flex em português</description>
	<lastBuildDate>Mon, 04 Aug 2008 14:13:15 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='bobfernandes.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/b9b9311abb8fbfe06af421df64d1feb4?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>BobFernandes's Weblog</title>
		<link>http://bobfernandes.wordpress.com</link>
	</image>
			<item>
		<title>AdvancedTree</title>
		<link>http://bobfernandes.wordpress.com/2008/08/04/advancedtree/</link>
		<comments>http://bobfernandes.wordpress.com/2008/08/04/advancedtree/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 14:13:15 +0000</pubDate>
		<dc:creator>bobfernandes</dc:creator>
				<category><![CDATA[Componentes]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[ArrayCollection]]></category>
		<category><![CDATA[tree]]></category>

		<guid isPermaLink="false">http://bobfernandes.wordpress.com/?p=54</guid>
		<description><![CDATA[Recentemente precisei criar um script que recebesse um array de valores e selecionasse todos os itens de uma Tree cujo labelField fosse igual a algum dos elementos do array, após ter muito trabalho para montar tal script resolvi extender a Tree e deixar o script ainda mais maleável incluindo a possibilidade de procurar por outras [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=54&subd=bobfernandes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Recentemente precisei criar um script que recebesse um array de valores e selecionasse todos os itens de uma Tree cujo labelField fosse igual a algum dos elementos do array, após ter muito trabalho para montar tal script resolvi extender a Tree e deixar o script ainda mais maleável incluindo a possibilidade de procurar por outras propriedades dos itens além do labelField e até mesmo passar uma função para ser usada para decidir se o item deve ser selecionado.</p>
<p>Segue o código que eu criei, com certeza ele pode ser melhorado e otimizado portanto se alguem tiver alguma dica por favor poste um comentário.</p>
<blockquote><p>package com.wordpress.bobfernandes<br />
{<br />
import mx.collections.ArrayCollection;<br />
import mx.controls.Tree;<br />
import mx.events.FlexEvent;</p>
<p>[Bindable]<br />
public class AdvancedTree extends Tree<br />
{<br />
private var i:int;<br />
private var indice:int</p>
<p>//esse ArrayCollection será usado como dataProvider da Tree<br />
private var _dados:ArrayCollection = new ArrayCollection();</p>
<p>public function AdvancedTree()<br />
{<br />
super();<br />
addEventListener(FlexEvent.CREATION_COMPLETE, init);<br />
}<br />
private function init(event:FlexEvent):void<br />
{<br />
dataProvider = _dados;<br />
}<br />
//função set usada para garantir o refresh e a atualização da tree<br />
public function set dados(value:ArrayCollection):void<br />
{<br />
_dados = value;<br />
_dados.refresh();<br />
dataProvider = _dados;<br />
}<br />
public function get dados():ArrayCollection<br />
{<br />
return _dados;<br />
}</p>
<p>// método público que seleciona itens por label<br />
// recebe um array de valores a serem procurados<br />
public function selecionarPorLabel(valuesToFind:Array):void<br />
{<br />
selecionarPorPropriedade(valuesToFind, labelField);<br />
}</p>
<p>// é esse método que possibilita procurar<br />
// por outra propriedade diferente da definida no labelField<br />
// e também passar uma função para ser usada na decisão da seleção<br />
public function selecionarPorPropriedade(valuesToFind:Array, prop:String, funcao:Function = null):void<br />
{<br />
// Limpa a lista de indices selecionados<br />
selectedIndices = new Array();<br />
// Seta o início para zero<br />
indice = 0;<br />
if(funcao == null)<br />
{<br />
// se nenhuma função for passada usa a comparar()<br />
funcao = comparar;<br />
}<br />
// é necessário expandir toda a árvore<br />
// pois o índice de um item varia se<br />
// os itens anteriores estão abertos ou não<br />
expandAll();<br />
selectItems(valuesToFind, dados, prop, funcao);<br />
}<br />
// função auxiliar para adicionar um determinado indice<br />
// a lista de índices selecionados<br />
private function adicionaIndexAosSelecionados(value:int):void<br />
{<br />
// um push no selectedIndices não funciona<br />
// pois o processamento é feito na função set<br />
// por isso temos que setar o selectedIndices<br />
var arr:Array = new Array();<br />
if(selectedIndices != null)<br />
{<br />
// guarda o selectedIndices atual<br />
arr = selectedIndices;<br />
}<br />
// adiciona o valor<br />
arr.push(value);<br />
// seta o selectedIndices para a nova array<br />
selectedIndices = arr;<br />
}<br />
// função básica para usar como comparação<br />
private function comparar(item:Object, stringToCompare:String, propriedade:String):Boolean<br />
{<br />
var retorno:Boolean = false;<br />
if(item[propriedade] != null)<br />
{<br />
if(item[propriedade].toString() == stringToCompare.toString())<br />
{<br />
retorno = true;<br />
}<br />
}<br />
return retorno;<br />
}<br />
// função para expandir todos os nós da Tree<br />
private function expandAll():void<br />
{<br />
for(i = 0; i &lt; dados.length; i++)<br />
{<br />
expandItem(dados[i], true, true);<br />
expandChildrenOf(dados[i], true);<br />
}<br />
}<br />
// função recursiva que varre a Tree<br />
private function selectItems(valuesToFind:Array, collection:ArrayCollection, propToCompare:String, compareFunction:Function):void<br />
{<br />
for(var k:int = 0; k &lt; collection.length; k++)<br />
{<br />
for(i = 0; i &lt; valuesToFind.length; i++)<br />
{<br />
var linha:String = valuesToFind[i];<br />
if(compareFunction(collection[k], linha, propToCompare))<br />
{<br />
adicionaIndexAosSelecionados(indice);<br />
}<br />
}<br />
indice++;<br />
// lembre-se que para usar um arrayCollection como dataProvider<br />
// as propriedades que tem filhos devem obrigatóriamente se chamar &#8220;children&#8221;<br />
var Children:ArrayCollection = collection[k].children as ArrayCollection;<br />
if(Children != null)<br />
{<br />
selectItems(valuesToFind, Children, propToCompare, compareFunction);<br />
}<br />
}<br />
}<br />
}<br />
}</p></blockquote>
<p>Na hora de usar o componente faça como um Tree normal a única diferença é que ao invés de setar a propriedade dataProvider diretamente sete a propriedade dados:</p>
<p>&lt;utils:AdvancedTree<br />
id=&#8221;idDaTree&#8221;<br />
labelField=&#8221;propiedadeParaUsarComoLabel&#8221;<br />
dados=&#8221;{seuArrayCollection}&#8221;<br />
width=&#8221;100%&#8221; height=&#8221;100%&#8221;<br />
allowMultipleSelection=&#8221;true&#8221;<br />
/&gt;</p>
<p>Para fazer a seleção use algo como:<br />
idDaTree.selecionarPorLabel(arrayDeValoresASeremSelecionados);</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bobfernandes.wordpress.com/54/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bobfernandes.wordpress.com/54/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobfernandes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobfernandes.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobfernandes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobfernandes.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobfernandes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobfernandes.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobfernandes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobfernandes.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobfernandes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobfernandes.wordpress.com/54/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=54&subd=bobfernandes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bobfernandes.wordpress.com/2008/08/04/advancedtree/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">bobfernandes</media:title>
		</media:content>
	</item>
		<item>
		<title>Soap Fault no flex</title>
		<link>http://bobfernandes.wordpress.com/2008/07/29/soap-fault-no-flex/</link>
		<comments>http://bobfernandes.wordpress.com/2008/07/29/soap-fault-no-flex/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 18:54:01 +0000</pubDate>
		<dc:creator>bobfernandes</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Soap]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Erro]]></category>
		<category><![CDATA[Fault]]></category>

		<guid isPermaLink="false">http://bobfernandes.wordpress.com/?p=47</guid>
		<description><![CDATA[Atualmente estou trabalhando em um projeto com uma arquitetura que inclui um servidor BEA Aqualogic e nos deparamos com um problema que parecia ser bem severo: O flex não conseguia enxergar um SOAPError gerado pelo ServiceBus, isso é um bug reportado no bug track da Adobe, nas pesquisas que fizemos as únicas soluções envolviam utilizar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=47&subd=bobfernandes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Atualmente estou trabalhando em um projeto com uma arquitetura que inclui um servidor BEA Aqualogic e nos deparamos com um problema que parecia ser bem severo: O flex não conseguia enxergar um SOAPError gerado pelo ServiceBus, isso é um <a href="http://bugs.adobe.com/jira/browse/SDK-13765">bug reportado no bug track da Adobe</a>, nas pesquisas que fizemos as únicas soluções envolviam utilizar ou BlazeDS ou LCDS que no nosso caso eram soluções inaceitáveis (por conta de regras e arquiteturas definidas pelo cliente).</p>
<p>Após um brainstorm com nosso arquiteto e o pessoal dos dataServices e webServices chegamos a conclusão de que isso na verdade não é um erro ou bug do flex pois o header padrão para um erro de SOAP é 500 que é um http error, portanto a solução foi alterar no ServiceBus o gerenciamento de erro para que ao invés de disparar um erro com header 500 disparar um erro com header 200 e voilá o flex recebeu o erro como um SOAPError e as mensagens de erro geradas pelo dataService chegaram bonitinhas no Flex.</p>
<p>Fica aí a dica de como fazer para receber um SOAPError no flex.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bobfernandes.wordpress.com/47/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bobfernandes.wordpress.com/47/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobfernandes.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobfernandes.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobfernandes.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobfernandes.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobfernandes.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobfernandes.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobfernandes.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobfernandes.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobfernandes.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobfernandes.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=47&subd=bobfernandes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bobfernandes.wordpress.com/2008/07/29/soap-fault-no-flex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">bobfernandes</media:title>
		</media:content>
	</item>
		<item>
		<title>AdvancedDataGrid parte 2 &#8211; dando refresh em um HierarchicalData</title>
		<link>http://bobfernandes.wordpress.com/2008/06/10/advanceddatagrid-parte-2-dando-refresh-em-um-hierarchicaldata/</link>
		<comments>http://bobfernandes.wordpress.com/2008/06/10/advanceddatagrid-parte-2-dando-refresh-em-um-hierarchicaldata/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 02:28:29 +0000</pubDate>
		<dc:creator>bobfernandes</dc:creator>
				<category><![CDATA[Componentes]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[ActionScrpt]]></category>
		<category><![CDATA[AdvancedDataGrid]]></category>
		<category><![CDATA[HierarchicalData]]></category>

		<guid isPermaLink="false">http://bobfernandes.wordpress.com/?p=39</guid>
		<description><![CDATA[Esse é o segundo post da série sobre AdvancedDataGrid no primeiro post eu dei uma dica bem útil para quem quer utilizar o hierarchicalData com dados vindos de um RemoteObject.
O componente HierarchicalData não tem um método refres(), para conseguir essa função é necessário extender a classe HierarchicalData, eis o código:
package com.wordpress.bobfernandes.beans
{
import mx.collections.HierarchicalData;
import mx.events.CollectionEvent;
import mx.events.CollectionEventKind;
public class [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=39&subd=bobfernandes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Esse é o segundo post da série sobre AdvancedDataGrid no <a href="http://bobfernandes.wordpress.com/2008/06/10/advanceddatagrid-parte-1-usando-arraycollection-como-dataprovider/">primeiro post</a> eu dei uma dica bem útil para quem quer utilizar o hierarchicalData com dados vindos de um RemoteObject.</p>
<p>O componente HierarchicalData não tem um método refres(), para conseguir essa função é necessário extender a classe HierarchicalData, eis o código:</p>
<blockquote><p>package com.wordpress.bobfernandes.beans<br />
{<br />
import mx.collections.HierarchicalData;<br />
import mx.events.CollectionEvent;<br />
import mx.events.CollectionEventKind;</p>
<p>public class RefreshHieararchicalData extends HierarchicalData<br />
{<br />
// O truque é sobrescrever o set source<br />
//  para que seja disparado um CollectionEvent do tipo reset<br />
override public function set source(value:Object):void<br />
{<br />
super.source = value;<br />
var event:CollectionEvent =    new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);<br />
event.kind = CollectionEventKind.RESET;<br />
dispatchEvent(event);<br />
}<br />
}<br />
}</p></blockquote>
<p>Na hora de usar faça assim:</p>
<blockquote><p>&lt;mx:dataProvider&gt;<br />
&lt;beans:RefreshHieararchicalData id=&#8221;UmIdRelevante&#8221; source=&#8221;{SeuArrayCollection}&#8221;/&gt;<br />
&lt;/mx:dataProvider&gt;</p></blockquote>
<p>No próximo post eu mostrarei um exemplo de ADG com ItemRenderer.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bobfernandes.wordpress.com/39/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bobfernandes.wordpress.com/39/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobfernandes.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobfernandes.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobfernandes.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobfernandes.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobfernandes.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobfernandes.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobfernandes.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobfernandes.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobfernandes.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobfernandes.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=39&subd=bobfernandes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bobfernandes.wordpress.com/2008/06/10/advanceddatagrid-parte-2-dando-refresh-em-um-hierarchicaldata/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">bobfernandes</media:title>
		</media:content>
	</item>
		<item>
		<title>AdvancedDataGrid parte 1 &#8211; usando ArrayCollection como DataProvider</title>
		<link>http://bobfernandes.wordpress.com/2008/06/10/advanceddatagrid-parte-1-usando-arraycollection-como-dataprovider/</link>
		<comments>http://bobfernandes.wordpress.com/2008/06/10/advanceddatagrid-parte-1-usando-arraycollection-como-dataprovider/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 01:48:42 +0000</pubDate>
		<dc:creator>bobfernandes</dc:creator>
				<category><![CDATA[Componentes]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[ActionScrpt]]></category>
		<category><![CDATA[AdvancedDataGrid]]></category>
		<category><![CDATA[ArrayCollection]]></category>
		<category><![CDATA[HierarchicalData]]></category>

		<guid isPermaLink="false">http://bobfernandes.wordpress.com/?p=38</guid>
		<description><![CDATA[Esse é o primeiro post de uma série que pretendo escrever sobre o AdvancedDataGrid, quem não ficou empolgado quando viu pela primeira vez algo sobre o ADG? E quem não ficou decepcionado quando tentou usar pela primeira vez o ADG? Se você respondeu sim para as duas perguntas saiba que você não está sozinho, a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=38&subd=bobfernandes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Esse é o primeiro post de uma série que pretendo escrever sobre o AdvancedDataGrid, quem não ficou empolgado quando viu pela primeira vez algo sobre o ADG? E quem não ficou decepcionado quando tentou usar pela primeira vez o ADG? Se você respondeu sim para as duas perguntas saiba que você não está sozinho, a primeira vista ele parece o componente dos sonhos mas na hora de usar ele rapidamente vira o componente dos pesadelos.</p>
<p>Bem vamos ao que interessa, esse primeiro post vai ser só uma dica muito simples mas que faz toda a diferença, quando a origem dos dados é um arrayCollection vindo de um RemoteObject para poder usar o hierarchicalData todos os objetos que são filhos de outro objeto tem que se chamar &#8220;children&#8221; ou ter o mesmo nome que tem que ser indicado na propriedade childrenField.</p>
<p>No <a href="http://bobfernandes.wordpress.com/2008/06/10/advanceddatagrid-parte-2-dando-refresh-em-um-hierarchicaldata/">próximo post</a> da série irei mostrar como dar refresh em uma hierarchicalData.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bobfernandes.wordpress.com/38/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bobfernandes.wordpress.com/38/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobfernandes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobfernandes.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobfernandes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobfernandes.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobfernandes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobfernandes.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobfernandes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobfernandes.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobfernandes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobfernandes.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=38&subd=bobfernandes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bobfernandes.wordpress.com/2008/06/10/advanceddatagrid-parte-1-usando-arraycollection-como-dataprovider/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">bobfernandes</media:title>
		</media:content>
	</item>
		<item>
		<title>Procurando emprego!</title>
		<link>http://bobfernandes.wordpress.com/2008/06/10/procurando-emprego/</link>
		<comments>http://bobfernandes.wordpress.com/2008/06/10/procurando-emprego/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 00:01:57 +0000</pubDate>
		<dc:creator>bobfernandes</dc:creator>
				<category><![CDATA[outros]]></category>

		<guid isPermaLink="false">http://bobfernandes.wordpress.com/?p=35</guid>
		<description><![CDATA[Estou me desligando da empresa onde vinha trabalhando e estou em busca de emprego.
Se alguém tiver uma indicação será muito bem vinda.
Tenho bastante conhecimento de Flex, ColdFusion e SQL entre outras coisas e tabém tenho inglês fluente, clique aqui para ver meu currículo.
Quero aproveitar também pra deixar um abraço e meu desejo de sucesso pra [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=35&subd=bobfernandes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Estou me desligando da empresa onde vinha trabalhando e estou em busca de emprego.<br />
Se alguém tiver uma indicação será muito bem vinda.<br />
Tenho bastante conhecimento de Flex, ColdFusion e SQL entre outras coisas e tabém tenho inglês fluente, <a href="http://bobfernandes.wordpress.com/curriculo/">clique aqui para ver meu currículo</a>.</p>
<p>Quero aproveitar também pra deixar um abraço e meu desejo de sucesso pra toda equipe da NetSar. Pedro Sena, Jhonny Everson, Douglas Dalber, Marcelo e <a href="http://www.vedovelli.com.br/">Fábio Vedovelli</a>, gostei muito de trampar com vocês, essa equipe é show!</p>
<p>Desde já agradeço qualquer indicação!</p>
<p>Só para manter o post atualizado, já faz um mês que estou trabalhando na META em um projeto dentro da VIVO. O projeto consiste na reformulação do sistema de vendas da VIVO EMPRESAS cuja interface está sendo feita totalmente em flex.</p>
<p>A carga horária é mutio puxada (esse mês fiz 307 horas), para quem estiver interessado em dados sobre o mercado de trabalho em flex meu contrato é de PJ, R$ 40,00 a hora, hora aberta.</p>
<p>No breve período em que estive procurando emprego eu pude comprovar que o mercado está bastante aquecido e com déficit de profissionais, principalmente com experiência. O flex está começando a entrar nas grandes empresas e isso deve aumentar ainda mais a demanda. Outra coisa que pude comprovar é que ferramentas como a Catho realmente funcionam para a área de TI.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bobfernandes.wordpress.com/35/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bobfernandes.wordpress.com/35/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobfernandes.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobfernandes.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobfernandes.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobfernandes.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobfernandes.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobfernandes.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobfernandes.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobfernandes.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobfernandes.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobfernandes.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=35&subd=bobfernandes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bobfernandes.wordpress.com/2008/06/10/procurando-emprego/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">bobfernandes</media:title>
		</media:content>
	</item>
		<item>
		<title>Custom Validators &#8211; validador de sequencia de datas</title>
		<link>http://bobfernandes.wordpress.com/2008/06/09/custom-validators-validador-de-sequencia-de-datas/</link>
		<comments>http://bobfernandes.wordpress.com/2008/06/09/custom-validators-validador-de-sequencia-de-datas/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 23:52:08 +0000</pubDate>
		<dc:creator>bobfernandes</dc:creator>
				<category><![CDATA[Componentes]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[ActionScrpt]]></category>
		<category><![CDATA[datas]]></category>
		<category><![CDATA[validador]]></category>

		<guid isPermaLink="false">http://bobfernandes.wordpress.com/?p=34</guid>
		<description><![CDATA[Recentemente estava precisando validar se uma data é maior que a outra, então criei esta classezinha simples que estende a Validators, ela recebe duas datas e compara e primeira com a segunda, se a segunda não for maior que a primeira ela coloca a mensagem de erro na segunda, segue o código.

package com.wordpress.bobfernandes
{
import mx.validators.ValidationResult;
import mx.validators.Validator;
public [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=34&subd=bobfernandes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Recentemente estava precisando validar se uma data é maior que a outra, então criei esta classezinha simples que estende a Validators, ela recebe duas datas e compara e primeira com a segunda, se a segunda não for maior que a primeira ela coloca a mensagem de erro na segunda, segue o código.<br />
<span id="more-34"></span></p>
<blockquote><p>package com.wordpress.bobfernandes<br />
{<br />
import mx.validators.ValidationResult;<br />
import mx.validators.Validator;</p>
<p>public class SequenceDatesValidator extends Validator<br />
{<br />
// Define o Array para o retorno do doValidation().<br />
private var results:Array;<br />
public var errorMessage:String = &#8216;Sequencia de datas inválida&#8217;;<br />
public var firstDate:Date = new Date();<br />
public var secondDate:Date = new Date();</p>
<p>// Construtor.<br />
public function SequenceDatesValidator() {<br />
// chama o construtor da Validator.<br />
super();<br />
}</p>
<p>// Quando se estende a classe validator temos que sobreescrever essa função<br />
override protected function doValidation(value:Object):Array {</p>
<p>// Variáveis para guardar as datas<br />
var smallerDate:Date = firstDate;<br />
var biggerDate:Date = secondDate;</p>
<p>// Zera o results Array.<br />
results = [];</p>
<p>// Chama o doValidation() da classe Validator.<br />
results = super.doValidation(value);<br />
// Damos um Return se tiver erros.<br />
if (results.length &gt; 0)<br />
return results;</p>
<p>// É aqui que fazemos a validação.<br />
if (smallerDate.getTime() &gt; biggerDate.getTime()) {<br />
results.push(new ValidationResult(true, null, &#8216;invalidSequence&#8217;, errorMessage));<br />
return results;<br />
}<br />
return results;<br />
}<br />
}<br />
}</p></blockquote>
<p>Na hora de usar é só inserir o seguinte:</p>
<blockquote><p>&lt;validators:SequenceDatesValidator id=&#8221;datesValidator&#8221;<br />
errorMessage=&#8221;Data de retorno maior que data de saída&#8221;<br />
source=&#8221;{IdDoCampoComADataQueDeveSerMaior}&#8221;<br />
property=&#8221;selectedDate&#8221;<br />
trigger=&#8221;{IdDoCampoComADataQueDeveSerMenor}&#8221;<br />
triggerEvent=&#8221;change&#8221;<br />
firstDate=&#8221;{IdDoCampoComADataQueDeveSerMenor.selectedDate}&#8221;<br />
secondDate=&#8221;{IdDoCampoComADataQueDeveSerMaior.selectedDate}&#8221;/&gt;</p></blockquote>
<p>Essa mesma lógica pode ser usada para comparar outros dois campos, por exemplo quando temos que checar se dois campos de senha são iguais.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bobfernandes.wordpress.com/34/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bobfernandes.wordpress.com/34/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobfernandes.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobfernandes.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobfernandes.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobfernandes.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobfernandes.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobfernandes.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobfernandes.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobfernandes.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobfernandes.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobfernandes.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=34&subd=bobfernandes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bobfernandes.wordpress.com/2008/06/09/custom-validators-validador-de-sequencia-de-datas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">bobfernandes</media:title>
		</media:content>
	</item>
		<item>
		<title>Extensão do post do Ved sobre upload &#8211; segurança</title>
		<link>http://bobfernandes.wordpress.com/2008/05/28/extensao-do-post-do-ved-sobre-upload-seguranca/</link>
		<comments>http://bobfernandes.wordpress.com/2008/05/28/extensao-do-post-do-ved-sobre-upload-seguranca/#comments</comments>
		<pubDate>Wed, 28 May 2008 04:46:40 +0000</pubDate>
		<dc:creator>bobfernandes</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[upload]]></category>
		<category><![CDATA[ScreenCast]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://bobfernandes.wordpress.com/?p=33</guid>
		<description><![CDATA[Esse post é um extensão do screenCast que o Fábio Vedovelli postou sobre upload de arquivos com o flex.
O post original pode ser visto aqui.
Esse screenCast do Fábio foi o ponto de partida para uma discussão sobre segurança no upload de arquivos com o flex na lista flex-brasil.
Se quiser vá direto ao screenCast:
 Extensão do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=33&subd=bobfernandes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Esse post é um extensão do screenCast que o <a href="http://www.vedovelli.com.br">Fábio Vedovelli</a> postou sobre upload de arquivos com o flex.<br />
O post original pode ser visto <a href="http://www.vedovelli.com.br/?p=125">aqui</a>.</p>
<p>Esse screenCast do Fábio foi o ponto de partida para uma discussão sobre segurança no upload de arquivos com o flex na lista flex-brasil.</p>
<p>Se quiser vá direto ao screenCast:<br />
<a href="http://bobfernandes.bravehost.com/upload_extend.swf"> Extensão do post do Ved sobre upload &#8211; segurança</a></p>
<p>Não entrarei na parte server-side do aspecto de segurança, mesmo porque esse script pode ser usado com uma infinidade de liguagens server-side e cada uma delas tem seu modo de lidar com essa questão, mas não vá achando que não é necessário uma verificação server-side, muito pelo contrário, em se tratando de upload de arquivos  É EXTREMAMENTE, IMPRETERIVELMENTE, OBRIGATORIAMENTE NECESSÁRIO IMPLEMENTAR UMA POLITICA DE SEGURANÇA SERVER-SIDE.</p>
<p><span id="more-33"></span></p>
<p>Tendo dito isso, vamos ao que se pode fazer para aumentar a segurança no upload de arquivos por parte do flex. A idéia é passar junto com o arquivo algum tipo de dado para ser usado para verificação pelo servidor, esse dado pode ser uma senha, o login e a senha do usuário que esta fazendo o upload, um captcha ou qualquer outra informação para subsidiar a política de segurança que você vai implementar no servidor.</p>
<p>Esse método também pode ser usado para enviar informações para outros fins como por exemplo o id de um produto ao qual o arquivo está relacionado para ser inserido no banco.</p>
<p>Bom, vamos ao código, o que vai fazer o truque é a classe &#8220;URLVariables&#8221; é através dela que passaremos os dados, vamos inserir dentro da função que faz o upload, que no nosso caso é a &#8220;onSelect&#8221; o seguinte código:</p>
<blockquote><p>var urlVars:URLVariables = new URLVariables();<br />
urlVars.stringParaComparacao = &#8216;uma string qualquer&#8217;;<br />
request.data = urlVars;<br />
request.method = URLRequestMethod.POST;</p></blockquote>
<p>A função onSelect ficará assim:</p>
<blockquote><p>private function onSelect(e:Event):void{</p>
<p style="padding-left:30px;">var request:URLRequest = new URLRequest(&#8216;../../upload.php&#8217;);<br />
var urlVars:URLVariables = new URLVariables();<br />
urlVars.stringParaComparacao = &#8216;uma string qualquer&#8217;;<br />
request.data = urlVars;<br />
request.method = URLRequestMethod.POST;<br />
fr.upload(request);<br />
//pb.visible = true;</p>
<p>}</p></blockquote>
<p>O truque é criar uma URLVariables,  e adicionar a ela propriedades como se fosse um objeto qualquer e o segundo pulo do gato é setar essa URLVariables como a propriedade &#8220;data&#8221; da nossa URLRequest.</p>
<p>Na parte server-side nós recuperamos esses dados como se tivessem sido enviados por um formulário usando post. Minha linguagem server-side de origem é o ColdFusion, e no CF eu usaria &#8220;#form.stringParaComparacao #&#8221;, mas como o Ved fez o post em php vou tentar fazer em php, o código do upload.php ficará assim:</p>
<blockquote><p>if($_POST['stringParaComparacao'] == &#8216;uma string qualquer&#8217;)<br />
{</p>
<p style="padding-left:30px;">$move = move_uploaded_file($_FILES['Filedata']['tmp_name'], &#8220;arquivos/&#8221;.$_FILES['Filedata']['name']);<br />
chmod(&#8220;arquivos/&#8221;.$_FILES['Filedata']['name'], 0777);</p>
<p>}</p></blockquote>
<p>Obviamente no mundo real você não usaria uma string hard-coded como estou usando nesse tutorial e nem usaria isso como o único método de segurança server-side, mas para o intiuto de mostrar a parte do flex é isso.</p>
<p>Assista ao screenCast deste post:<br />
<a href="http://bobfernandes.bravehost.com/upload_extend.swf"> Extensão do post do Ved sobre upload &#8211; segurança</a></p>
<p><a href="http://www.vedovelli.com.br/?p=125">Post Original do Ved</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bobfernandes.wordpress.com/33/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bobfernandes.wordpress.com/33/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobfernandes.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobfernandes.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobfernandes.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobfernandes.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobfernandes.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobfernandes.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobfernandes.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobfernandes.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobfernandes.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobfernandes.wordpress.com/33/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=33&subd=bobfernandes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bobfernandes.wordpress.com/2008/05/28/extensao-do-post-do-ved-sobre-upload-seguranca/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">bobfernandes</media:title>
		</media:content>
	</item>
		<item>
		<title>Totalmente off, mas é bom demais para não comentar</title>
		<link>http://bobfernandes.wordpress.com/2008/05/28/totalmente-off-mas-e-bom-demais-para-nao-comentar/</link>
		<comments>http://bobfernandes.wordpress.com/2008/05/28/totalmente-off-mas-e-bom-demais-para-nao-comentar/#comments</comments>
		<pubDate>Wed, 28 May 2008 03:28:52 +0000</pubDate>
		<dc:creator>bobfernandes</dc:creator>
				<category><![CDATA[Mais off impossível]]></category>

		<guid isPermaLink="false">http://bobfernandes.wordpress.com/?p=32</guid>
		<description><![CDATA[Para os leitores de Sampa, ou que estiverem por aqui nesse final de semana:
Show com Macy Gray e Herbie Hancock em São Paulo &#8211; Domingo, 1 de junho, às 15 horas, no Parque Villa Lobos. Avenida Prof. Fonseca Rodrigues, 1655 &#8211; Pinheiros. Entrada Franca
Juro que esse tipo de post será tão raro quanto o alinhamento [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=32&subd=bobfernandes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Para os leitores de Sampa, ou que estiverem por aqui nesse final de semana:</p>
<p>Show com Macy Gray e Herbie Hancock em São Paulo &#8211; Domingo, 1 de junho, às 15 horas, no Parque Villa Lobos. Avenida Prof. Fonseca Rodrigues, 1655 &#8211; Pinheiros. Entrada Franca</p>
<p>Juro que esse tipo de post será tão raro quanto o alinhamento dos planetas, ou melhor, tão raro quanto uma oportunidade dessas!<br />
Mas como grande fã de ambos não consegui me conter.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bobfernandes.wordpress.com/32/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bobfernandes.wordpress.com/32/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobfernandes.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobfernandes.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobfernandes.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobfernandes.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobfernandes.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobfernandes.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobfernandes.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobfernandes.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobfernandes.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobfernandes.wordpress.com/32/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=32&subd=bobfernandes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bobfernandes.wordpress.com/2008/05/28/totalmente-off-mas-e-bom-demais-para-nao-comentar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">bobfernandes</media:title>
		</media:content>
	</item>
		<item>
		<title>Biblioteca flex parte 5 &#8211; usando o [IconFile] metatag</title>
		<link>http://bobfernandes.wordpress.com/2008/05/28/biblioteca-flex-parte-5-usando-o-iconfile-metatag/</link>
		<comments>http://bobfernandes.wordpress.com/2008/05/28/biblioteca-flex-parte-5-usando-o-iconfile-metatag/#comments</comments>
		<pubDate>Wed, 28 May 2008 01:17:53 +0000</pubDate>
		<dc:creator>bobfernandes</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[iconfile]]></category>
		<category><![CDATA[ScreenCast]]></category>

		<guid isPermaLink="false">http://bobfernandes.wordpress.com/?p=26</guid>
		<description><![CDATA[Nesse terceiro post da série sobre flex library eu irei falar sobre como usar o metatag [IconFile] para alterar o ícone que aparece ao lado dos componentes na aba components do modo design.
Se você não sabe o que é, pra que serve ou como criar uma biblioteca flex de uma lida nos primeiros posts dessa [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=26&subd=bobfernandes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Nesse terceiro post da série sobre flex library eu irei falar sobre como usar o metatag [IconFile] para alterar o ícone que aparece ao lado dos componentes na aba components do modo design.</p>
<p>Se você não sabe o que é, pra que serve ou como criar uma biblioteca flex de uma lida nos primeiros posts dessa série:<br />
<a href="http://bobfernandes.wordpress.com/2008/05/25/biblioteca-flex-parte-1-criando-uma-biblioteca/"> Biblioteca flex parte 1 &#8211; Criando uma biblioteca</a></p>
<p>Como de custume, se você preferir vá direto para o screenCast deste post:<br />
<a href="http://bobfernandes.bravehost.com/flexLibrary_pt_5.swf"> Biblioteca flex parte 5 &#8211; usando o [IconFile] metatag</a></p>
<p>A princípio pode parecer perda de tempo criar ícones para seus componentes, mas quando sua biblioteca começar a ficar grande você vai ver que facilita bastante na hora de achar o componente desejado na lista de custom da aba de components do modo design do flex builder.</p>
<p><span id="more-26"></span></p>
<p>O que eu costumo fazer é, quando sobra um tempinho, pegar todos os componentes da minha biblioteca que estão sem ícone e criar ícones para eles, normalmente eu parto dos ícones do flex para criar meus ícones.</p>
<p>No exemplo desse tutorial nós criamos uma extensão do DateField e como o visual do nosso componente é igual ao DeteField nós iremos usar o próprio icone do DateField. Você pode encontrar os ícones utilizados nos componentes do flex, assim como todas as classes, na pasta:<br />
SeuFlex\sdks\3.0.0\frameworks\projects\framework\src\mx\</p>
<p>Eu vou começar copiando esse arquivo para uma pasta &#8220;assets&#8221; que eu criei dentro da minha biblioteca.</p>
<p>Em seguida vou adicionar a seguinte linha logo acima da declaração da classe DateFieldPt:<br />
[IconFile("assets/DateField.png")]</p>
<p>O código do componente ficará assim:</p>
<blockquote>
<p style="text-align:left;">package com.wordpress.bobfernandes.util.controls {</p>
<p style="text-align:left;padding-left:30px;">import mx.controls.DateField;<br />
import mx.formatters.DateFormatter;</p>
<p style="text-align:left;padding-left:30px;">[IconFile("assets/DateField.png")]</p>
<p style="text-align:left;padding-left:30px;">public class DateFieldPt extends DateField{</p>
<p style="text-align:left;padding-left:60px;">public var ptFormatter:DateFormatter = new DateFormatter();<br />
public function DateFieldPt() {</p>
<p style="text-align:left;padding-left:90px;">super();</p>
<p style="text-align:left;padding-left:90px;">monthNames =</p>
<p style="text-align:left;padding-left:120px;">['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outbro', 'Novembro', 'Dezembro'];</p>
<p style="text-align:left;padding-left:90px;">dayNames =</p>
<p style="text-align:left;padding-left:120px;">['Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado', 'Domingo'];</p>
<p style="text-align:left;padding-left:90px;">yearNavigationEnabled = true;<br />
formatString = ‘DD/MM/YYYY’<br />
ptFormatter.formatString = “DD/MM/YYYY”;</p>
<p style="text-align:left;padding-left:60px;">}<br />
public function get datePt():String{</p>
<p style="text-align:left;padding-left:90px;">return ptFormatter.format(selectedDate);</p>
<p style="text-align:left;padding-left:60px;">}</p>
<p style="text-align:left;padding-left:30px;">}</p>
<p style="text-align:left;">}</p>
</blockquote>
<p>O próximo passo é configurar nossa biblioteca para incluir esse arquivo (DateField.png) na compilação assim como fizemos quando criamos nosso componente.<br />
Para isso acesse as propriedades da biblioteca e vá em &#8220;Flex Library build Path&#8221; (vide parte 2) , clique na aba assets e selecione o arquivo DateField.png.<br />
Esse processo deve ser feito para qualquer assets que você for usar na sua biblioteca como por exemplo o ícone de um botão.</p>
<p>Agora é só compilar novamente sua biblioteca e abrir um página do projeto que a utiliza em modo design para ver o ícone ao lado do seu componente.</p>
<p>Assista ao screenCast deste post:<br />
<a href="http://bobfernandes.bravehost.com/flexLibrary_pt_5.swf"> Biblioteca flex parte 5 &#8211; usando o [IconFile] metatag</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bobfernandes.wordpress.com/26/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bobfernandes.wordpress.com/26/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobfernandes.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobfernandes.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobfernandes.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobfernandes.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobfernandes.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobfernandes.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobfernandes.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobfernandes.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobfernandes.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobfernandes.wordpress.com/26/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=26&subd=bobfernandes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bobfernandes.wordpress.com/2008/05/28/biblioteca-flex-parte-5-usando-o-iconfile-metatag/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">bobfernandes</media:title>
		</media:content>
	</item>
		<item>
		<title>Biblioteca flex parte 4 &#8211; Adicionando a um projeto</title>
		<link>http://bobfernandes.wordpress.com/2008/05/25/biblioteca-flex-parte-4-adicionando-a-um-projeto/</link>
		<comments>http://bobfernandes.wordpress.com/2008/05/25/biblioteca-flex-parte-4-adicionando-a-um-projeto/#comments</comments>
		<pubDate>Sun, 25 May 2008 20:58:19 +0000</pubDate>
		<dc:creator>bobfernandes</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[ScreenCast]]></category>

		<guid isPermaLink="false">http://bobfernandes.wordpress.com/?p=5</guid>
		<description><![CDATA[Esse é o qurto post dessa série sobre bibliotecas, se você não sabe o que são bibliotecas flex vá para o primeiro post da série:
 Biblioteca flex Parte 1 &#8211; Criando uma biblioteca
E se você preferir pode ir direto ao screenCast deste post:
Biblioteca flex Parte 4 &#8211; Adicionando a um projeto

Nesse post eu vou mostrar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=5&subd=bobfernandes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Esse é o qurto post dessa série sobre bibliotecas, se você não sabe o que são bibliotecas flex vá para o primeiro post da série:<br />
<a href="http://bobfernandes.wordpress.com/2008/05/25/biblioteca-flex-parte-1-criando-uma-biblioteca/"> Biblioteca flex Parte 1 &#8211; Criando uma biblioteca</a></p>
<p>E se você preferir pode ir direto ao screenCast deste post:<br />
<a href="http://bobfernandes.bravehost.com/flexLibrary_pt_4.swf">Biblioteca flex Parte 4 &#8211; Adicionando a um projeto<br />
</a></p>
<p>Nesse post eu vou mostrar como adicionar sua biblioteca a um projeto.</p>
<p><span id="more-5"></span>Agora que sua biblioteca está compilada só falta inclui-la em quantos projetos você quiser utiliza-la.<br />
Para isso existem 3 opções:<br />
1- Copiar manualmente o arquivo swc (que foi criado na pasta bin quando compilamos a biblioteca) para a pasta lib do projeto.<br />
2- Acessar as propriedades do projeto e ir em &#8220;flex Build Path&#8221; e na aba &#8220;Library Path&#8221;, clicar em &#8220;Add SWC&#8221; e navegar até a pasta bin da biblioteca e seleciona o arquivo swc.</p>
<p>3- Ir na &#8220;Labrary Path&#8221; do seu projeto, como na opção 2. Clicar em &#8220;Add Project&#8221; e selecionar a biblioteca na lista que será apresentada.</p>
<p><img class="alignnone size-full wp-image-29" src="http://bobfernandes.files.wordpress.com/2008/05/addlibrarytoproject.jpg" alt="" /></p>
<p>Eu prefiro a opção 3 porque quando você adiciona uma biblioteca dessa maneira o flex builder detecta alterações na biblioteca quando você tenta compilar um projeto que a utiliza, assim se você mexer na biblioteca e der um build no projeto ele compila a biblioteca e depois o projeto, eliminando a necessidade de dar os dois builds na mão (caso você use a opção 2) ou ter que dar um build na biblioteca, copiar o swc pra pasta lib do projetoe dar um build no projeto (caso você use a opção 1).</p>
<p>Pronto, agora basta abrir uma tela do seu projeto no modo design que o seu componente estará a sua disposição entre os componentes customizados, e quando você adiciona-lo à sua tela ele aparecerá como se fosse um componente feito em mxml.</p>
<p><img class="alignnone size-full wp-image-30" src="http://bobfernandes.files.wordpress.com/2008/05/droppingcomponent.jpg" alt="" /></p>
<p>Assista ao screenCast deste post:<br />
<a href="http://bobfernandes.bravehost.com/flexLibrary_pt_4.swf">Biblioteca flex Parte 4 &#8211; Adicionando a um projeto</a></p>
<p><a href="http://bobfernandes.wordpress.com/2008/05/28/biblioteca-flex-parte-5-usando-o-iconfile-metatag/">No próximo post explicarei como adicionar um ícone ao nosso componente para se exibido na aba de components do design view do flex builder.</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bobfernandes.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bobfernandes.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobfernandes.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobfernandes.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobfernandes.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobfernandes.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobfernandes.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobfernandes.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobfernandes.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobfernandes.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobfernandes.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobfernandes.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobfernandes.wordpress.com&blog=3753690&post=5&subd=bobfernandes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bobfernandes.wordpress.com/2008/05/25/biblioteca-flex-parte-4-adicionando-a-um-projeto/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">bobfernandes</media:title>
		</media:content>

		<media:content url="http://bobfernandes.files.wordpress.com/2008/05/addlibrarytoproject.jpg" medium="image" />

		<media:content url="http://bobfernandes.files.wordpress.com/2008/05/droppingcomponent.jpg" medium="image" />
	</item>
	</channel>
</rss>