<?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/"
	>

<channel>
	<title>MXStudio &#187; Coldfusion</title>
	<atom:link href="http://www.mxstudio.com.br/categoria/desenvolvimento/coldfusion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mxstudio.com.br</link>
	<description>Macromedia e Adobe - Artigos, colunas, tutorias e muito mais...</description>
	<lastBuildDate>Sun, 29 Jan 2012 11:31:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Middleware RIA da Adobe</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/coldfusion/middleware-ria-da-adobe/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/coldfusion/middleware-ria-da-adobe/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 07:23:13 +0000</pubDate>
		<dc:creator>Pedro Claudio</dc:creator>
				<category><![CDATA[Coldfusion]]></category>
		<category><![CDATA[destaque]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=4739</guid>
		<description><![CDATA[A absorção de aplicativos RIA em todos os segmentos de mercado, para uso em redes interna principalmente, é crescente, em grande parte baseados no Flash Player, ou seja, construídos em Flash ou Flex, e invariavelmente o produto do sistema é um relatório em PDF. Observando a frase anterior mais detalhadamente, concluímos que a tecnologia Adobe [...]]]></description>
			<content:encoded><![CDATA[<p>A absorção de aplicativos RIA em todos os segmentos de mercado, para uso em redes interna principalmente, é crescente, em grande parte baseados no Flash Player, ou seja, construídos em Flash ou Flex, e invariavelmente o produto do sistema é um relatório em PDF.</p>
<p>Observando a frase anterior mais detalhadamente, concluímos que a tecnologia Adobe está presente na construção da maioria dos softwares RIA.  Sabendo disto, a Adobe têm aperfeiçoando o <span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://www.adobe.com/products/coldfusion/">ColdFusion Server </a></span></span> para facilitar a construção das aplicações RIA.</p>
<p>E cada incremento inova de algum conceito ou funcionalidade, neste ponto, a tecnologia ColdFusion pode ser vista como um formador de opinião, com recursos usados em outras tecnologias (IDE ou Servidores), que começaram a perceber que as facilidades do ColdFusion não estão apenas no código CFML, mas também nos serviços.</p>
<p>Como exemplo podemos citar, que o ColdFusion foi o primeiro servidor a receber suporte AMF com o NetServices.as, os componentes auto documentáveis, componentes multisserviço (classes publica, classe remota ou ainda wsdl ), com o serviço RDS, entre outros.</p>
<p>Lembro ainda, que nessa época (NetServices),  a união ColdFusion Server+AMF foi o embrião do conceito RIA, pois anteriormente, aplicativos RIA só realizava requisições XML (estático ou dinâmico) , e posteriormente nasceria o Flex 1 junto com a geração MX, que hoje é um dos serviços ColdFusion.</p>
<p>Um incremento mais recente, foi a incorporação de recursos LiveCycle ao servidor ColdFusion, possibilitando a geração e manipulação de de PDF, permitindo um gerenciamento completo dos recursos PDF, desde criação de thumbnail a controle de permissão. Onde o sistema é mais requisitado, o ColdFusion ficou mais flexível. E com suporte nativo a LiveCycle DS ou BlazeDS.</p>
<p>Agora, a Adobe habilita todas essas facilidades do ColdFusion para implementação direta em MXML, quando cria o <span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSe9cbe5cf462523a0-5d0bd438122084e1759-7ffc.html">CFaaS (ColdFusion as service)</a> para versão 9.</span></span></p>
<p><strong>MXML com a cara do CFML</strong></p>
<p>CFaaS é um serviço ColdFusion que gerencia o acesso a um conjunto de outros serviços ColdFusion, habilitando a execução remota no servidor, sem a necessidade de construção de script no servidor, em resumo (obedecendo as regras de acesso do gerenciamento), todos os recursos descritos nos parágrafos anteriores estarão disponíveis em MXML, com auxílio de bibliotecas SWC (<span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WS71D0858A-D8BF-487d-AFBF-803EDD2068D3.html">mxml</a></span></span> e <span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WS4775AB3E-2865-4d72-A5C0-6F758BF73ABA.html">air</a></span></span>) disponíveis no servidor em /CFIDE/scripts/AIR/.</p>
<p>Os serviços CFaaS ou tags MXML do ColdFusion, até este momento, são:</p>
<ul>
<li><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/coldfusion/service/mxml/Chart.html">Chart</a></span></span> – proxy para o serviço de geração de gráficos, que é baseado 	no <span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://www.gpoint.com/website/WebCharts50/gallery/area.jsp">WebCharts3D </a></span></span>(no ColdFusion 9 o WebCharts3d está na versão 	5.1). Os gráficos são gerados no formato png, jpg ou swf;</li>
<li><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/coldfusion/service/mxml/Document.html">Document</a></span></span> – proxy para geração de documentos imprimíveis a partir do 	Flash Player, os formatos dos documentos gerados são PDF ou 	SWF/FlashPaper;</li>
<li><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/coldfusion/service/mxml/Image.html">Image</a></span></span> – proxy para manipulação de imagens, hoje é possível realizar 	a seguentes ações: AddBorder, batchOperation, Blur, Crop, Flip, 	GetEXIFMetaData, GetEXIFTAG, GetHeight, GetIPTCMetadata, GetIPTCTag, 	GetWidth, GrayScale, Info, Negative, Overlay, Resize, Rotate, 	ScaletoFit, Sharpen, Shear;</li>
<li><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/coldfusion/service/mxml/Ldap.html">Ldap</a></span></span> – permite acesso a qualquer servidor LDAP, e a configuração da 	conexão entre o cliente SWF e o servidor LDAP é realizada 	inteiramente no MXML,;</li>
<li><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/coldfusion/service/mxml/Mail.html">Mail</a></span></span> – sintetiza o conceito da tecnologia CFaaS, esta tag permite que 	qualquer aplicação SWF envie e-mail direto ao servidor STMP;</li>
<li><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/coldfusion/service/mxml/Pdf.html">Pdf</a></span></span> – proxy ao serviço de manipulação de PDF, que possui as 	seguintes ações: GetInfo, DeletePages, MergeFiles, ExtractPages, 	AddWaterMark, RemoveWaterMark, Protect, MergeSpecificPages, SetInfo, 	thumbnail, ProcessDDX;</li>
<li><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/coldfusion/service/mxml/Pop.html">Pop</a></span></span> – Proxy de acesso a gerenciamento de servidores POP;</li>
<li><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/coldfusion/air/Conflict.html">Conflict</a></span></span> – gerencia conflitos em  entre mensages do client, do server e a 	mensagem original;</li>
<li><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/coldfusion/air/Session.html">Session</a></span></span> – gerencia todas as operações entre o cliente AIR e o SQLite;</li>
<li><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/coldfusion/air/SyncManager.html">SyncManager</a></span></span> &#8211;  Classe responsável em facilitar a construção da sinconização 	entre o Servidor ColdFusion e o cliente AIR.</li>
</ul>
<p>E aqui codifiquei um exemplo prático, onde o cliente criar e visualizar em FlashPaper, recebendo a url do PDF para download &#8211; Este código depende de configuração de usuário/senha e ip cliente registrados no Administrador ColdFusion; Para implementação do MXML a seguir, você deve incorporar ao projeto o arquivo /CFIDE/scripts/AIR/cfservices.swc.</p>
<p><a href="http://www.mxstudio.com.br/wp-content/uploads/2010/08/03082010pc1.png"><img class="aligncenter size-medium wp-image-4740" src="http://www.mxstudio.com.br/wp-content/uploads/2010/08/03082010pc1-300x269.png" alt="mxml de exemplo" width="300" height="269" /></a></p>
<p>Observe que só foi usado MXML e ActionScript, obtendo o seguinte resultado:</p>
<p><a href="http://www.mxstudio.com.br/wp-content/uploads/2010/08/03082010pc2.png"><img class="aligncenter size-medium wp-image-4741" src="http://www.mxstudio.com.br/wp-content/uploads/2010/08/03082010pc2-300x133.png" alt="exemplo de tela" width="300" height="133" /></a></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->Estou focando no CFaaS, porém, o ColdFusion 9 ainda possui incontáveis recursos para agilizar o desenvolvimento, como o suporte a ORM (Hibernate) com configuração e codificação reduzida, entre outras.</p>
<p><strong>Conclusão</strong></p>
<p>Com um tempo de desenvolvimento otimizado, utilizando a tecnologia CFaaS e CFML, o prazo para a entrega de um projeto será reduzido, gerando competitividade no custo do projeto, quando comparado com outra linguagem, permitindo a absorção de mais projetos em menos tempo, aumentando o lucro, diluindo o custo do ColdFusion Server.</p>
<p><a href="http://www.mxstudio.com.br/wp-content/uploads/2010/08/03082010pc3.png"><img class="aligncenter size-medium wp-image-4742" src="http://www.mxstudio.com.br/wp-content/uploads/2010/08/03082010pc3-300x167.png" alt="grafico" width="300" height="167" /></a></p>
<p>Observação: A licença do ColdFusion Builder inclui uma licença (opcional) de Flash Builder 4.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/coldfusion/middleware-ria-da-adobe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash Remoting + ColdFusion + AMFPHP</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/flash-remoting-coldfusion-amfphp/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/flash-remoting-coldfusion-amfphp/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 23:00:56 +0000</pubDate>
		<dc:creator>Lucas_marcal</dc:creator>
				<category><![CDATA[Coldfusion]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=2833</guid>
		<description><![CDATA[Salve pessoal Historicamente eu sempre trabalhei com ColdFusion isso já tem alguns anos, porém nos últimos 2 anos e venho trabalhando bastante com PHP por motivos óbvios, a falta de programador ColdFusion visto que eu não faça mais todo o processo de desenvolvimento de um site. Porém essa semana eu tive uma demanda de um [...]]]></description>
			<content:encoded><![CDATA[<p>Salve pessoal<br />
Historicamente eu sempre trabalhei com ColdFusion isso já tem alguns anos, porém nos últimos 2 anos e venho trabalhando bastante com PHP por motivos óbvios, a falta de programador ColdFusion visto que eu não faça mais todo o processo de desenvolvimento de um site.</p>
<p>Porém essa semana eu tive uma demanda de um site feito em flash que deveria consumir métodos de um CFC (ColdFusion Componente), como eu não fazia isso desde a época que eu trabalhava com AS2 decidi escrever uma nova classe para conexão em AS3 e foi exatamente ai que meus problemas começaram.</p>
<p>Primeiramente eu teria que instalar o ColdFusion 8 na minha maquina e de preferência ele deveria rodar em cima do Apache, para isso eu usei o Tutorial do meu brother Marcio Nakano:<br />
<strong><a href="http://www.zetaiweb.com.br/blog/index.php/2008/09/instalando-servidor-apache-com-mysql-e-as-linguagens-coldfusion-e-php/">Instalando servidor Apache com Mysql e as linguagens ColdFusion e PHP.</a></strong></p>
<p>Feito isso (e depois desfeito, pois achei que isso poderia ser a causa do erro que eu descrevo a seguir) agora era a hora de escrever a classe, mas por onde começar, Google é a solução? Não foi bem assim.</p>
<p>O material que fala sobre Flash Remoting + ColdFusion na web é bem fraco e muito confuso sem falar que a grande maioria é em inglês o que dificultou um pouco mais o entendimento já que não sou um expert na língua do “Tio Sam”, abaixo estão listados alguns dos melhores que encontrei:<br />
<strong><a href="http://delicious.com/theflashcoder/flashremoting?detail=3">Delicious Flash Remoting</a></strong></p>
<p>Foi então que tive a feliz idéia de Twittar essa minha raiva e logo depois recebi uma mensagem do <a href="http://twitter.com/netoleal">Neto Leal</a> e de <a href="http://twitter.com/bribeiro">Bruno Ribeiro</a> me oferecendo ajuda, na parte do <a href="http://twitter.com/netoleal">Neto Leal</a> ele me indicou esse link:<br />
<strong><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=othertechnologies_07.html">Ativando Flash Remoting</a></strong></p>
<p>Mesmo fazendo o que o link indica o erro ainda persistia foi então que comecei a trocar idéia com o <a href="http://twitter.com/bribeiro">Bruno Ribeiro</a>, depois de algumas dicas e do envio da classe que ele mesmo usa para fazer isso eu consegui conectar e consumir um método do ColdFusion.</p>
<p>Eu sempre digo isso, mas é bom reforçar, na vida uma das melhores coisas é ter amigos e eu agradeço ao <a href="http://twitter.com/netoleal">Neto Leal</a> e ao <a href="http://twitter.com/bribeiro">Bruno Ribeiro</a> pela ajuda, então nada mais lógico do que eu postar aqui a classe que eu fiz baseada nesse longo caminho percorrido para conseguir conectar o Flash ao ColdFusion e ao AMFPHP, lembrando que essa classe foi baseada na classe do <a href="http://twitter.com/bribeiro">Bruno Ribeiro</a> e não tenho a pretensão de achar que ela é a melhor do mundo, mas pelo menos ela funciona com ColdFusion e AMFPHP, segue o código:</p>
<p><strong>RemotingConexao.as</strong><br />
[coolcode lang="actionscript"]</p>
<p>package lmcosta.remoto.cf<br />
{<br />
import flash.display.MovieClip;</p>
<p>import flash.events.Event;<br />
import flash.events.EventDispatcher;<br />
import flash.events.NetStatusEvent;</p>
<p>import flash.net.NetConnection;<br />
import flash.net.ObjectEncoding;<br />
import flash.net.Responder;</p>
<p>/**<br />
* &#8230;<br />
* @author lmcosta<br />
* @link www.lucasmarcal.com.br/blog &#8211; www.brunoribeiro.net<br />
* @return<br />
* @version 1.0<br />
*/</p>
<p>public class RemotingConexao extends MovieClip<br />
{<br />
public var _servico    :        NetConnection;<br />
public var _responder  :        Responder;<br />
public var _fcnRetorno :        Function;<br />
public var _cfc        :        String;<br />
public var _metodo     :        String;<br />
public var _resultado  :        Object;</p>
<p>public function RemotingConexao()<br />
{<br />
this._responder =                new Responder(resultado, falha);<br />
this._servico   =                new NetConnection();<br />
this._servico.objectEncoding =   ObjectEncoding.AMF0;<br />
this._servico.connect(&#8220;http://127.0.0.1:8500/flashservices/gateway&#8221;);<br />
trace(&#8220;Conectou&#8221;);<br />
}<br />
/**<br />
*<br />
* @param	$cfc = String que contém o caminho do CFC<br />
* @param	$metodo = String com o nome do método do CFC<br />
* @param	$fcnRetorno = Metodo de retorno na referencia dessa classe<br />
* @param	$args = Argumentos<br />
*/<br />
public function consome($cfc:String = &#8220;&#8221; , $metodo:String=&#8221;" , $fcnRetorno:Function = null , $args:Object = null ):void<br />
{<br />
var refCFCMetodo:String = $cfc + &#8220;.&#8221; + $metodo;</p>
<p>this._fcnRetorno = $fcnRetorno;<br />
this._cfc = $cfc;<br />
this._metodo = $metodo;</p>
<p>if ($args == null)<br />
{<br />
this._servico.call.apply(null, [refCFCMetodo, this._responder]);<br />
}<br />
else<br />
{<br />
this._servico.call.apply(null, [refCFCMetodo, this._responder].concat($args));<br />
}</p>
<p>}<br />
/**<br />
*<br />
* @param	f = Objeto que retorna Erros<br />
*/<br />
private function falha(f:Object):void<br />
{<br />
trace(&#8220;fault&#8221;+f.details);<br />
trace(&#8220;fault&#8221;+f.description);<br />
}<br />
/**<br />
*<br />
* @param	re = Objeto que retorna os resultados<br />
* @return  Retorna o valor que veio do CFC na referencia da classe<br />
*/<br />
private function resultado(re:Object):Object<br />
{<br />
this._resultado = re;</p>
<p>if (re != &#8220;&#8221;)<br />
{<br />
this._resultado = re;</p>
<p>if (this._resultado.length)<br />
{<br />
return this._fcnRetorno(this._resultado);<br />
}<br />
else<br />
{<br />
return this._fcnRetorno(false);<br />
}<br />
}<br />
else<br />
{<br />
return this._fcnRetorno(false);<br />
}<br />
}</p>
<p>}</p>
<p>}<br />
[/coolcode]</p>
<p><strong>Consumindo a classe</strong><br />
Para utilizar essa classe você deve criar um novo arquivo no Flash do tipo Actionscript 3.0, depois crie uma classe que no meu caso eu chamei de “Teste.as” e escreva o seguinte:</p>
<p><strong>Teste.as</strong><br />
[coolcode lang="actionscript"]</p>
<p>package<br />
{<br />
import flash.display.MovieClip;<br />
import lmcosta.remoto.cf.RemotingConexao;<br />
/**<br />
* &#8230;<br />
* @author lmcosta<br />
*/<br />
public class Teste extends MovieClip<br />
{<br />
public var re:RemotingConexao</p>
<p>public function Teste()<br />
{<br />
trace(&#8220;Conetando&#8230;&#8230;.&#8221;)<br />
this.re =  new RemotingConexao();<br />
this.re.consome(&#8220;remotoAS3.componente&#8221;, &#8220;ola&#8221;, this.resultadoItem, {msg:&#8221;Seja Bem vindo&#8221;});<br />
}</p>
<p>public function resultadoItem(obj:Object):void<br />
{<br />
trace(&#8220;Tudo certo hora de trampar  &#8221; + obj)<br />
}</p>
<p>}</p>
<p>}<br />
[/coolcode]</p>
<p><strong><a href="http://www.lucasmarcal.com.br/labs/TutorialFlashRemotingAS3.rar">Arquivos do Tutorial</a></strong></p>
<p>Para utilizar a mesma classe para conectar ao AMFPHP basta você trocar o caminho do Gateway na classe RemotingConexao.as e indicar a classe e o método na classe Teste.as<br />
Gostaria mais uma vez de agradecer ao <a href="http://twitter.com/bribeiro">Bruno Ribeir</a>o e ao <a href="http://twitter.com/netoleal">Neto Leal</a> pela ajuda e espero que essa classe possa ajudar a todos.<br />
Até a próxima pessoal e sigam-me pelo <a href="http://www.twitter.com/lmcosta">Twitter</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/flash-remoting-coldfusion-amfphp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CFML Evolução da Linguagem</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/coldfusion/cfml-evolucao-da-linguagem/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/coldfusion/cfml-evolucao-da-linguagem/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 11:52:37 +0000</pubDate>
		<dc:creator>Pedro Claudio</dc:creator>
				<category><![CDATA[Coldfusion]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=2591</guid>
		<description><![CDATA[O ColdFusion 9 traz uma grande implementação na linguagem, quanto a OOP, os componentes ColdFusion agora podem ser escritos inteiramente SEM TAGS, e a invocação destes componentes são realizadas através dos operadores NEW e IMPORT, onde o método init é reconhecido como construtor, e com o métodos getters e settres implícitos, ou seja, você não [...]]]></description>
			<content:encoded><![CDATA[<p>O ColdFusion 9 traz uma grande implementação na linguagem, quanto a OOP, os componentes ColdFusion agora podem ser escritos inteiramente SEM TAGS, e a invocação destes componentes são realizadas através dos operadores NEW e IMPORT, onde o método init é reconhecido como construtor, e com o métodos getters e settres implícitos, ou seja, você não precisa escrever.</p>
<p>Para exemplificar, peço licença a Hal Helms, mas fiz uma releitura do artigo de <a href="http://www.adobe.com/devnet/coldfusion/articles/supsub.html">Using Inheritance and Composition in ColdFusion Components</a>. Não vou reescreve-lo por completo, vou refazer apenas as classes, todo o restante do texto ainda é atual, então <a href="http://www.adobe.com/devnet/coldfusion/articles/supsub.html">leia</a> o artigo do Hal.</p>
<p><span> </span></p>
<p>Na parte que fala de herança, a classes Vehicle.cfc fica da seguinte forma:</p>
<div class="code actionscript3"><span style="color: #000000;">component<br />
displayname=&#8221;Vehicle&#8221;<br />
hint=&#8221;I am a Vehicle&#8221;<br />
output=&#8221;false&#8221;<br />
<span style="color: #000099;">{</span><br />
property Numeric mph;</p>
<p>public Vehicle function init()<br />
output=&#8221;false&#8221;<br />
hint=&#8221;I am constructor&#8221;<br />
<span style="color: #000099;">{</span><br />
Variables.mph = 0;<br />
return this;<br />
<span style="color: #000099;">}</span></p>
<p>public Numeric function increaseSpeed(Numeric mph)<br />
output=&#8221;false&#8221;<br />
hint=&#8221;I increase speed&#8221;<br />
<span style="color: #000099;">{</span><br />
Variables.mph = Variables.mph + Arguments.mph;<br />
return Variables.mph;<br />
<span style="color: #000099;">}</span></p>
<p>public Numeric function decreaseSpeed(Numeric mph)<br />
output=&#8221;true&#8221;<br />
hint=&#8221;I decrease speed&#8221;<br />
<span style="color: #000099;">{</span><br />
if(Variables.mph &gt;</p>
<p></span>= Variables.speedIncrement) <span style="color: #000099;">{</span><br />
Variables.mph = Variables.mph &#8211; Arguments.mph;<br />
<span style="color: #000099;">}</span> else <span style="color: #000099;">{</span><br />
stop();<br />
<span style="color: #000099;">}</span><br />
return Variables.mph;<br />
<span style="color: #000099;">}</span></p>
<p>public void function stop()<br />
output=&#8221;true&#8221;<br />
<span style="color: #000099;">{</span><br />
Variables.mph = 0;<br />
writeoutput(&#8220;Your vehicle has stopped.<span style="color: #000099;"><br />
</span>&#8220;);<br />
<span style="color: #000099;">}</span></p>
<p><span style="color: #000099;">}</span></div>
<p>E a classe Car.cfc que extende de Vehicle, fica assim:</p>
<div class="code"><span style="color: #000000;">component<br />
displayname=&#8221;Vehicle&#8221;<br />
hint=&#8221;I am a Vehicle&#8221;<br />
output=&#8221;false&#8221;<br />
<span style="color: #000099;">{</span><br />
property Numeric mph;</p>
<p>public Vehicle function init()<br />
output=&#8221;false&#8221;<br />
hint=&#8221;I am constructor&#8221;<br />
<span style="color: #000099;">{</span><br />
Variables.mph = 0;<br />
return this;<br />
<span style="color: #000099;">}</span></p>
<p>public Numeric function increaseSpeed(Numeric mph)<br />
output=&#8221;false&#8221;<br />
hint=&#8221;I increase speed&#8221;<br />
<span style="color: #000099;">{</span><br />
Variables.mph = Variables.mph + Arguments.mph;<br />
return Variables.mph;<br />
<span style="color: #000099;">}</span></p>
<p>public Numeric function decreaseSpeed(Numeric mph)<br />
e            output=&#8221;true&#8221;<br />
hint=&#8221;I decrease speed&#8221;<br />
<span style="color: #000099;">{</span><br />
if(Variables.mph &gt;</p>
<p></span>= Variables.speedIncrement) <span style="color: #000099;">{</span><br />
Variables.mph = Variables.mph &#8211; Arguments.mph;<br />
<span style="color: #000099;">}</span> else <span style="color: #000099;">{</span><br />
stop();<br />
<span style="color: #000099;">}</span><br />
return Variables.mph;<br />
<span style="color: #000099;">}</span></p>
<p>public void function stop()<br />
output=&#8221;true&#8221;<br />
<span style="color: #000099;">{</span><br />
Variables.mph = 0;<br />
writeoutput(&#8220;Your vehicle has stopped.<span style="color: #000099;"><br />
</span>&#8220;);<br />
<span style="color: #000099;">}</span></p>
<p><span style="color: #000099;">}</span><br />
d# <span style="color: #000099;"><br />
</span>&#8220;);<br />
return local.currentSpeed;<br />
<span style="color: #000099;">}</span></p>
<p>public void function stop()<br />
output=&#8221;true&#8221;<br />
<span style="color: #000099;">{</span><br />
super.stop();<br />
<span style="color: #000099;">}</span></p>
<p><span style="color: #000099;">}</span></div>
<p>e o teste das classes, TestCar.cfm, da seguinte forma:</p>
<div class="code"><span style="color: #000000;"> <span style="color: #000000;"><br />
&lt;cfscript&gt;<br />
import CF9Demo.com.pcsilva.demo.machine.Car;<br />
myCar = new Car();<br />
myCar.stepOnGas();<br />
myCar.stepOnGas();<br />
myCar.stepOnGas();<br />
myCar.stepOnGas();<br />
myCar.stepOnBrakes();<br />
myCar.stepOnBrakes();<br />
myCar.stepOnBrakes();<br />
myCar.stop();<br />
&lt;/cfscript&gt;<br />
</span><br />
</span></div>
<p>Obtendo o seguinte resultado:</p>
<p><img src="http://blog.pcsilva.com/images/cf9_demo_oop_car.JPG" alt="" /></p>
<p>Na parte que Hal fala de composição, a classe Address.cfc fica da seguinte forma:</p>
<div class="code"><span style="color: #000000;">component<br />
displayname=&#8221;Address&#8221;<br />
hint=&#8221;I am an Address&#8221;</p>
<p><span style="color: #000099;">{</span><br />
property String address1;<br />
property String address2;<br />
property String city;<br />
property String province;<br />
property String postalCode;</p>
<p>public Address function init()<br />
output=&#8221;false&#8221;<br />
hint=&#8221;I am constructor&#8221;<br />
<span style="color: #000099;">{</span><br />
return this;<br />
<span style="color: #000099;">}</span><br />
<span style="color: #000099;">}</span></p>
<p></span></div>
<p>A classe Person.cfc, assim:</p>
<div class="code"><span style="color: #000000;">component<br />
displayname=&#8221;Person&#8221;<br />
hint=&#8221;I am a Person&#8221;<br />
<span style="color: #000099;">{</span><br />
property String firstName;<br />
property String lastName;<br />
property Address address;</p>
<p>public Person function init()<br />
output=&#8221;false&#8221;<br />
hint=&#8221;I am constructor&#8221;<br />
<span style="color: #000099;">{</span><br />
return this;<br />
<span style="color: #000099;">}</span><br />
<span style="color: #000099;">}</span></p>
<p></span></div>
<p>O formulário de teste é o mesmo, a pagina de  processamento do formulário é que deve ser alterada:</p>
<div class="code"><span style="color: #000000;"><span style="color: #000000;"><br />
&lt;cfscript&gt;<br />
add = new CF9Demo.com.pcsilva.demo.people.Address();<br />
add.setAddress1(form.add1);<br />
add.setAddress2(form.add2);<br />
add.setCity(form.city);<br />
add.setProvince(form.province);<br />
add.setPostalCode(form.postalCode);<br />
user = new CF9Demo.com.pcsilva.demo.people.Person();<br />
user.setFirstName(form.firstName);<br />
user.setLastName(form.lastName);<br />
user.setAddress(add);<br />
&lt;cfscript&gt;<br />
</span></p>
<p><span style="color: #990033;">&lt;cfdump var=&#8221;#user#&#8221;</span>&gt;</p>
<p></span></div>
<p>Onde obtemos o seguinte print na tela.</p>
<p><img src="http://blog.pcsilva.com/images/cf9_demo_oop_person.JPG" alt="" /></p>
<p>Estas são algumas das novidades do ColdFusion 9, acompanhem esta semana estarei mostrando mais.</p>
<p>&#8211;<br />
Pedro Claudio<br />
Adobe User Group Manager &#8211; CFUG-BR<br />
Adobe Certified Expert<br />
Adobe Certified Professional</p>
<p>http://blog.pcsilva.com/en</p>
<p>http://twitter.com/pcsilva</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/coldfusion/cfml-evolucao-da-linguagem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColdFusion 9</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/coldfusion/coldfusion-9/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/coldfusion/coldfusion-9/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 11:37:09 +0000</pubDate>
		<dc:creator>Pedro Claudio</dc:creator>
				<category><![CDATA[Coldfusion]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=2587</guid>
		<description><![CDATA[Introdução O ColdFusion desde a versão MX vem recebendo importantes funcionalidades a cada nova versão, agora no ColdFusion 9, que já é uma inovação importante, traz consigo uma série de implementações surpreendentes e aprimoramentos que Comunidade ColdFusion desejava, superando todas as expectativas, outro avanço importante foi a criação do bugtracker público do ColdFusion. Aqui vou [...]]]></description>
			<content:encoded><![CDATA[<h2>Introdução</h2>
<p>O ColdFusion desde a versão MX vem recebendo importantes funcionalidades a cada nova versão, agora no <a href="http://www.adobe.com/products/coldfusion/">ColdFusion 9</a>, que já é uma inovação importante, traz consigo uma série de implementações surpreendentes e aprimoramentos que <a href="http://cfugbr.com/">Comunidade ColdFusion</a> desejava, superando todas as expectativas, outro avanço importante foi a criação do <a href="http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html">bugtracker público do ColdFusion</a>.</p>
<p>Aqui vou citar algumas das novas funcionalidades acreditando que você também ficará surpreso do que o ColdFusion 9 pode fazer.</p>
<h2>MXML ColdFusion (CFaaS)</h2>
<p>Esta funcionalidade, Serviço ColdFusion Exposto, é a mais impressionante, principalmente para aqueles que desenvolvem em Flex/AIR, que de forma quase padronizada para todas as linguagens server. No ColdFusion 9 deixa de existir, ou seja, você não vai precisar escrever códigos ColdFusion (CFML) para acessar serviços ColdFusion de dentro do seu projeto Flex/AIR, permitindo um projeto inteiramente em MXML e ActionScript.</p>
<h2>SpoolMail gerenciado</h2>
<p>O Administrador ColdFusion recebeu um gerenciador de e-mails, onde é possível visualizar os e-mails que deixaram de ser enviados. Um pedido antigo da <a href="http://cfugbr.com/">Comunidade ColdFusion</a>.</p>
<p><img src="http://blog.pcsilva.com/images/cf9mailsmall.png" alt="" width="420" height="305" /></p>
<h2>Variáveis Application</h2>
<p>As novas variáveis são:</p>
<ul>
<li>datasource: com esta variável você não vai precisar informar o nome do datasource em outras partes da aplicação, ou seja, tags cfquery sem o atributo datasource.</li>
<li>smtpServer: sobre escreve as definições do Administrator.</li>
<li>ormenabled: permite trabalhar com o ORM do ColdFusion 9.</li>
<li>ormsettings: define como o ORM deve trabalhar.</li>
<li>serverSideFormValidation: permite desabilitar a validação no servidor.</li>
<li>timeout: esta variável sobre escreve a tag cfsetting, mas trabalha da mesma forma que a tag &lt;cfsetting timeout=&#8221;xxx&#8221;&gt;.</li>
<li>debugipaddress: permite adicionar os IP que deseja receber debug.</li>
<li>enablerobustexception: habilita robust exception.</li>
<li>googlemapkey: onde informamos a KEY do googlemaps para que a tag cfmap possa trabalhar.</li>
</ul>
<h2>CFML Evolução da Linguagem</h2>
<p>Aqui houve realmente um revolução na linguagem CFML, para todos os servidores ColdFusion, visto que esta evolução foi padronizada pelo órgão regulador, pois o CFML é open source, então vamos a elas.</p>
<p>Componentes ColdFusion (CFC) podem ser escritos inteiramente sem tags, com implementação de todas as tags em forma de Classes, com isso você poderá usar todas as funcionalidades de tags como objetos instanciados. O uso do operador IMPORT para adicionar Classes ColdFusion (CFC), para com o operador NEW instanciar um objeto. A criação do escopo Local para utilização dentro dos métodos. E ainda todas as propriedades que declarar no CFC criarão getters e setters de forma controlada no código, mas por padrão todos as propriedades criação getter e setters.</p>
<p>Método OnServerStart no Application.cfc, com ele você vai iniciar scripts junto com o start do Servidor ColdFusion.</p>
<p>Método OnCFCRequest no Application.cfc, trabalha da mesma forma que o método onRequest, mas este é para Componentes ColdFusion. Este implemento é visto como um FIX, pois na versão anterior o método onRequest interferia em requisições de Componentes ColFusion.</p>
<h2>ORM</h2>
<p>A primeira sigla da linguagem foi DBML (Database Markup Language), isto porque o Servidor ColdFusion nasceu para facilitar a integração de paginas dinâmicas com bancos de dados. Neste ponto uma outra revolução aconteceu, isto porque, de forma nativa, o ColdFusion disponibiliza uma framework de mapeamento objeto/relacional, sim ORM Hibernate nativo, de forma tão simplificada que surpreende qualquer Java programmer, isto faz com que você deixa de escrever +/- 60% de sql nas aplicações, dando uma potabilidade excelente, em tratando-se de Banco de dados, mas permite que você crie fórmulas (SQL), controle eventos preLoad, postLoad, preInsert, postInsert, preUpdate, postUpdate, preDelete, postDelete.</p>
<h2>Integração com SharePoint e Office</h2>
<p>Com a tag cfsharepoint você pode interagir com o SharePoint de forma transparente, e com a tag cfspreadsheet você vai transformar arquivos excel em querys, ou inserir, alterar e deletar dados da planilha.</p>
<h2>ColdFusion Administrator Tool</h2>
<p>Com uma ferramenta feita em AIR, você vai poder administrar remotamente no formato desktop, vários Servidores ColdFusion, possibilitando comparar configurações e verificar necessidades de aplicar HotFix automaticamente.</p>
<p><img src="http://blog.pcsilva.com/images/CF9ServerManager.jpg" alt="" width="300" height="206" /></p>
<h2>Apache Solr/Lucene</h2>
<p>Este serviço integrado ao servidor dá um poder maior de indexação de documentos, pois ele não limita o número de documentos que podem ser indexados, e o Verity permanece.</p>
<h2>Conclusão</h2>
<p>Destaquei algumas das novas funcionalidades, existem ainda outras mais, mas o importante é <a href="http://www.adobe.com/products/coldfusion/">testar</a>, para verificar mais funcionalidades e informar os bugs no <a href="http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html">bugtraker</a>.</p>
<p>&#8211;<br />
Pedro Claudio<br />
Adobe User Group Manager &#8211; CFUG-BR<br />
Adobe Certified Expert<br />
Adobe Certified Professional</p>
<p>http://blog.pcsilva.com/en</p>
<p>http://twitter.com/pcsilva</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/coldfusion/coldfusion-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColdFusion Web Day</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/coldfusion/coldfusion-web-day/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/coldfusion/coldfusion-web-day/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 20:34:32 +0000</pubDate>
		<dc:creator>Pedro Claudio</dc:creator>
				<category><![CDATA[Coldfusion]]></category>
		<category><![CDATA[Eventos]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=2313</guid>
		<description><![CDATA[ColdFusion Web Day é o primeiro evento on-line totalmente dedicado ao compartilhamento de técnicas, conceito e mercado de uma das linguagens de programação web mais produtivas que existem. Serão 5 horas de palestras com a participação de grandes nomes da comunidade ColdFusion brasileira, compartilhando o máximo e informações sobre ColdFusion, o seu mercado no Brasil, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cfwebday.com/cfw">ColdFusion Web Day</a> é o primeiro evento on-line totalmente dedicado ao compartilhamento de técnicas, conceito e mercado de uma das linguagens de programação web mais produtivas que existem.</p>
<p>Serão 5 horas de palestras com a participação de grandes nomes da comunidade ColdFusion brasileira, compartilhando o máximo e informações sobre ColdFusion, o seu mercado no Brasil, funcionalidades, produtividade, novidades e futuras versões.</p>
<p>O evento será realizado no dia 11 de Abril de 2009 a partir das 13:30, e será totalmente on-line e gratuíto. Para isto, basta deixar seu nome e email através do menu &#8220;Quero participar&#8221;. No dia do evento basta acessar a sala de palestras através do link Acesso que estará disponível nesta mesma página.</p>
<p>Não fique de fora desta e conheça todos os diferenciais de uma das linguagens mais usadas para o desenvolvimento de aplicações ricas para a internet. <a href="http://www.cfwebday.com/cfwd2009/">Conheça o ColdFusion! </a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/coldfusion/coldfusion-web-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inserindo lista de e-mails no banco direto de um arquivo .txt</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/coldfusion/inserindo-lista-de-e-mails-no-banco-direto-de-um-arquivo-txt/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/coldfusion/inserindo-lista-de-e-mails-no-banco-direto-de-um-arquivo-txt/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 10:38:42 +0000</pubDate>
		<dc:creator>Diogo_Romano</dc:creator>
				<category><![CDATA[Coldfusion]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=2094</guid>
		<description><![CDATA[Prezados,   Depois de muito tempo faço um retorno rápido, mas creio ajudar muitos com esse tutorial. Devemos tirar esse pensamento de linguagem engessada que o coldFusion tem principalmente no mercado brasileiro, mostrar como ele pode ser poderoso e rápido se o aplicativo for bem programado.   Vamos lá: Funcionalidades – Carrega um arquivo txt, [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Prezados, </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Depois de muito tempo faço um retorno rápido, mas creio ajudar muitos com esse tutorial.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Devemos tirar esse pensamento de linguagem engessada que o coldFusion tem principalmente no mercado brasileiro, mostrar como ele pode ser poderoso e rápido se o aplicativo for bem programado.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Vamos lá:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Funcionalidades – Carrega um arquivo txt, valida e grava os resultados no banco diretamente.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Para testar acessem meu sistema de newsletter:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><a href="http://www.penseache.com.br/adm/newsfusion/login.cfm"><span style="font-size: small; font-family: Calibri;">http://www.penseache.com.br/adm/newsfusion/login.cfm</span></a></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Usuário = teste<br />
senha = teste</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Vamos aos problemas:</p>
<p>Não podemos esquecer que se trata de uma linguagem web,<span style="mso-spacerun: yes;">  </span>não tentem carregar arquivos com mais de 20 mil e-mails por que vai demorar, ele foi desenvolvido para carregar com tranqüilidade um txt com no máximo 10 mil e-mails, demora em torno de 5 minutos, dependendo da conexão.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">A primeira versão <span style="mso-spacerun: yes;"> </span>desenvolvi direto em Cold sem nenhum objeto, de forma errada, uma programação ineficiente, com mais calma vi que poderia chamar o objeto<span style="mso-spacerun: yes;">  </span>java.io.FileReader, que nesse caso grava o conteúdo na memória antes de inserir no banco.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Próximas versões:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Limitar a qtd de e-mails por arquivo para 10 mil no Max.<br />
Verificar a duplicidade dos e-mails cadastrados no perfil. ( acrescentar mais 3 min no carregamento)</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Ele carrega arquivos da seguinte forma:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><a href="mailto:email@provedor.com.br"><span style="font-size: small; font-family: Calibri;">email@provedor.com.br</span></a><br />
<a href="mailto:email@provedor.com.br"><span style="font-size: small; font-family: Calibri;">email@provedor.com.br</span></a><br />
<span style="font-size: small; font-family: Calibri;">.<br />
.<br />
</span><a href="mailto:email@provedor.com.br"><span style="font-size: small; font-family: Calibri;">email@provedor.com.br</span></a><br style="mso-special-character: line-break;" /><br style="mso-special-character: line-break;" /></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Um sob o outro, sem espaços, fiz desta forma pois a maioria dos programas que constroem essas listas o fazem desta forma.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Código:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;teste_carrega2.cfm &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;cfif isDefined(&#8216;form.envia&#8217;)&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;!&#8212; teste inicio, efetua o upload do txt &#8212;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt; mso-ansi-language: EN-US;" lang="EN-US"><span style="font-family: Calibri;">&lt;cffile action=&#8221;Upload&#8221; filefield=&#8221;arquivo&#8221; destination=&#8221;#getDirectoryFromPath(getTemplatePath())#&#8221; nameconflict=&#8221;overwrite&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;!&#8212;&#8212;&#8212;&#8212; Seta o arquivo &#8212;&#8212;&#8212;&#8212;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;cfset arquivo = #cffile.serverFile#&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;!&#8212;&#8212; função que verifica a integridade do e-mail,<span style="mso-spacerun: yes;">  </span>não foi desenvolvida por mim &#8211;</span></span><span style="font-size: 10pt; font-family: Wingdings; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-char-type: symbol; mso-symbol-font-family: Wingdings;"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings;">à</span></span><span style="font-size: 10pt;"><br />
<span style="font-family: Calibri;">&lt;cfscript&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span>function IsEmail(str) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">         </span>if (REFindNoCase(&#8220;^['_a-z0-9-]+(.['_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*.(([a-z]{2,3})|(aero|coop|info|museum|name))$&#8221;,str)) return TRUE;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">        </span>else return FALSE;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">                </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">                </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;/cfscript&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;cfscript&gt;<span style="mso-spacerun: yes;">               </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">fr = createobject(&#8220;java&#8221;,&#8221;java.io.FileReader&#8221;);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">fr.init(&#8220;#getDirectoryFromPath(getTemplatePath())#\#arquivo#&#8221;);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">br = createobject(&#8220;java&#8221;,&#8221;java.io.BufferedReader&#8221;);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">br.init(fr);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">email_errado =0;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span>email_inserido =0;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span>queryvirt = queryNew(&#8220;NEW_EMAIL&#8221;); </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span>while (br.ready()) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>linha = br.readLine();</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>if(IsEmail(#linha#) EQ &#8220;true&#8221;){</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 2;">                               </span><span style="mso-spacerun: yes;"> </span>email_inserido = email_inserido + 1;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 2;">                               </span><span style="mso-spacerun: yes;"> </span>QueryAddRow(queryvirt);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 2;">                               </span><span style="mso-spacerun: yes;"> </span>QuerySetCell(queryvirt, &#8220;NEW_EMAIL&#8221; , &#8220;#linha#&#8221; );</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">    </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>else</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>{</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 2;">                               </span><span style="mso-spacerun: yes;"> </span>email_errado = email_errado + 1;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">br.close();</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;/cfscript&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;cfquery name=&#8221;queryvirt&#8221; dbtype=&#8221;query&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">SELECT NEW_EMAIL FROM</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">queryvirt</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;/cfquery&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">   </span>&lt;cfloop query=&#8221;queryvirt&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">   </span>&lt;cfquery datasource=&#8221;#dsn#&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>INSERT INTO T_NEWSLATER</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>(NEW_EMAIL, NEW_CATEGORIA, email)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>VALUES</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>(&#8216;#NEW_EMAIL#&#8217;,'#form.categoria#&#8217;,'#session.email#&#8217;)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">    </span>&lt;/cfquery&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>&lt;/cfloop&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;/cfif&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Explicando os pontos importantes:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-family: Calibri;"><span style="font-size: small;">Crio o objeto JAVA </span><span style="font-size: 10pt; line-height: 115%;">java.io.FileReader</span><br />
<span style="font-size: 10pt; line-height: 115%;">fr = createobject(&#8220;java&#8221;,&#8221;java.io.FileReader&#8221;);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-family: Calibri;"><span style="font-size: small;">Carrego o mesmo<br />
</span><span style="font-size: 10pt;">fr.init(&#8220;#getDirectoryFromPath(getTemplatePath())#\#arquivo#&#8221;);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">Crio uma query virtual para armazenar os valores antes dos mesmos serem validados</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">queryvirt = queryNew(&#8220;NEW_EMAIL&#8221;);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-family: Calibri;"><span style="font-size: small;">Se o retorno da função for “true” incrementa as variáveis</p>
<p></span><span style="font-size: 10pt;">if(IsEmail(#linha#) EQ &#8220;true&#8221;){</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 2;">                               </span><span style="mso-spacerun: yes;"> </span>email_inserido = email_inserido + 1;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">Aqui vem o pulo do gato:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">1 Faço um select na no e-mail</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">2 Faço um loop inserindo os e-mails no banco</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;cfquery name=&#8221;queryvirt&#8221; dbtype=&#8221;query&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">SELECT NEW_EMAIL FROM</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">queryvirt</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;">&lt;/cfquery&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">   </span>&lt;cfloop query=&#8221;queryvirt&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">   </span>&lt;cfquery datasource=&#8221;#dsn#&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>INSERT INTO T_NEWSLATER</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>(NEW_EMAIL, NEW_CATEGORIA, email)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>VALUES</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>(&#8216;#NEW_EMAIL#&#8217;,'#form.categoria#&#8217;,'#session.email#&#8217;)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">    </span>&lt;/cfquery&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 10pt;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>&lt;/cfloop&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Ai vem o código completo:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">O mesmo foi escrito bem rápido, desculpe pela identação, não tive muito tempo, estou programando para o Governo.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;cfif not isDefined(&#8220;session.admin&#8221;) or not isDefined(&#8220;session.usuario&#8221;)&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;cflocation url=&#8221;login.cfm&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;/cfif&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;cfif isDefined(&#8216;form.envia&#8217;)&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;!&#8212; teste inicio &#8212;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;cffile action=&#8221;Upload&#8221; filefield=&#8221;arquivo&#8221; destination=&#8221;#getDirectoryFromPath(getTemplatePath())#&#8221; nameconflict=&#8221;overwrite&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;!&#8212;&#8212;&#8212;&#8212; Seta o arquivo &#8212;&#8212;&#8212;&#8212;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;cfset arquivo = #cffile.serverFile#&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;cfscript&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span>function IsEmail(str) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">         </span>if (REFindNoCase(&#8220;^['_a-z0-9-]+(.['_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*.(([a-z]{2,3})|(aero|coop|info|museum|name))$&#8221;,str)) return TRUE;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">        </span>else return FALSE;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">                  </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;/cfscript&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;cfscript&gt;<span style="mso-spacerun: yes;">               </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">fr = createobject(&#8220;java&#8221;,&#8221;java.io.FileReader&#8221;);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">fr.init(&#8220;#getDirectoryFromPath(getTemplatePath())#\#arquivo#&#8221;);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">br = createobject(&#8220;java&#8221;,&#8221;java.io.BufferedReader&#8221;);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">br.init(fr);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">email_errado =0;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span>email_inserido =0;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span>queryvirt = queryNew(&#8220;NEW_EMAIL&#8221;); </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span>while (br.ready()) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>linha = br.readLine();</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>if(IsEmail(#linha#) EQ &#8220;true&#8221;){</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 2;">                               </span><span style="mso-spacerun: yes;"> </span>email_inserido = email_inserido + 1;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 2;">                               </span><span style="mso-spacerun: yes;"> </span>QueryAddRow(queryvirt);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 2;">                               </span><span style="mso-spacerun: yes;"> </span>QuerySetCell(queryvirt, &#8220;NEW_EMAIL&#8221; , &#8220;#linha#&#8221; );</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">    </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>else</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>{</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 2;">                               </span><span style="mso-spacerun: yes;"> </span>email_errado = email_errado + 1;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;"> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">br.close();</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;/cfscript&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;cfquery name=&#8221;queryvirt&#8221; dbtype=&#8221;query&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">SELECT NEW_EMAIL FROM</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">queryvirt</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;/cfquery&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">   </span>&lt;cfloop query=&#8221;queryvirt&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">   </span>&lt;cfquery datasource=&#8221;#dsn#&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>INSERT INTO T_NEWSLATER</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>(NEW_EMAIL, NEW_CATEGORIA, email)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>VALUES</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">        </span>(&#8216;#NEW_EMAIL#&#8217;,'#form.categoria#&#8217;,'#session.email#&#8217;)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span><span style="mso-spacerun: yes;">    </span>&lt;/cfquery&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>&lt;/cfloop&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;/cfif&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;style type=&#8221;text/css&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;!&#8211;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">.style1 {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>font-family: Verdana, Arial, Helvetica, sans-serif;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>font-size: 10px;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>font-weight: bold;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">.style2 {color: #FF0000}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">#apDiv1 {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>position:absolute;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>left:0px;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>top:0px;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>width:277px;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>height:93px;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-tab-count: 1;">                </span>z-index:1;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&#8211;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;/style&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;body topmargin=&#8221;0&#8243; leftmargin=&#8221;0&#8243;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;form action=&#8221;teste_carrega2.cfm&#8221; method=&#8221;post&#8221; enctype=&#8221;multipart/form-data&#8221;&gt;<br />
&lt;table width=&#8221;274&#8243; border=&#8221;0&#8243; cellspacing=&#8221;0&#8243; cellpadding=&#8221;0&#8243;&gt;<br />
&lt;tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;td colspan=&#8221;2&#8243;&gt; &lt;span class=&#8221;style1&#8243;&gt;Carregar arquivo de lista (texto)&lt;/span&gt;&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">  </span>&lt;/tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">  </span>&lt;tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;td colspan=&#8221;2&#8243;&gt;&lt;cfif isDefined(&#8216;form.envia&#8217;)&gt;&lt;table width=&#8221;276&#8243; border=&#8221;0&#8243; cellpadding=&#8221;0&#8243; cellspacing=&#8221;0&#8243; class=&#8221;style1&#8243;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">      </span>&lt;tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">        </span>&lt;td width=&#8221;84&#8243; bgcolor=&#8221;#CCFF33&#8243;&gt;Inseridos&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">        </span>&lt;td width=&#8221;192&#8243; bgcolor=&#8221;#CCFF33&#8243;&gt;&lt;cfoutput&gt;&lt;span class=&#8221;style2&#8243;&gt;#email_inserido#&lt;/span&gt;&lt;/cfoutput&gt;&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">      </span>&lt;/tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">      </span>&lt;tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">        </span>&lt;td bgcolor=&#8221;#CCFF33&#8243;&gt;Errados&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">        </span>&lt;td bgcolor=&#8221;#CCFF33&#8243;&gt;&lt;cfoutput&gt;&lt;span class=&#8221;style2&#8243;&gt;#email_errado#&lt;/span&gt;&lt;/cfoutput&gt;&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">      </span>&lt;/TR&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;/table&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;/cfif&gt;&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;/tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">  </span>&lt;tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;td width=&#8221;56&#8243; class=&#8221;style1&#8243;&gt;Arquivo&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;td width=&#8221;218&#8243;&gt;&lt;input name=&#8221;arquivo&#8221; type=&#8221;file&#8221; class=&#8221;style1&#8243; id=&#8221;arquivo&#8221;&gt;&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">  </span>&lt;/tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">  </span>&lt;tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;td class=&#8221;style1&#8243;&gt;Categoria&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;td&gt;&lt;input name=&#8221;categoria&#8221; type=&#8221;text&#8221; class=&#8221;style1&#8243; id=&#8221;categoria&#8221;&gt;&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">  </span>&lt;/tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">  </span>&lt;tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;td&gt;&amp;nbsp;&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;td&gt;&lt;div align=&#8221;right&#8221;&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">      </span>&lt;input name=&#8221;envia&#8221; type=&#8221;submit&#8221; class=&#8221;style1&#8243; id=&#8221;envia&#8221; value=&#8221;Carregar lista&#8221; /&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">    </span>&lt;/div&gt;&lt;/td&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;">  </span>&lt;/tr&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;/table&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal;"><span style="font-size: 9pt; color: #548dd4;"><span style="font-family: Calibri;">&lt;/form&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">O algoritmo acima está funcional, basta criar o CFM e se divertir&#8230;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">O programa pode ser muito otimizado ainda, vocês tem inteira liberdade para tal.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Grande abraço e bom 2009 !</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">Diogo Romano Souza</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: small; font-family: Calibri;">MSN vibeair@hotmail.com</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/coldfusion/inserindo-lista-de-e-mails-no-banco-direto-de-um-arquivo-txt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColdFusion 8 e Imagens</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/coldfusion/coldfusion-8-e-imagens/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/coldfusion/coldfusion-8-e-imagens/#comments</comments>
		<pubDate>Thu, 01 May 2008 23:59:32 +0000</pubDate>
		<dc:creator>Pedro Claudio</dc:creator>
				<category><![CDATA[Coldfusion]]></category>
		<category><![CDATA[CFML]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=1340</guid>
		<description><![CDATA[Introdução Já há algum tempo, não escrevo, o ColdFusion 8 foi lançado, então escolhi a maior novidade (IMHO) desta versão, que é a criação/edição/manipulação de imagens online, o mais apropriado seria uma abordagem mais ampla e resumida do assunto ColdFusion 8, mas irá achar o assunto bem interessante. Não vou me aprofundar em definir e [...]]]></description>
			<content:encoded><![CDATA[<h4>Introdução</h4>
<p>Já há algum tempo, não escrevo, o ColdFusion 8 foi lançado, então escolhi a maior novidade (IMHO) desta versão, que é a criação/edição/manipulação de imagens online, o mais apropriado seria uma abordagem mais ampla e resumida do assunto ColdFusion 8, mas irá achar o assunto bem interessante.</p>
<p>Não vou me aprofundar em definir e muito menos descrever as funções, devido a grande quantidade de funções (<a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions-pt0_11.html" target="_blank">50</a>)para tratamento de imagens agregadas nesta versão CF, vou exibir um cfc comentado e simular várias execuções, aproveitem.</p>
<h4>Pré-requisito</h4>
<p>ColdFusion 8 (<a href="http://www.adobe.com/products/coldfusion/" target="_blank">download</a>)</p>
<h4>Conceito</h4>
<p>Vou trabalhar com uma nova tag, a <a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_i_02.html" target="_blank">CFIMAGE</a>, com apenas uma action (writeToBrowser), que simplesmente converte a imagem da memória para arquivo, escreve em html a tag IMG apontando para o caminho da imagem gerada na conversão.</p>
<p>Os demais processos embutidos no CFC trabalharão com as funções:</p>
<ul>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_in-k_15.html" target="_blank">IsImage</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_in-k_16.html" target="_blank">IsImageFile</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_37.html" target="_blank">ImageRead</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_34.html" target="_blank">imageNew</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_09.html" target="_blank">ImageCopy</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_22.html" target="_blank">ImageFlip</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_10.html" target="_blank">ImageCrop</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_36.html" target="_blank">ImagePaste</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_47.html" target="_blank">ImageSetDrawingTransparency</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_44.html" target="_blank">ImageSetBackgroundColor</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_49.html" target="_blank">ImageShear</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_39.html" target="_blank">ImageResize</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_46.html" target="_blank">ImageSetDrawingColor</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_14.html" target="_blank">ImageDrawLine</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_43.html" target="_blank">ImageSetAntialiasing</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_19.html" target="_blank">ImageDrawRect</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_21.html" target="_blank">ImageDrawText</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_07.html" target="_blank">ImageBlur</a></li>
<li><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_18.html" target="_blank">ImageDrawQuadraticCurve</a></li>
</ul>
<p>A partir das funções CFML  8 crio então os métodos para manipulações específicas, de forma a facilitar a utilização e minimizar os possíveis erros, são eles:</p>
<ul>
<li>ImageBin</li>
<li>ImageReflection</li>
<li>ImageGradient</li>
<li>Text2Image</li>
<li>ImageShadow</li>
<li>ImageRounded</li>
</ul>
<h4>O componente</h4>
<div style="auto;">
<pre><span style="#993300;">&lt;cfcomponent&gt;</span>
<span style="#cccccc;">&lt;!--- método testa o tipo da variável, que sempre deve ser um caminho de imagem ou uma variável do tipo imagem ---&gt;</span>
<span style="#993300;">&lt;cffunction name=<span style="#000099;">"ImageBin"</span> returntype=<span style="#000099;">"any"</span>&gt;</span>
<span style="#cccccc;">&lt;!--- caminho da imagem ou variável do tipo imagem ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"image"</span> 		   type=<span style="#000099;">"any"</span>     required=<span style="#000099;">"yes"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- método util apenas quando criamos imagens dantro deste método, largura da imagem ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"width"</span>           type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"150"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- método util apenas quando criamos imagens dantro deste método, altura da imagem ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"height"</span>          type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"50"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- método util apenas quando criamos imagens dantro deste método, dor de fundo da imagem ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"backgroundColor"</span> type=<span style="#000099;">"string"</span>  required=<span style="#000099;">"no"</span> default=<span style="#000099;">"##FFFFFF"</span> &gt;</span>
<span style="#993300;">&lt;cfscript&gt;</span>
//Objeto não é do tipo imagem
if(NOT <span style="#000099;">IsImage</span>(Arguments.image)){
//Objeto é um arquivo de imagem
if(<span style="#000099;">isImageFile</span>(Arguments.image)){
//lê o arquivo de imagem e retorna o binário da imagem
return <span style="#000099;">ImageRead</span>(Arguments.image);
}
//cria imagem e retorna o binário da imagem
return <span style="#000099;">imageNew</span>(<span style="#000099;">""</span>, Arguments.width, Arguments.height, <span style="#000099;">"rgb"</span>, Arguments.backgroundColor);
}
//retorna o binário da imagem
return Arguments.image;
<span style="#993300;">&lt;/cfscript&gt;</span>
<span style="#993300;">&lt;/cffunction&gt;</span>
<span style="#cccccc;">&lt;!--- método usado para criar reflexo da imagem ---&gt;</span>
<span style="#993300;">&lt;cffunction name=<span style="#000099;">"ImageReflection"</span> returntype=<span style="#000099;">"any"</span>&gt;</span>
<span style="#cccccc;">&lt;!--- caminho da imagem ou variável do tipo imagem ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"image"</span>           type=<span style="#000099;">"any"</span>     required=<span style="#000099;">"yes"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- se haverá reflexão ou não ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"posicao"</span>      type=<span style="#000099;">"boolean"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"false"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- inverte direção da reflexão---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"right"</span>           type=<span style="#000099;">"boolean"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"true"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- inverte direção do gradiente ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"gdirection"</span>      type=<span style="#000099;">"boolean"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"false"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- cor de fundo da reflexão ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"backgroundColor"</span> type=<span style="#000099;">"string"</span>  required=<span style="#000099;">"no"</span> default=<span style="#000099;">"##FFFFFF"</span> &gt;</span>
<span style="#993300;">&lt;cfscript&gt;</span>
//carrega variável com binario da imagem
var img1  = <span style="#000099;">ImageBin</span>(Arguments.image);
<span style="#008000;">//cria uma copia da imagem
</span>			var Copy = <span style="#000099;">ImageCopy</span>(img1, 0, 0, img1.width, img1.height);
//cria imagem de fundo da reflexão
var img  = ImageNew(<span style="#000099;">""</span>, img1.width*2.17, img1.height*2, <span style="#000099;">"rgb"</span>, Arguments.backgroundColor);
<span style="#008000;">//inicia variavel
</span>			var x = 0;
<span style="#008000;">//inicia variavel
</span>			var direction = 1.4;
<span style="#008000;">//inicia variavel
</span>			var width = img1.width;
<span style="#008000;">//inicia variavel
</span>			var height = img.height*.7;
//modifica posição inicial da imagem caso a rfração seja em cima da imagem
<span style="#000099;">if</span>(Not Arguments.right and Arguments.posicao){
direction *=-1;
x = img.width - img1.width;
}
//espelhamento da visão da imagem
<span style="#000099;">ImageFlip</span>(Copy, <span style="#000099;">"vertical"</span>);
<span style="#008000;">//corte em 85% da altura da imagem
</span>				ImageCrop(Copy, 0, 0,  img1.width, Round(img1.height * .85));
<span style="#008000;">//aplica gradiente na imagem
</span>				Copy = <span style="#000099;">ImageGradient</span>(Copy,Arguments.gdirection,false,1,100,Arguments.backgroundColor);
//uni as imagem original com fundo da reflexão
<span style="#000099;">ImagePaste</span>(img,img1,x,0);
<span style="#008000;">//aplica transparencia na imagem unida
</span>				<span style="#000099;">ImageSetDrawingTransparency</span>(img,45);
<span style="#008000;">//aplica cor de fundo na imagem unida
</span>				<span style="#000099;">ImageSetBackgroundColor</span>(Copy,Arguments.backgroundColor);
//verifica direção da reflexão
<span style="#000099;">if</span>(Arguments.posicao){
<span style="#008000;">//trnasforma imagem
</span>					<span style="#000099;">ImageShear</span>(Copy,direction,<span style="#000099;">"horizontal"</span>, <span style="#000099;">"bicubic"</span>);
<span style="#008000;">//redimenciona imagem
</span>					ImageResize(Copy,<span style="#000099;">"100%"</span>,<span style="#000099;">"50%"</span>,<span style="#000099;">"MEDIUMQUALITY"</span>,2);
<span style="#008000;">//redefine variavel
</span>					width = img.width;
<span style="#008000;">//redefine variavel
</span>					height = img.height *.71;
}else{
<span style="#008000;">//redimenciona imagem
</span>					ImageResize(Copy,<span style="#000099;">"100%"</span>,<span style="#000099;">"70%"</span>,<span style="#000099;">"MEDIUMQUALITY"</span>,2);
}
//uni imagem alterada com a refração
<span style="#000099;">ImagePaste</span>(img,Copy, 0,img1.height);
<span style="#008000;">//corta imagem no tamanho correto
</span>				<span style="#000099;">ImageCrop</span>(img, 0,0,width,height);
<span style="#008000;">//retorna imagem
</span>			return img;
<span style="#993300;">&lt;/cfscript&gt;</span>
<span style="#993300;">&lt;/cffunction&gt;</span>
<span style="#cccccc;">&lt;!--- método para aplicar gradiente na imagem informada---&gt;</span>
<span style="#993300;">&lt;cffunction name=<span style="#000099;">"ImageGradient"</span> returntype=<span style="#000099;">"any"</span>&gt;</span>
<span style="#cccccc;">&lt;!--- caminho da imagem ou variável do tipo imagem ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"image"</span> 		   type=<span style="#000099;">"any"</span>     required=<span style="#000099;">"yes"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- direção do gradiente vertical/horizontal ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"direction"</span>	   type=<span style="#000099;">"boolean"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"false"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- inicio do gradiente ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"position"</span>		   type=<span style="#000099;">"boolean"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"false"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- afastamento do gradiente ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"limit"</span>		   type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"1"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- alpha ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"index"</span>		   type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"100"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- cor do gradiente ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"backgroundColor"</span> type=<span style="#000099;">"string"</span>  required=<span style="#000099;">"no"</span> default=<span style="#000099;">"##FFFFFF"</span> &gt;</span>
<span style="#993300;">&lt;cfscript&gt;</span>
//carrega variável com binario da imagem
var img  = <span style="#000099;">ImageBin</span>(Arguments.image);
//limita final do gradiente até o limite percentual informado
var h 	 = img.height*Arguments.limit;
<span style="#008000;">//inicia variavel
</span>			var w 	 = img.width;
<span style="#008000;">//divide o alpha em linhas de acordo com a altura
</span>			var i    = Arguments.index/h;
<span style="#008000;">//inicia variavel
</span>			var per  = 0;
<span style="#008000;">//inicia variavel
</span>			var k    = 0;
<span style="#008000;">//inicia variavel
</span>			var j    = 0;
//verifica a direção do gradiente
<span style="#000099;">if</span>(Arguments.direction){
//modifica direção do gradiente
h = w*Arguments.limit;
//altera divisão
i = Arguments.index/h;
}
<span style="#008000;">// aplica a cor do gradiente
</span>				<span style="#000099;">ImageSetDrawingColor</span>(img, Arguments.backgroundColor);
<span style="#008000;">// para cada linha (das 100) em Arguments.index/h aplica uma transparencia diferente
</span>				for(;k lte h;k++){
<span style="#008000;">// redefine variavel
</span>					j = k;
//corrige numero dependendo da posição, sutil diferença
<span style="#000099;">if</span>(Arguments.position) j = h-k;
<span style="#008000;">//calcula percentual de transparencia corrente
</span>					per = 100 - round(i*j*(1.8*Arguments.limit));
<span style="#008000;">//corrige percentual
</span>					<span style="#000099;">if</span>(per lt 0) per = 0;
<span style="#008000;">//aplica tranparencia
</span>					<span style="#000099;">ImageSetDrawingTransparency</span>(img, per);
//verifica direção do gradiente
<span style="#000099;">if</span>(Arguments.direction){
//torna o gradiente visivel começando pela direita
<span style="#000099;">ImageDrawLine</span>(img, k, 0, k,img.height);
}else{
//torna o gradiente visivel cpomeçando pela esquerda
<span style="#000099;">ImageDrawLine</span>(img, 0, k, img.width, k);
}
}
<span style="#008000;">//retorna imagem
</span>			return img;
<span style="#993300;">&lt;/cfscript&gt;</span>
<span style="#993300;">&lt;/cffunction&gt;</span>
<span style="#cccccc;">&lt;!--- método aplica texto em imagem ---&gt;</span>
<span style="#993300;">&lt;cffunction name=<span style="#000099;">"Text2Image"</span> returntype=<span style="#000099;">"any"</span>&gt;</span>
<span style="#cccccc;">&lt;!--- texto ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"text"</span>            type=<span style="#000099;">"string"</span>  required=<span style="#000099;">"no"</span> default=<span style="#000099;">"teste"</span> &gt;</span>
<span style="#cccccc;">&lt;!--- caminho da imagem ou variável do tipo imagem ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"img"</span>             type=<span style="#000099;">"any"</span>     required=<span style="#000099;">"no"</span> default=<span style="#000099;">""</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"width"</span>           type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"150"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"height"</span>          type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"50"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"x"</span>               type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"10"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"y"</span>               type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"25"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"backgroundColor"</span> type=<span style="#000099;">"string"</span>  required=<span style="#000099;">"no"</span> default=<span style="#000099;">"##FFFFFF"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"textColor"</span>       type=<span style="#000099;">"string"</span>  required=<span style="#000099;">"no"</span> default=<span style="#000099;">"##000000"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"font"</span>            type=<span style="#000099;">"string"</span>  required=<span style="#000099;">"no"</span> default=<span style="#000099;">"Trebuchet MS"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"size"</span>            type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"25"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"style"</span>           type=<span style="#000099;">"string"</span>  required=<span style="#000099;">"no"</span> default=<span style="#000099;">"bold"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"strikethrough"</span>   type=<span style="#000099;">"boolean"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"no"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"underline"</span>       type=<span style="#000099;">"boolean"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"no"</span> &gt;</span>
<span style="#993300;">&lt;cfscript&gt;</span>
//carrega variável com binario da imagem
var image  = <span style="#000099;">ImageBin</span>(Arguments.img,Arguments.width, Arguments.height, Arguments.backgroundColor);
<span style="#008000;">//inicia variavel
</span>			var Styles = <span style="#000099;">StructNew</span>();
<span style="#008000;">// tipo da fonte
</span>				Styles.font          = Arguments.font;
<span style="#008000;">// tamanho da fonte
</span>				Styles.size          = Arguments.size;
<span style="#008000;">// bold/normal
</span>				Styles.style         = Arguments.style;
// uso de strikethrough ou não
Styles.strikethrough = Arguments.strikethrough;
// underline ou não
Styles.underline     = Arguments.underline;
<span style="#008000;">//prepara imagem para receber o texto
</span>				<span style="#000099;">ImageSetAntialiasing</span>(image, <span style="#000099;">"ON"</span>);
<span style="#008000;">// prepara cor do texto
</span>				<span style="#000099;">ImageSetDrawingColor</span>(image, Arguments.textColor);
<span style="#008000;">// aplica o texto na imagem
</span>				<span style="#000099;">ImageDrawText</span>(image, Arguments.text, Arguments.x, Arguments.y, Styles);
<span style="#008000;">//retorna imagem
</span>			return image;
<span style="#993300;">&lt;/cfscript&gt;</span>
<span style="#993300;">&lt;/cffunction&gt;</span>
<span style="#993300;">&lt;cffunction name=<span style="#000099;">"ImageShadow"</span> returnType=<span style="#000099;">"any"</span>&gt;</span>
<span style="#cccccc;">&lt;!--- caminho da imagem ou variável do tipo imagem ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"image"</span>           type=<span style="#000099;">"any"</span> 	required=<span style="#000099;">"true"</span>&gt;</span>
<span style="#cccccc;">&lt;!--- define para que lado a sombra será aplicada ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"position"</span>        type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"1"</span>&gt;</span>
<span style="#cccccc;">&lt;!--- distancia da sombra ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"off"</span>             type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"1.5"</span>&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"backgroundColor"</span> type=<span style="#000099;">"string"</span>  required=<span style="#000099;">"no"</span> default=<span style="#000099;">"##FFFFFF"</span> &gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"shadow"</span>          type=<span style="#000099;">"string"</span> 	required=<span style="#000099;">"no"</span> default=<span style="#000099;">"##A0A0A0"</span>&gt;</span>
<span style="#cccccc;">&lt;!--- intensidade do blur---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"blur"</span> 	          type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"10"</span>&gt;</span>
<span style="#993300;">&lt;cfscript&gt;</span>
var i = 2*Arguments.off;
//carrega variável com binario da imagem
var img  = <span style="#000099;">ImageBin</span>(arguments.image);
<span style="#008000;">//inicia variavel
</span>			var img1 = <span style="#000099;">""</span>;
//verifica direção da sombra
<span style="#000099;">if</span>(Arguments.position){
//cria imagem com com dimensões para tornar sombra visivel
img1 = ImageBin(<span style="#000099;">''</span>,img.width + i,img.height + i,Arguments.backgroundColor);
}else{
//cria imagem com com dimensões para tornar sombra visivel
img1 = ImageBin(<span style="#000099;">''</span>,img.width + (i*2),img.height + (i*2),Arguments.backgroundColor);
}
<span style="#008000;">//aplica cor da sombra na imagem criada
</span>				<span style="#000099;">ImageSetDrawingColor</span>(img1,Arguments.shadow);
//verifica lado que será aplicada a sombra
<span style="#000099;">switch</span>(Arguments.position){
case 1:
<span style="#008000;">//cria sombra
</span>						<span style="#000099;">ImageDrawRect</span>(img1, Arguments.off, Arguments.off, img.width, img.height, <span style="#000099;">"yes"</span>);
<span style="#008000;">//aplica blur
</span>						<span style="#000099;">ImageBlur</span>(img1,Arguments.blur);
<span style="#008000;">//uni as imagens
</span>						<span style="#000099;">ImagePaste</span>(img1,img,0,0);
break;
case 2:
<span style="#008000;">//cria sombra
</span>						<span style="#000099;">ImageDrawRect</span>(img1, Arguments.off, 0, img.width, img.height, <span style="#000099;">"yes"</span>);
<span style="#008000;">//aplica blur
</span>						<span style="#000099;">ImageBlur</span>(img1,Arguments.blur);
<span style="#008000;">//uni as imagens
</span>						<span style="#000099;">ImagePaste</span>(img1,img,0,Arguments.off);
break;
case 3:
<span style="#008000;">//cria sombra
</span>						<span style="#000099;">ImageDrawRect</span>(img1, 0, 0, img.width, img.height, <span style="#000099;">"yes"</span>);
<span style="#008000;">//aplica blur
</span>						<span style="#000099;">ImageBlur</span>(img1,Arguments.blur);
<span style="#008000;">//uni as imagens
</span>						<span style="#000099;">ImagePaste</span>(img1,img,Arguments.off,Arguments.off);
break;
case 4:
<span style="#008000;">//cria sombra
</span>						<span style="#000099;">ImageDrawRect</span>(img1, 0, Arguments.off, img.width, img.height, <span style="#000099;">"yes"</span>);
<span style="#008000;">//aplica blur
</span>						<span style="#000099;">ImageBlur</span>(img1,Arguments.blur);
<span style="#008000;">//uni as imagens
</span>						<span style="#000099;">ImagePaste</span>(img1,img,Arguments.off,0);
break;
}
<span style="#008000;">//retorna imagem
</span>			return img1;
<span style="#993300;">&lt;/cfscript&gt;</span>
<span style="#993300;">&lt;/cffunction&gt;</span>
<span style="#993300;">&lt;cffunction name=<span style="#000099;">"ImageRounded"</span> returntype=<span style="#000099;">"any"</span>&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"image"</span>  		   type=<span style="#000099;">"any"</span> 	  required=<span style="#000099;">"true"</span>&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"off"</span>   		   type=<span style="#000099;">"numeric"</span> required=<span style="#000099;">"no"</span> default=<span style="#000099;">"10"</span>&gt;</span>
<span style="#cccccc;">&lt;!--- cor do gradiente ---&gt;</span>
<span style="#993300;">&lt;cfargument name=<span style="#000099;">"backgroundColor"</span> type=<span style="#000099;">"string"</span>  required=<span style="#000099;">"no"</span> default=<span style="#000099;">"##FFFFFF"</span> &gt;</span>
<span style="#993300;">&lt;cfscript&gt;</span>
//carrega variável com binario da imagem
var img  = <span style="#000099;">ImageBin</span>(arguments.image);
<span style="#008000;">//inicia variavel
</span>			var i = 0;
<span style="#008000;">//grau da curva dos cantos
</span>			var index = Arguments.off;
<span style="#008000;">//aplica cor de fundo
</span>				<span style="#000099;">ImageSetDrawingColor</span>(img,Arguments.backgroundColor);
<span style="#008000;">//prepara imagem
</span>				<span style="#000099;">ImageSetAntialiasing</span>(img,<span style="#000099;">"ON"</span>);
<span style="#008000;">//aplica uma linha curva para grau
</span>				for(i=0;i lte index;i++){
ImageDrawQuadraticCurve(img,i,0,i/(index/2),i/(index/2),0,i);
ImageDrawQuadraticCurve(img,img.width-i,0,img.width-i/(index/2),i/(index/2),img.width,i);
ImageDrawQuadraticCurve(img,0,img.height-(index-i),(index-i)/(index/2),img.height-((index-i)/(index/2)),(index-i),img.height);
ImageDrawQuadraticCurve(img,img.width,img.height-(index-i),img.width-((index-i)/(index/2)),img.height-((index-i)/(index/2)),img.width-(index-i),img.height);
}
<span style="#008000;">//retorna imagem
</span>			return img;
<span style="#993300;">&lt;/cfscript&gt;</span>
<span style="#993300;">&lt;/cffunction&gt;</span>
<span style="#993300;">&lt;/cfcomponent&gt;</span></pre>
</div>
<h4>Exibindo resultados</h4>
<p>O componente é bem variado quanto tipos de transformações, colocarei agora os resultados que imagino sejam possível, mas você pode achar mais alguns.</p>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg171701618911845636.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).Text2Image(&#8216;pcsilva&#8217;,&#8221;,100,35,10,25,&#8217;##FF0000&#8242;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg3477841042032849768.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).Text2Image(&#8216;pcsilva&#8217;,&#8221;,100,35,10,25,&#8217;##FF0000&#8242;,&#8217;##FFFFFF&#8217;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg4289039260121974509.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageGradient(&#8216;cf8.jpg&#8217;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg996013277162879731.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageGradient(&#8216;cf8.jpg&#8217;,true)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg7566309307247356240.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageGradient(&#8216;cf8.jpg&#8217;,true,true)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg-402407146947593768.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageGradient(&#8216;cf8.jpg&#8217;,true,true,.55)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg2942200302430507072.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageGradient(&#8216;cf8.jpg&#8217;,false,true,.55)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg7175597984730692930.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageGradient(&#8216;cf8.jpg&#8217;,false,true,.55,70)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg-3417231784475157673.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageGradient(&#8216;cf8.jpg&#8217;,false,true,.55,70,&#8217;##FF9900&#8242;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg6461030391651104737.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageReflection(createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).Text2Image(&#8216;pcsilva&#8217;))#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg5520463850170450086.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageReflection(&#8216;cf8.jpg&#8217;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg9129576351823147990.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageReflection(createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).Text2Image(&#8216;texto&#8217;,'cf8.jpg&#8217;,150,50,10,100))#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg-7129630003230826252.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageReflection(&#8216;cf8.jpg&#8217;,true)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg8057905479504704339.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageReflection(&#8216;cf8.jpg&#8217;,true,false)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg-6795639091596356858.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageReflection(&#8216;cf8.jpg&#8217;,false,true,false,&#8217;##FF9900&#8242;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg-3394198307482273922.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageShadow(&#8216;cf8.jpg&#8217;,1,3,&#8217;##FFFFFF&#8217;,'##FF6600&#8242;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg-3050662789329625312.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageShadow(&#8216;cf8.jpg&#8217;,2,3,&#8217;##FFFFFF&#8217;,'##FF6600&#8242;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg654119194009571738.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageShadow(&#8216;cf8.jpg&#8217;,3,3,&#8217;##FFFFFF&#8217;,'##FF6600&#8242;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg1765667349888020171.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageShadow(&#8216;cf8.jpg&#8217;,4,3,&#8217;##FFFFFF&#8217;,'##FF6600&#8242;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg-7617496142372707736.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageRounded(&#8216;cf8.jpg&#8217;,15,&#8217;##FFFFFF&#8217;)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg2494684409112769751.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageGradient(createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageRounded(&#8216;cf8.jpg&#8217;,15,&#8217;##FFFFFF&#8217;),false,true,.55,70)#&#8221;&gt;</div>
<div class="mydestaque"><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/_cfimg-1452564548040168502.png" alt="" /></div>
<div>&lt;cfimage action=&#8221;writeToBrowser&#8221; source=&#8221;#createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageReflection(createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageGradient(createobject(&#8216;component&#8217;,'PlayingPictures&#8217;).ImageRounded(&#8216;cf8.jpg&#8217;,15,&#8217;##FFFFFF&#8217;),false,true,.55,70))#&#8221;&gt;</div>
<p><!-- aqui chamamos a função para formatar todas as DIV's --></p>
<p>[]s</p>
<p><a href="http://pcsilva.blogspot.com">Pedro Claudio</a></p>
<p>Adobe Certified Professional</p>
<p>Macromedia ColdFusion MX 7 Developer </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/coldfusion/coldfusion-8-e-imagens/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CFFORM com MXML 1.5 Componentes</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/coldfusion/cfform_com_mxml_1_5_componentes/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/coldfusion/cfform_com_mxml_1_5_componentes/#comments</comments>
		<pubDate>Sat, 02 Jun 2007 00:00:00 +0000</pubDate>
		<dc:creator>Pedro Claudio</dc:creator>
				<category><![CDATA[Coldfusion]]></category>
		<category><![CDATA[AS CFML]]></category>
		<category><![CDATA[CFML]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Como &#233; poss&#237;vel MXML em CFFORMs?]]></description>
			<content:encoded><![CDATA[<br />
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td>
<h1>Introdução</h1>
<p>A algum tempo venho postando em <a href="http://pcsilva.blogspot.com">meu blog</a>, <a href="http://pcsilva.blogspot.com/search/label/Video">videos demonstrativos</a> da interação possível de CFFORM (flash) com componentes mxml.<br />
Para os que não conhecem a compilação do CFFORM (flash) , ela é provida pelo mesmo compilador do Servidor Flex 1.5, em outras palavras o ColdFusion MX 7 e supeirores (até o momento) dispõem de um Servidor Flex 1.5, o que favorece a utilização de arquivos MXML (1.5)  em paginas CFML, e será isto que será visto aqui. E os videos do meu blog, a grande maioria, utiliza este artifício, o que facilita em muito algumas construções, como exemplo para este artigo <a href="http://pcsilva.blogspot.com/2007/05/cfform-chart-em-continuidade-sequncia.html">escolhi a geração de gráficos</a>, muitos podem dizer &#8220;AH! Mas temos o CFCHART!&#8221;, e concordo, mas como verão o resultado final, os efeitos visuais são bem mais interativos e agradáveis.</p>
<h1>Pré-requisito</h1>
<p>- ColdFusion MX 7.0.2.</p>
<h1>         Conceitos</h1>
<p>O conceito utiliado é o mesmo para utilização de componentes MXML 1.5 por PopUps, para um melhor entendimento, separei alguns links importantes do livedocs:<br />
<a href="http://livedocs.adobe.com/flex/15/flex_docs_en/00000451.htm">Using MXML components &#8212; Version 1.5</a></p>
<p><a href="http://livedocs.adobe.com/flex/15/flex_docs_en/00000451.htm">      </a><br />
<a href="http://livedocs.adobe.com/flex/15/flex_docs_en/00000378.htm">Creating a pop-up TitleWindow container using the PopUp Manager</a><br />
<a href="http://livedocs.adobe.com/flex/15/flex_docs_en/00000380.htm">Passing data to a pop-up TitleWindow container</a></p>
<p>E a forma utilizada na chamada do componente MXML foi através das classes PopUpManager e TitleWindow, isto porque até o momento o cfform <strong>não é flexível o suficientes</strong> para absorver novas tags a partir de componentes MXML, como o própio MXML faz.</p>
<p>Com este tipo de desenvolvimento teremos duas linguaguens de marcação e uma linguagem de script para a construção de um aplicativo, são eles: <a href="http://livedocs.adobe.com/coldfusion/7/">CFML (&gt;=7)</a>, <a href="http://livedocs.adobe.com/flex/15/flex_docs_en/wwhelp/wwhimpl/js/html/wwhelp.htm?href=part3_as.htm">MXML (1.5) </a>e <a href="http://livedocs.adobe.com/flex/15/asdocs_en/">ActionScript (2.0 com classes do Flex 1.5)</a>.</p>
<h1>Conteúdo</h1>
<p>Para a parte da utilização do MXML não produzi nenhum código, para não complicar esta matéria, mais do que já pôde ser, então o componente utilizado será o contido no artigo <a href="http://www.adobe.com/devnet/flex/articles/charting_print.html"><em>&#8220;Beyond the DataGrid Control: Better Data Visualization with Flex Charting Components<br />
de Ely Greenfield&#8221;</em></a> publicado no <a href="http://www.adobe.com/devnet/flex/">DevNet Flex</a>.</p>
<p>Então como você já leu o artigo de Greenfield e baixou os arquivos, vamos a parte CFML.<br />
Para uma interação básica, nenhuma alteração será feita nos arquivos de Greenfield, e para a chamada do componente em ma pagina CFML, um trabalho imenso de escrita para chamar o componente MXML.</p>
<p>Lembrando apenas que os arquivos do MXML e AS devem estar no mesmo diretório que ficaram as paginas CFML</p>
<p>c:\inetpub\wwwroot\cfform\charting\ZingerChart.cfm</p>
<p>  &lt;cfform<br />
format=&#8221;flash&#8221;<br />
onload=&#8221;var mxml = mx.managers.PopUpManager.createPopUp(_root, ZingerChart_final); &#8221; &gt;<br />
&lt;/cfform&gt;</p>
<p>Onde invocamos o componente ZingerChart_final.mxml sem o &#8220;.MXML&#8221; , <a href="http://livedocs.adobe.com/flex/15/flex_docs_en/00000378.htm">da mesma forma que você observou no artigo do livedocs</a>.</p>
<p>Agora vamos deixar o Panel livre dentro do cfform final (no cliente), ou melhor vamos dar-lhe a propriedade Drag, para que o cliente possa movimentar o Panel, e para isto precisamos modificar o MXML de Greenfield, então salve ZingerChart_final.mxml com o nome ZingerChart_final_1.mxml e abra que possa ser editado ficando da seguinte forma.</p>
<p>c:\inetpub\wwwroot\cfform\charting\ZingerChart_final_1.mxml</p>
<p>  &lt;mx:Panel title=&#8221;sample chart&#8221; xmlns:mx=&#8221;http://www.macromedia.com/2003/mxml&#8221;<br />
initialize=&#8221;initDummyData();&#8221; height=&#8221;330&#8243; width=&#8221;450&#8243; &gt; &lt;mx:Script source=&#8221;zingerChartFunctions.as&#8221; /&gt;</p>
<p>&lt;mx:Effect&gt;<br />
&lt;mx:SeriesInterpolate duration=&#8221;500&#8243; elementOffset=&#8221;5&#8243; name=&#8221;drillDownEffect&#8221; /&gt;<br />
&lt;/mx:Effect&gt;</p>
<p>&lt;mx:ColumnChart verticalAxisStyle=&#8221;linedNumericAxis&#8221; dataProvider=&#8221;{zingerManufacturingData}&#8221; width=&#8221;100%&#8221; height=&#8221;70%&#8221; showDataTips=&#8221;true&#8221;<br />
mouseClickData=&#8221;getDrillDownDataForMonth(event.hitData.element.yField, event.hitData.item);&#8221; &gt;<br />
&lt;mx:horizontalAxis&gt;<br />
&lt;mx:CategoryAxis dataProvider=&#8221;{zingerManufacturingData}&#8221; categoryField=&#8221;Month&#8221; name=&#8221;Month&#8221; /&gt;<br />
&lt;/mx:horizontalAxis&gt;</p>
<p>&lt;mx:verticalAxis&gt;<br />
&lt;mx:LinearAxis name=&#8221;Units Sold&#8221; /&gt;<br />
&lt;/mx:verticalAxis&gt;</p>
<p>&lt;mx:series&gt;<br />
&lt;mx:Array&gt;<br />
&lt;mx:ColumnSeries yField=&#8221;Widgets&#8221; name=&#8221;luxury Widgets&#8221; &gt;<br />
&lt;mx:fill&gt;<br />
&lt;mx:SolidColor color=&#8221;#82C9EB&#8221; /&gt;<br />
&lt;/mx:fill&gt;<br />
&lt;/mx:ColumnSeries&gt;<br />
&lt;mx:ColumnSeries yField=&#8221;Blinkies&#8221; name=&#8221;Mass Market Blinkies&#8221;&gt;<br />
&lt;mx:fill&gt;<br />
&lt;mx:LinearGradient angle=&#8221;0&#8243;&gt;<br />
&lt;mx:entries&gt;<br />
&lt;mx:Array&gt;<br />
&lt;mx:GradientEntry ratio=&#8221;30&#8243; color=&#8221;#258BC8&#8243; /&gt;<br />
&lt;mx:GradientEntry ratio=&#8221;80&#8243; color=&#8221;#82C9EB&#8221; /&gt;<br />
&lt;mx:GradientEntry ratio=&#8221;100&#8243; color=&#8221;#258BC8&#8243; /&gt;<br />
&lt;/mx:Array&gt;<br />
&lt;/mx:entries&gt;<br />
&lt;/mx:LinearGradient&gt;<br />
&lt;/mx:fill&gt;<br />
&lt;/mx:ColumnSeries&gt;<br />
&lt;/mx:Array&gt;<br />
&lt;/mx:series&gt;</p>
<p>&lt;mx:verticalAxisRenderer&gt;<br />
&lt;mx:AxisRenderer labelFunction=&#8221;formatThousands&#8221; /&gt;<br />
&lt;/mx:verticalAxisRenderer&gt;</p>
<p>&lt;/mx:ColumnChart&gt;</p>
<p>&lt;mx:Label id=&#8221;drilldownLabel&#8221; text=&#8221;{drilldownTitle}&#8221; fontSize=&#8221;16&#8243; height=&#8221;10%&#8221; width=&#8221;100%&#8221; fontWeight=&#8221;bold&#8221; /&gt;</p>
<p>&lt;mx:CartesianChart id=&#8221;drillDownChart&#8221; width=&#8221;100%&#8221; height=&#8221;20%&#8221; dataProvider=&#8221;{drilldownValues}&#8221; fontFamily=&#8221;chartLabelFont&#8221;<br />
horizontalAxisStyle=&#8221;hangingCategoryAxis&#8221; verticalAxisStyle=&#8221;linedNumericAxis&#8221;&gt;</p>
<p>&lt;mx:horizontalAxis&gt;<br />
&lt;mx:CategoryAxis dataProvider=&#8221;{drilldownValues}&#8221; categoryField=&#8221;week&#8221; /&gt;<br />
&lt;/mx:horizontalAxis&gt;</p>
<p>&lt;mx:horizontalAxisRenderer&gt;<br />
&lt;mx:AxisRenderer canDropLabels=&#8221;true&#8221; /&gt;<br />
&lt;/mx:horizontalAxisRenderer&gt;</p>
<p>&lt;mx:verticalAxisRenderer&gt;<br />
&lt;mx:AxisRenderer labelFunction=&#8221;formatThousands&#8221; /&gt;<br />
&lt;/mx:verticalAxisRenderer&gt;</p>
<p>&lt;mx:series&gt;<br />
&lt;mx:Array&gt;<br />
&lt;mx:ColumnSeries yField=&#8221;sales&#8221; showDataEffect=&#8221;drillDownEffect&#8221; /&gt;<br />
&lt;mx:LineSeries form=&#8221;curve&#8221; yField=&#8221;avg&#8221; showDataEffect=&#8221;drillDownEffect&#8221;&gt;<br />
&lt;mx:stroke&gt;<br />
&lt;mx:Stroke weight=&#8221;3&#8243; color=&#8221;#82C9EB&#8221; /&gt;<br />
&lt;/mx:stroke&gt;<br />
&lt;/mx:LineSeries&gt;<br />
&lt;/mx:Array&gt;<br />
&lt;/mx:series&gt;</p>
<p>&lt;/mx:CartesianChart&gt;</p>
<p>&lt;/mx:Panel&gt;</p>
<p>Se observou bem os dois arquivos, original (ZingerChart_final.mxml) e cópia (ZingerChart_final_1.mxml ), percebeu que a cópia não possui a tag mx:Style, isto porque todo seu seu conteúdo foi inserido em {cf_root}/WEB-INF/cfform/global.css, e ainda removemos a tag Application, em seu lugar colocamos uma tag container, mx:Panel, que herda algumas propriedades que precisamos.</p>
<p>E a chamada do componente MXML no CFFORM muda muito pouco.<br />
c:\inetpub\wwwroot\cfform\charting\ZingerChartPopUp.cfm</p>
<p>   &lt;cfform<br />
format=&#8221;flash&#8221;<br />
onload=&#8221;var mxml = mx.managers.PopUpManager.createPopUp(_root, ZingerChart_final_1); &#8221; &gt;<br />
&lt;/cfform&gt;</p>
<p>O próximo passo criar a dinâmica de dados para o gráfico, para isso contrui um CFC básico, exemplo simples, para a utilização por Remoting.</p>
<p>c:\inetpub\wwwroot\cfform\charting\data.cfc</p>
<p>    &lt;cfcomponent&gt;<br />
&lt;cffunction name=&#8221;get&#8221; access=&#8221;remote&#8221; returntype=&#8221;query&#8221;&gt;<br />
&lt;cfargument name=&#8221;Year&#8221; type=&#8221;string&#8221; required=&#8221;yes&#8221;&gt;<br />
&lt;cfscript&gt;<br />
var Query = QueryNew(&#8220;&#8221;);<br />
var i = &#8220;&#8221;;<br />
var data = StructNew();<br />
data.Month = Replace(&#8220;January &#8216;|,February &#8216;|,March &#8216;|,April &#8216;|,May &#8216;|,June&#8217;|,July &#8216;|,August &#8216;|,September &#8216;|,October &#8216;|,November &#8216;|,December &#8216;|&#8221;,&#8221;|&#8221;,Arguments.Year,&#8221;All&#8221;);<br />
data.Widgets = &#8220;#RandRange(350000,900000)#&#8221; ;<br />
data.Blinkies = &#8220;#RandRange(150000,350000)#&#8221;;<br />
for(i = 2; i lte 12; i=i+1){<br />
data.Widgets = &#8220;#data.Widgets#,#RandRange(350000,900000)#&#8221; ;<br />
data.Blinkies = &#8220;#data.Blinkies#,#RandRange(150000,350000)#&#8221;;<br />
}<br />
data.monthIdx = &#8220;1,2,3,4,5,6,7,8,9,10,11,12&#8243;;<br />
for(i in data){<br />
QueryAddColumn(Query,i,ListToArray(data[i]));<br />
}<br />
return Query;<br />
&lt;/cfscript&gt;<br />
&lt;/cffunction&gt;<br />
&lt;/cfcomponent&gt;<br />
E alteramos o componente MXML mais uma vez para que fique da seguinte forma.</p>
<p>c:\inetpub\wwwroot\cfform\charting\ZingerChart_final_2.mxml</p>
<p>  &lt;mx:TitleWindow title=&#8221;sample chart&#8221; xmlns:mx=&#8221;http://www.macromedia.com/2003/mxml&#8221;<br />
initialize=&#8221;initDummyData();&#8221; height=&#8221;330&#8243; width=&#8221;450&#8243; &gt; &lt;mx:Script source=&#8221;zingerChartFunctions.as&#8221; /&gt;</p>
<p>&lt;mx:Effect&gt;<br />
&lt;mx:SeriesInterpolate duration=&#8221;500&#8243; elementOffset=&#8221;5&#8243; name=&#8221;drillDownEffect&#8221; /&gt;<br />
&lt;/mx:Effect&gt;</p>
<p>&lt;mx:ColumnChart verticalAxisStyle=&#8221;linedNumericAxis&#8221; dataProvider=&#8221;{zingerManufacturingData}&#8221; width=&#8221;100%&#8221; height=&#8221;70%&#8221; showDataTips=&#8221;true&#8221;<br />
mouseClickData=&#8221;getDrillDownDataForMonth(event.hitData.element.yField, event.hitData.item);&#8221; &gt;<br />
&lt;mx:horizontalAxis&gt;<br />
&lt;mx:CategoryAxis dataProvider=&#8221;{zingerManufacturingData}&#8221; categoryField=&#8221;Month&#8221; name=&#8221;Month&#8221; /&gt;<br />
&lt;/mx:horizontalAxis&gt;</p>
<p>&lt;mx:verticalAxis&gt;<br />
&lt;mx:LinearAxis name=&#8221;Units Sold&#8221; /&gt;<br />
&lt;/mx:verticalAxis&gt;</p>
<p>&lt;mx:series&gt;<br />
&lt;mx:Array&gt;<br />
&lt;mx:ColumnSeries yField=&#8221;Widgets&#8221; name=&#8221;luxury Widgets&#8221; &gt;<br />
&lt;mx:fill&gt;<br />
&lt;mx:SolidColor color=&#8221;#82C9EB&#8221; /&gt;<br />
&lt;/mx:fill&gt;<br />
&lt;/mx:ColumnSeries&gt;<br />
&lt;mx:ColumnSeries yField=&#8221;Blinkies&#8221; name=&#8221;Mass Market Blinkies&#8221;&gt;<br />
&lt;mx:fill&gt;<br />
&lt;mx:LinearGradient angle=&#8221;0&#8243;&gt;<br />
&lt;mx:entries&gt;<br />
&lt;mx:Array&gt;<br />
&lt;mx:GradientEntry ratio=&#8221;30&#8243; color=&#8221;#258BC8&#8243; /&gt;<br />
&lt;mx:GradientEntry ratio=&#8221;80&#8243; color=&#8221;#82C9EB&#8221; /&gt;<br />
&lt;mx:GradientEntry ratio=&#8221;100&#8243; color=&#8221;#258BC8&#8243; /&gt;<br />
&lt;/mx:Array&gt;<br />
&lt;/mx:entries&gt;<br />
&lt;/mx:LinearGradient&gt;<br />
&lt;/mx:fill&gt;<br />
&lt;/mx:ColumnSeries&gt;<br />
&lt;/mx:Array&gt;<br />
&lt;/mx:series&gt;</p>
<p>&lt;mx:verticalAxisRenderer&gt;<br />
&lt;mx:AxisRenderer labelFunction=&#8221;formatThousands&#8221; /&gt;<br />
&lt;/mx:verticalAxisRenderer&gt;</p>
<p>&lt;/mx:ColumnChart&gt;</p>
<p>&lt;mx:Label id=&#8221;drilldownLabel&#8221; text=&#8221;{drilldownTitle}&#8221; fontSize=&#8221;16&#8243; height=&#8221;10%&#8221; width=&#8221;100%&#8221; fontWeight=&#8221;bold&#8221; /&gt;</p>
<p>&lt;mx:CartesianChart id=&#8221;drillDownChart&#8221; width=&#8221;100%&#8221; height=&#8221;20%&#8221; dataProvider=&#8221;{drilldownValues}&#8221; fontFamily=&#8221;chartLabelFont&#8221;<br />
horizontalAxisStyle=&#8221;hangingCategoryAxis&#8221; verticalAxisStyle=&#8221;linedNumericAxis&#8221;&gt;</p>
<p>&lt;mx:horizontalAxis&gt;<br />
&lt;mx:CategoryAxis dataProvider=&#8221;{drilldownValues}&#8221; categoryField=&#8221;week&#8221; /&gt;<br />
&lt;/mx:horizontalAxis&gt;</p>
<p>&lt;mx:horizontalAxisRenderer&gt;<br />
&lt;mx:AxisRenderer canDropLabels=&#8221;true&#8221; /&gt;<br />
&lt;/mx:horizontalAxisRenderer&gt;</p>
<p>&lt;mx:verticalAxisRenderer&gt;<br />
&lt;mx:AxisRenderer labelFunction=&#8221;formatThousands&#8221; /&gt;<br />
&lt;/mx:verticalAxisRenderer&gt;</p>
<p>&lt;mx:series&gt;<br />
&lt;mx:Array&gt;<br />
&lt;mx:ColumnSeries yField=&#8221;sales&#8221; showDataEffect=&#8221;drillDownEffect&#8221; /&gt;<br />
&lt;mx:LineSeries form=&#8221;curve&#8221; yField=&#8221;avg&#8221; showDataEffect=&#8221;drillDownEffect&#8221;&gt;<br />
&lt;mx:stroke&gt;<br />
&lt;mx:Stroke weight=&#8221;3&#8243; color=&#8221;#82C9EB&#8221; /&gt;<br />
&lt;/mx:stroke&gt;<br />
&lt;/mx:LineSeries&gt;<br />
&lt;/mx:Array&gt;<br />
&lt;/mx:series&gt;</p>
<p>&lt;/mx:CartesianChart&gt;</p>
<p>&lt;/mx:TitleWindow&gt;</p>
<p>Finalizando com um arquivo CFML contendo um ActionScript mais complexo para trabalhar com dados remotos.</p>
<p>c:\inetpub\wwwroot\cfform\charting\ZingerChartPopUpDynamic.cfm</p>
<p> &lt;cfform name=&#8221;basic&#8221; format=&#8221;flash&#8221; width=&#8221;650&#8243;&gt;<br />
&lt;cfformitem type=&#8221;script&#8221;&gt;<br />
function createChart(value){<br />
var connection:mx.remoting.Connection = mx.remoting.NetServices.createGatewayConnection(&#8216;http://localhost:8300/flashservices/gateway/&#8217;);<br />
var serviceEvent:Object = {};<br />
serviceEvent.onResult = function(result):Void{<br />
var query = [];<br />
for(var i=0; i &lt; result._items.length; i++){<br />
query[i] = {};<br />
query[i].Month=result._items[i].MONTH;<br />
query[i].Widgets=result._items[i].WIDGETS;<br />
query[i].Blinkies=result._items[i].BLINKIES;<br />
query[i].monthIdx=result._items[i].MONTHIDX;<br />
}<br />
_root[value] = mx.managers.PopUpManager.createPopUp(_root, ZingerChart_final_2);<br />
_root[value].centerPopUp();<br />
_root[value].closeButton = true;<br />
_root[value].zingerManufacturingData = query;<br />
_root[value].title = &#8216;Chart Year &#8216;+value;<br />
var listener:Object = {};<br />
listener.click = function(e){<br />
e.target.deletePopUp();<br />
}<br />
_root[value].addEventListener(&#8216;click&#8217;,listener);<br />
};<br />
serviceEvent.onStatus = function(status):Void{<br />
alert(status.description,status.level);<br />
};<br />
var servicePath:String = &#8216;cfform.charting.data&#8217;;<br />
var service:mx.remoting.NetServiceProxy = connection.getService(servicePath,serviceEvent);<br />
service.get({Year:value});<br />
}<br />
&lt;/cfformitem&gt;<br />
&lt;cfformgroup type=&#8221;hbox&#8221; width=&#8221;642&#8243; style=&#8221;margin:0&#8243;&gt;<br />
&lt;cfselect name=&#8221;Year&#8221; width=&#8221;70&#8243; label=&#8221;Year&#8221; onChange=&#8221;createChart(Year.value);&#8221;&gt;<br />
&lt;cfloop from=&#8221;1&#8243; to=&#8221;12&#8243; index=&#8221;i&#8221;&gt;<br />
&lt;cfset currentYear = 1995+i &gt;<br />
&lt;cfoutput&gt;<br />
&lt;option value=&#8221;#Right(currentYear,2)#&#8221;&gt;#currentYear#&lt;/option&gt;<br />
&lt;/cfoutput&gt;<br />
&lt;/cfloop&gt;<br />
&lt;/cfselect&gt;<br />
&lt;/cfformgroup&gt;<br />
&lt;/cfform&gt;</p>
<p>Enjoy !!<br />
&#8211;<br />
<a href="http://livedocs.macromedia.com/coldfusion" target="_blank"> </a><a href="alert(pcsilva@mxstudio.com.br);">Pedro Claudio<br />
Adobe Certified Professional </a><br />
<a href="http://pcsilva.blogspot.com" target="_blank">Blog</a></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
<p>  FormatCF(new Array(\&#8217;ZingerChart.cfm\&#8217;,\&#8217;ZingerChartPopUpDynamic.cfm\&#8217;,\&#8217;data.cfc\&#8217;,\&#8217;ZingerChartPopUp.cfm\&#8217;));  FormatXML(new Array(\&#8217;ZingerChart_final_2.mxml\&#8217;,\&#8217;ZingerChart_final_1.mxml\&#8217;));   </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/coldfusion/cfform_com_mxml_1_5_componentes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LocalConnection no CFFORM</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/coldfusion/localconnection_no_cfform/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/coldfusion/localconnection_no_cfform/#comments</comments>
		<pubDate>Fri, 06 Apr 2007 00:00:00 +0000</pubDate>
		<dc:creator>Pedro Claudio</dc:creator>
				<category><![CDATA[Coldfusion]]></category>
		<category><![CDATA[AS CFML]]></category>
		<category><![CDATA[CFML]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[A comunica&#231;&#227;o entre selects em forms diferentes, vamos trabalhar com ele?]]></description>
			<content:encoded><![CDATA[<br />
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td>
<h1>Introdução</h1>
<p>Faz algum tempo =/, que publiquei um <a href="http://pcsilva.blogspot.com/2006/11/cfform-to-cfform-localconnection.html" target="_blank">video demonstrando a comunicação</a> entre swfs construidos com CFFORM, como os pedidos foram muitos venho aqui compartilhar essa implementação com vocês.<br />
<a href="http://www.cfbrasil.com.br/?acao=pagina.visualizarMateria&amp;materia_id=03651008-D876-89A8-44F1D3C122E366B6" target="_blank"><br />
</a></p>
<h1>Pré-requisito</h1>
<p>- ColdFusion MX 7.0.2, <a href="http://www.mxstudio.com.br/views.tutorial.php?act=view&amp;cid=7&amp;aid=742" target="_blank">com um repositório de classes configurado</a>.</p>
<h1>         Conceitos</h1>
<p>Esta aplicação está baseada na comunicação provida através da <a href="http://www.mxstudio.com.br/views.tutorial.php?act=view&amp;cid=3&amp;aid=160" target="_blank">classe LocalConnection</a>, e consequentemente todo seu conceito também baseia-se nela.<br />
Esta classe ActionScript cria um objeto, encarregado de transportar mensagens (chamada de função) e responder a uma mensagem (execução da função solicitada), entre aplicações SWF, ao mesmo tempo pode ser rementente e destinatário, fazendo uma analogia ao envio de correspondência na no mundo real.<br />
Quando selecionarmos  (evento change) uma linha<br />
do select, chamaremos uma função no swf de destino, passando como parâmetro a linha selecionado, esta função adicionará este elemento no select de destino, e após a execução da função remota, removeremos a linha selecionada.</p>
<h1>Conteúdo</h1>
<p>Para implementar isto, utilizei dois arquivos ActionScript, e dois arquivos CFM. O primeiro arquivo ActionScript permite o uso da class LocalConnection em qualquer outra aplicação, não está amarrada a esta aplicação, o segundo arquivo, um pouco mais complexo, conté toda as movimentações de dados, e os arquivos cfm é onde contruiremos os forms.</p>
<p>Vamos aos aquivos CFM, não vou comentar ainda, mesmo porque o CFML é bem simples e explicito.<br />
Mas chamo a atenção para a propriedade onload do cfform, nela encontramos a função que construirá toda a comunicação entre os forms, note que os dois primeiros parâmtros da chamada, serão os nomes dos conectores LocalConnection, o primeiro sempre será o objeto corrente, e o segundo o objeto remoto, eles devem ser únicos (repare que foram colocado em posições diferentes na chamada), o mais apropriado seria utilzar a função CFML CreateUUID, não foi feito isso aqui para não confundir, os demais parâmetros podem ser identificados com facilidade.</p>
<p>BD1.cfm</p>
<p> &lt;cfform name=&#8221;form1&#8243; id=&#8221;form1&#8243; method=&#8221;post&#8221; format=&#8221;flash&#8221;  width=&#8221;300&#8243; height=&#8221;250&#8243;<br />
onload=&#8221;cfform2cfform(&#8216;connector1&#8242;,&#8217;connector2&#8242;,&#8217;MyList1&#8242;,&#8217;addRight&#8217;,'Enviar&#8217;)&#8221;&gt;          &lt;cfformitem type=&#8221;script&#8221;&gt;<br />
#include &#8220;communication.as&#8221;<br />
&lt;/cfformitem&gt;</p>
<p>&lt;cfformgroup type=&#8221;horizontal&#8221;&gt;</p>
<p>&lt;cfselect name=&#8221;MyList1&#8243; size=&#8221;5&#8243; multiple=&#8221;yes&#8221;&gt;<br />
&lt;option value=&#8221;pcsilva&#8221;      &gt;pcsilva      &lt;/option&gt;<br />
&lt;option value=&#8221;Pedro&#8221;        &gt;Pedro        &lt;/option&gt;<br />
&lt;option value=&#8221;Pedro Claudio&#8221;&gt;Pedro Claudio&lt;/option&gt;<br />
&lt;/cfselect&gt;</p>
<p>&lt;cfinput type=&#8221;button&#8221; name=&#8221;addRight&#8221; value=&#8221;&gt;&gt;&#8221; /&gt;</p>
<p>&lt;/cfformgroup&gt;</p>
<p>&lt;cfinput type=&#8221;button&#8221; name=&#8221;Enviar&#8221; value=&#8221;Enviar&#8221;  /&gt;</p>
<p>&lt;/cfform&gt;</p>
<p>&lt;cfdump var=&#8221;#FORM#&#8221; /&gt;</p>
<p>BD2.cfm</p>
<p> &lt;cfform name=&#8221;form1&#8243; id=&#8221;form1&#8243; method=&#8221;post&#8221; format=&#8221;flash&#8221; width=&#8221;300&#8243; height=&#8221;250&#8243;<br />
onload=&#8221;cfform2cfform(&#8216;connector2&#8242;,&#8217;connector1&#8242;,&#8217;MyList2&#8242;,&#8217;addLeft&#8217;,'Enviar2&#8242;)&#8221;&gt;          &lt;cfformitem type=&#8221;script&#8221;&gt;<br />
#include &#8220;communication.as&#8221;<br />
&lt;/cfformitem&gt;</p>
<p>&lt;cfformgroup type=&#8221;horizontal&#8221;&gt;</p>
<p>&lt;cfinput type=&#8221;button&#8221; name=&#8221;addLeft&#8221; value=&#8221;&lt;&lt;&#8221; /&gt;</p>
<p>&lt;cfselect name=&#8221;MyList2&#8243; size=&#8221;5&#8243; multiple=&#8221;yes&#8221; /&gt;</p>
<p>&lt;/cfformgroup&gt;</p>
<p>&lt;cfinput type=&#8221;button&#8221; name=&#8221;Enviar2&#8243; value=&#8221;Enviar&#8221;  /&gt;</p>
<p>&lt;/cfform&gt;</p>
<p>&lt;cfdump var=&#8221;#FORM#&#8221; /&gt;</p>
<p>O arquivo seguinte foi utilizado no include ActionScript das duas paginas CFML, tente compreender o que ele faz, pois todas as operações de transferência de dados, forma colocados nele, e possivelmente você possa utilizar estas operações para um <a href="http://www.mxstudio.com.br/forum/index.php?showtopic=21119&amp;st=0&amp;p=92521&amp;#entry92521" target="_blank">select2select no mesmo cfform</a>.</p>
<p>communication.as</p>
<p> function cfform2cfform(connection1:String,connection2:String,gridName:String,buttonAdd:String,buttonPost:String){        /* crio o objeto LocalConnection */<br />
cfLocalConnection.receptor(connection1);</p>
<p>/* primeira ação<br />
nela permitimos que um swf remoto adicione uma linha no select local */<br />
var f1:Function = function(item:Object){<br />
_root[gridName].addItem(item.label,item.data);<br />
_root[gridName].selectedIndex = null;<br />
};<br />
/* adicionamos esta ação no objeto, impondo nome ADD */<br />
cfLocalConnection.append(&#8216;add&#8217;,f1);</p>
<p>/* segunda ação<br />
aqui o swf remoto pode adicionar mais de uma linha no select local */<br />
var f2:Function = function(db:Array){<br />
/* linha estranha?<br />
getDataProvider retona o dataProvider que é um array<br />
concat une dois arrays<br />
setDataProvider atribui um array ao dataProvider */<br />
_root[gridName].setDataProvider(_root[gridName].getDataProvider().concat(db));<br />
};<br />
/* chamaremos esta ação de ADDALL e atribuimos ao objeto LocalConnection */<br />
cfLocalConnection.append(&#8216;addAll&#8217;,f2);</p>
<p>/* terceira ação<br />
o swf selecionará todos as linhas do select e enviará o formulário */<br />
var f3:Function = function(){<br />
if(_root[gridName].getLength()&gt;0){<br />
var bd:Array = [];<br />
for(var i = 0; i &lt; _root[gridName].getLength(); i++){<br />
bd.push(i);<br />
}<br />
_root[gridName].setSelectedIndices(bd, false);<br />
}<br />
_root.submitForm();<br />
};<br />
/* denominei esta ação como post <img src='http://www.mxstudio.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  */<br />
cfLocalConnection.append(&#8216;post&#8217;,f3);</p>
<p>/* primerio evento<br />
esta ação é atribuida ao select local */<br />
var listener1:Object = {};<br />
listener1.change = function(event:Object):Void{<br />
/* ao selecinar, executamos remotamente o metodo ADD, no ouvinte connection2, com o parametro sendo a linha corrente*/<br />
cfLocalConnection.execute(connection2, &#8216;add&#8217;,_root[gridName].getSelectedItem());<br />
/* removemos a linha selecionada */<br />
_root[gridName].removeItemAt(_root[gridName].getSelectedIndex());<br />
/* removemos a seleção */<br />
_root[gridName].selectedIndex = null;<br />
};<br />
/* atribuimos ação ao evento */<br />
_root[gridName].addEventListener(&#8216;change&#8217;,listener1);</p>
<p>/* segundo evento<br />
esta ação será atribuida ao botão que adicionará todos os dados da select local no select remoto*/<br />
var listener2:Object = {};<br />
listener2.click = function(event:Object):Void{<br />
/* lista deve ter alguma linha selecionada */<br />
if(_root[gridName].getLength() &gt; 0 ){<br />
/* executamos adição remota */<br />
cfLocalConnection.execute(connection2, &#8216;addAll&#8217;,_root[gridName].getDataProvider());<br />
/* limpamos lista local */<br />
_root[gridName].removeAll();<br />
}<br />
};<br />
/* atribuimos ação ao evento */<br />
_root[buttonAdd].addEventListener(&#8216;click&#8217;,listener2);</p>
<p>/* terceiro evento<br />
esta é a ação de submit dos dois formulários */<br />
var listener3:Object = {};<br />
listener3.click = function(event:Object):Void{<br />
/* ver linha 23 */<br />
f3(&#8216;pcsilva&#8217;);<br />
/* esta linha está executando o &#8216;f3();&#8217; no swf remoto */<br />
cfLocalConnection.execute(connection2, &#8216;post&#8217;,'pcsilva&#8217;);<br />
};<br />
/* atribuimos ação ao evento */<br />
_root[buttonPost].addEventListener(&#8216;click&#8217;,listener3);</p>
<p>}</p>
<p>Por fim, a classe que ficou oculta pelo nome  cfLocalConnection, é até simples comparando com o script acima, mas vamos a ela.</p>
<p>cfLocalConnection.as</p>
<p> import mx.controls.Alert;<br />
class cfLocalConnection extends Object{        /* esta variável é a nossa tão falada LocalConnection, ela é quem executará todas as ações */<br />
private static var conn:LocalConnection;<br />
/* aqui armazenamos todas as ações */<br />
public  static var actions:Object;<br />
/* amarra a comunição de swfs em um dominio */<br />
public  static var domain:String = &#8216;localhost&#8217;;</p>
<p>/* contrutor */<br />
private function cfLocalConnection(){}</p>
<p>/* metodo criador do objeto LocalConnection */<br />
private static function createConnection():Void{<br />
/* cria a o objeto LocalConnection */<br />
conn = new LocalConnection();<br />
/* amarra ao dominio */<br />
conn.allowDomain(domain);<br />
/* cria informe de erro */<br />
conn.onStatus = function(info:Object):Void{<br />
if(info.level==&#8217;error&#8217;){<br />
Alert.show(&#8216;Receptor inexistente!&#8217;,'Erro&#8217;);<br />
}<br />
};<br />
if(actions != null){<br />
var i:String;<br />
for(i in actions){<br />
conn[i]	= actions[i];<br />
}<br />
}<br />
}</p>
<p>/* cria o receptor */<br />
public static function receptor(connector:String):Void{<br />
if(conn == null){<br />
createConnection();<br />
}<br />
conn.connect(connector);<br />
}</p>
<p>/* execução remota */<br />
public static function execute(recepcao:String,functionName:String,param):Void{<br />
if(conn == null){<br />
createConnection();<br />
}<br />
conn.send(recepcao,functionName,param);<br />
}</p>
<p>/* adiciona ações ao objeto localconnection */<br />
public static function append(functionName:String,currentFunction:Function):Void{<br />
if(conn == null){<br />
createConnection();<br />
}<br />
if(actions == null){<br />
actions = new Object();<br />
}<br />
actions[functionName] = currentFunction;<br />
conn[functionName] = currentFunction;<br />
}</p>
<p>}</p>
<p>Feliz Páscoa.</p>
<p>&#8211;<br />
<a href="http://livedocs.macromedia.com/coldfusion" target="_blank"> </a><a href="alert(pcsilva@mxstudio.com.br);">Pedro Claudio<br />
Adobe Certified Professional </a><br />
<a href="http://pcsilva.blogspot.com" target="_blank">Blog</a></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
<p> FormatCF(new Array(\&#8217;bd1.cfm\&#8217;,\&#8217;bd2.cfm\&#8217;)); FormatAS(new Array(\&#8217;communication.as\&#8217;,\&#8217;cfLocalConnection.as\&#8217;)); </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/coldfusion/localconnection_no_cfform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CFFORM &#8211; Flash Remoting 2</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/coldfusion/cfform___flash_remoting_2/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/coldfusion/cfform___flash_remoting_2/#comments</comments>
		<pubDate>Mon, 20 Nov 2006 00:00:00 +0000</pubDate>
		<dc:creator>Pedro Claudio</dc:creator>
				<category><![CDATA[Coldfusion]]></category>
		<category><![CDATA[AS CFML]]></category>
		<category><![CDATA[CFML]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Finalizando este assunto, falaremos sobre otimiza&#231;&#227;o de c&#243;digo, constru&#231;&#227;o de classes, com foco no remoting]]></description>
			<content:encoded><![CDATA[<table border="0" width="100%" cellPadding="0" cellSpacing="0">
<tr>
<td>
<h1>Introdução</h1>
<p>Quando iniciamos os estudos sobre uma linguagem, ferramenta ou servidor devemos nos aprofundar, para que possamos maximizar a utilização, minimizando a quantidade de código, para criar uma aplicação otimizada. Então demonstrarei aqui como melhorar o código da aplicação de exemplo, passada no final no artigo anterior, de forma que a inclusão de ActionScript no código CFML, seja miníma, e para isto o desenvolvedor deve ter um conhecimento mínimo sobre <a target="_blank" href="http://www.pontoflash.com.br/colunas/materia.php?Coluna=3&amp;Item=367">construção de classes ActionScript 2.0</a> , e também informado <a target="_blank" href="http://www.mxstudio.com.br/views.tutorial.php?act=view&amp;cid=7&amp;aid=742">onde essas classes devem ser armazenadas</a>.<br />
<a target="_blank" href="http://www.cfbrasil.com.br/?acao=pagina.visualizarMateria&amp;materia_id=03651008-D876-89A8-44F1D3C122E366B6"><br />
</a></p>
<h1>Pré-requisito</h1>
<p>- ColdFusion MX 7.0.2, <a target="_blank" href="http://www.mxstudio.com.br/views.tutorial.php?act=view&amp;cid=7&amp;aid=742">com um repositório de classes configurado</a>.<br />
- Para que você possa acompanhar os exemplos a seguir, verifique se o mapeamento / do Administrador ColdFusion, será na pasta que ali está registrado onde será armazenado o componente (Usuario.cfc) deste artigo.</p>
<h1>Conceitos</h1>
<p>Não vou conceituar, apenas falarei das peculiaridades, ok? ok! E segurem o folego!<br />
A construção e utilização de classes AcitionScript 2.0 no servidor ColdFusion MX 7, obedece algumas regras e necessita de algum conhecimento específico, a primeira regra que devemos respeitar é a <a target="_blank" href="http://www.mxstudio.com.br/views.tutorial.php?act=view&amp;cid=7&amp;aid=733">restrição de código imposta pelo servidor</a> , <a target="_blank" href="http://www.mxstudio.com.br/views.tutorial.php?act=view&amp;cid=7&amp;aid=742">ter um repositório de classes definido em flex-config.xml</a>, implementar classes a partir da classe Object e/ou classes que possam receber chamadas diretas a seus métodos, uma particularidade nas declarações, todas devem ser estáticas (static), exceto o construtor, e para uma depuração detalhada, configure seu servidor para exibir as mensagens warning e/ou erro geradas no momento da execução &#8211; geralmente uso o comando tail (linux) para verificar as últimas entradas nos logs.<br />
Com relação a execução e testes de classes em Flash Forms CFFORM, você pode ouvir, ou até chegar a pensar ?Ah! Eu atualizei a classe, copiei para o repositório configurado, mas quando executo na pagina, ele não demonstra o incremento que fiz!?, isto ocorre porque o servidor ColdFusion possui uma cache própria para Flash Forms, e para que o servidor saiba que deve atualizar a cache, você precisa requisitar sua aplicação por uma url que contenha a variável ?recompile? com valor verdadeiro (?recompile=true).<br />
Basicamente é isso, mas no transcorrer do seu desenvolvimento poderá perceber outras particularidades dependendo do tipo de servidor que estiver usando.<br />
E quanto a compartilhar um diretório para vários sites, bom, não aconselho.</p>
<h1>Conteúdo</h1>
<p>Para o conteúdo vamos utilizar o componente do artigo anterior, que já deve estar configurado e respondendo pela url http://localhost/labs/remoting/Usuario.cfc, como também estar com o banco de dados implementado, se você não fez ou não tem isso <a target="_blank" href="http://www.mxstudio.com.br/views.tutorial.php?act=view&amp;cid=7&amp;aid=960">leia o artigo anterior</a> , e implemente como orientado.</p>
<p>Basicamente o que faremos é implementar o ActionScript (faça um outro diagrama) em cima do diagrama de classe desenvolvido para componente, o sugere que devemos ter na classe ActionScript ao menos seis métodos, relembrando, eles são: validate, append, update, remove, get e search.<br />
Aos que ficaram perdidos na frase acima, sugiro passar o olho em algum artigo, livro ou texto sobre UML e OO.<br />
Nossa classe ActionScript receberá dois métodos novos, a partir da estrutura do cfc, o primeiro será o comunicador, responsável em criar a conexão e cuidar do transporte das informações entre cliente e servidor, e o segundo apenas fará uma faxina nas informações do cliente (communication,clear), dispondo então da seguinte estrutura.</p>
<p>hUsuario.as</p>
<p>import mx.remoting.NetServices;<br />
import mx.remoting.NetServiceProxy;<br />
import mx.remoting.Connection;<br />
import mx.controls.Alert;<br />
import mx.managers.CursorManager;</p>
<p>class hUsuario extends Object{</p>
<p>private static var currentService:NetServiceProxy;</p>
<p>public static var userid:String;<br />
public static var username:String;<br />
public static var nome:String;<br />
public static var email:String;</p>
<p>private function hUsuario();<br />
private static function communication(onresult:Function):Void;<br />
private static function validate():Object;</p>
<p>public static function append():Void;<br />
public static function update(user:String):Void;<br />
public static function remove(user:String):Void;<br />
public static function get():Void;<br />
public static function search(query:String):Void;<br />
public static function clear():Void;</p>
<p>}</p>
<p>Os atributos userid, username, nome e email, são uma abstração das colunas da tabela lá do banco de dados, e o elemento mais importante nesta classe é o atributo currentService, por default sempre apontará para o mesmo conjunto de serviços, porém receberá ações diferentes, para que sejam executadas no retorno dos serviços, em cada serviço que estiver sendo executado, aqui resolvi coloca-lo como privado.</p>
<p>Os atributos.</p>
<p>private static var currentService:NetServiceProxy;<br />
public static var userid:String;<br />
public static var username:String;<br />
public static var nome:String;<br />
public static var email:String;</p>
<p><strong><br />
</strong>Neste exemplo o construtor não executa nenhum comando, mesmo porque ele está declarado como privado, e não será executado da forma que utilizaremos, como pode ter reparado, nossa classe é filha da classe Object, e é assim que será tratada, ou seja, como um objeto previamente criado &#8220;diferente do padrão&#8221;? Pode ser mas a classe mx.remoting.NetServices, também utiliza este artifício.<br />
O construtor, apenas pro forme.</p>
<p>private function hUsuario(){<br />
}</p>
<p>O próximo método é o mais importante e o motivo da criação desta classe, pois é nele que será construída a comunicador, que fará a ponte com o servidor.</p>
<p>/*<br />
Tem como parâmetro a ações que deve ser executada em um retorno ok do servidor.<br />
*/<br />
private static function communication(onresult:Function):Void {</p>
<p>/* aqui uma firula ao cliente */<br />
CursorManager.setBusyCursor();</p>
<p>/* endereço do gateway */<br />
var defaultGateway:String = &#8220;http://localhost/cfusion/flashservices/gateway/&#8221;;</p>
<p>/* endereço do conjunto de serviços */<br />
var defaultPath:String = &#8220;labs.remoting.Usuario&#8221;;</p>
<p>/* conexão com servidor */<br />
var conn:Connection = NetServices.createGatewayConnection(defaultGateway);</p>
<p>/* prepara parâmetro obrigatório da conexão com serviço*/<br />
var eventReturn:Object = new Object();</p>
<p>/* ação será executada em um retorno ok do servidor, com um leve complexidade, pois é uma execução padrão, e em seu conteúdo o parâmetro do método communication será executado */<br />
eventReturn.onResult = function(o):Void{</p>
<p>/* executa ação de fato */<br />
onresult(o);<br />
/* encerra conexão */<br />
conn.close();<br />
/* destrói a firula */<br />
CursorManager.removeBusyCursor();<br />
}<br />
/* onStatus <img src='http://www.mxstudio.com.br/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' />  */<br />
eventReturn.onStatus = function(info:Object):Void{<br />
Alert.show(info.description,info.level);<br />
conn.close();<br />
CursorManager.removeBusyCursor();<br />
};<br />
/* constrói conexão com o conjunto de serviços, variável poderá ser acessada pelos demais métodos */<br />
currentService = conn.getService(defaultPath,eventReturn);</p>
<p>}</p>
<p>Para um entendimento da lógica da código comentarei agora a operação mais simples desta classe.</p>
<p>/* método invoca todos os registros da base de dados*/<br />
public static function get():Void{/* ação que será executada de fato em um retorno ok do servidor*/<br />
var onResult:Function = function(result):Void{<br />
var query:Array = result._items;<br />
var recordount:Number = query.length;<br />
Alert.show(&#8216;Resposta (&#8216;+recordount+&#8217;) do servidor&#8217;,'result&#8217;);<br />
};</p>
<p>/* executa método passando a função como parâmetro, função esta que será inserida e invocada dentro de outra função, repare no método anterior (communication)*/<br />
communication(onResult);<br />
/* invoca serviço */<br />
currentService.get();</p>
<p>}</p>
<p>Os métodos seguintes são simplesmente os códigos do artigo anterior, contudo dispostos de forma mais organizada e vistosa, não vou comentar, apenas exibirei a classe completa e passarei ao formulário CFML.</p>
<p>hUsuario.as</p>
<p>import mx.remoting.NetServices;<br />
import mx.remoting.NetServiceProxy;<br />
import mx.remoting.Connection;<br />
import mx.controls.Alert;<br />
import mx.managers.CursorManager;</p>
<p>class hUsuario extends Object{</p>
<p>private static var currentService:NetServiceProxy;</p>
<p>public static var userid:String;<br />
public static var username:String;<br />
public static var nome:String;<br />
public static var email:String;</p>
<p>private function hUsuario(){<br />
}</p>
<p>private static function communication(onresult:Function):Void {</p>
<p>CursorManager.setBusyCursor();</p>
<p>var defaultGateway:String = &#8220;http://localhost/cfusion/flashservices/gateway/&#8221;;<br />
var defaultPath:String = &#8220;labs.remoting.Usuario&#8221;;</p>
<p>var conn:Connection = NetServices.createGatewayConnection(defaultGateway);</p>
<p>var eventReturn:Object = new Object();<br />
eventReturn.onResult = function(o):Void{<br />
onresult(o);<br />
conn.close();<br />
CursorManager.removeBusyCursor();<br />
}<br />
eventReturn.onStatus = function(info:Object):Void{<br />
Alert.show(info.description,info.level);<br />
conn.close();<br />
CursorManager.removeBusyCursor();<br />
};<br />
currentService = conn.getService(defaultPath,eventReturn);</p>
<p>}</p>
<p>private static function validate():Object{</p>
<p>var r:Object = new Object();<br />
var error:Boolean = true;</p>
<p>if(username != undefined &amp;&amp; username.length &gt; 0){<br />
r.username = username;<br />
error = false;<br />
}</p>
<p>if(nome != undefined &amp;&amp; nome.length &gt; 0){<br />
r.nome = nome;<br />
error = false;<br />
}</p>
<p>if(email != undefined &amp;&amp; email.length &gt; 0){<br />
r.email = email;<br />
error = false;<br />
}<br />
if(error){<br />
return null;<br />
}<br />
return r;</p>
<p>}</p>
<p>public static function append():Void{</p>
<p>var user = validate();</p>
<p>if(user != null){</p>
<p>var onResult:Function = function(result):Void{<br />
switch(result){<br />
case -1:<br />
Alert.show(&#8220;Erros entre os dados do registro&#8221;,&#8221;Erro&#8221;);<br />
break;<br />
case 0:<br />
Alert.show(&#8220;Duplicata de identificador recusada&#8221;,&#8221;Erro&#8221;);<br />
break;<br />
default:<br />
Alert.show(&#8220;Resposta ok (&#8220;+result+&#8221;)&#8221;,&#8221;result&#8221;);<br />
clear();<br />
break;<br />
}<br />
};</p>
<p>var arg:Object = new Object();<br />
arg.dados = user;<br />
communication(onResult);<br />
currentService.append(arg);</p>
<p>}else{<br />
Alert.show(&#8220;Infomação insuficiente!&#8221;,&#8221;Erro&#8221;);<br />
}</p>
<p>clear();</p>
<p>}</p>
<p>public static function update(user:String):Void{</p>
<p>var u = validate();</p>
<p>if(u != null){</p>
<p>var onResult:Function = function(result):Void{<br />
switch(result){<br />
case -1:<br />
Alert.show(&#8220;Erros entre os dados do registro&#8221;,&#8221;Erro&#8221;);<br />
break;<br />
case 0:<br />
Alert.show(&#8220;Duplicata de identificador recusada&#8221;,&#8221;Erro&#8221;);<br />
break;<br />
default:<br />
Alert.show(&#8220;Resposta ok&#8221;,&#8221;result&#8221;);<br />
clear();<br />
break;<br />
}<br />
};</p>
<p>var arg:Object = new Object();<br />
arg.id = user;<br />
arg.dados = u;<br />
communication(onResult);<br />
currentService.update(arg);</p>
<p>}else{<br />
Alert.show(&#8220;Infomação insuficiente!&#8221;,&#8221;Erro&#8221;);<br />
}</p>
<p>clear();</p>
<p>}</p>
<p>public static function remove(user:String):Void{</p>
<p>var onResult:Function = function(result):Void{<br />
if(result){<br />
Alert.show(&#8216;Resposta do servidor&#8217;,'result&#8217;);<br />
}else{<br />
Alert.show(&#8216;Idenficador recusado&#8217;,'Erro&#8217;);<br />
}<br />
};<br />
var arg:Object = new Object();<br />
arg.id = user;<br />
communication(onResult);<br />
currentService.remove(arg);</p>
<p>}</p>
<p>public static function get():Void{</p>
<p>var onResult:Function = function(result):Void{<br />
var query:Array = result._items;<br />
var recordount:Number = query.length;<br />
Alert.show(&#8216;Resposta (&#8216;+recordount+&#8217;) do servidor&#8217;,'result&#8217;);<br />
};<br />
communication(onResult);<br />
currentService.get();</p>
<p>}</p>
<p>public static function search(query:String):Void{</p>
<p>var onResult:Function = function(result):Void{<br />
var query:Array = result._items;<br />
var recordount:Number = query.length;<br />
if(recordount &gt; 0){<br />
Alert.show(&#8216;Resposta (&#8216;+recordount+&#8217;) do servidor&#8217;,'result&#8217;);<br />
}else{<br />
Alert.show(&#8220;Nenhum registro foi encontrado.&#8221;,&#8217;Erro&#8217;);<br />
}<br />
};<br />
var arg:Object = new Object();<br />
arg.str = query;<br />
communication(onResult);<br />
currentService.search(arg);</p>
<p>}</p>
<p>public static function clear():Void{</p>
<p>username = nome = email = &#8220;&#8221;;</p>
<p>}</p>
<p>}</p>
<p>Vou executar um método por arquivo, iniciando pelo get, muito complicado como pode ver.</p>
<p>1.cfm</p>
<p>&lt;cfform name=&#8221;basic&#8221; format=&#8221;flash&#8221; onload=&#8221;hUsuario.get();&#8221;&gt;<br />
&lt;/cfform&gt;</p>
<p><img width="421" src="http://www.mxstudio.com.br/imagens_artigos/PedroClaudio_112006_Remoting2_imagens/advanced1.gif" height="462" /></p>
<p>O método a seguir realizará a inclusão de um novo registro, caso a inclusão termine com sucesso retornará o ID do novo individuo, vou comentar, porque ele é muito mais complicado que o anterior.</p>
<p>2.cfm</p>
<p>&lt;cfform name=&#8221;basic&#8221; format=&#8221;flash&#8221; onload=&#8221;initRemoting();&#8221;&gt;<br />
&lt;cfformitem type=&#8221;script&#8221;&gt;<br />
function initRemoting(){<br />
//informo nome<br />
hUsuario.nome = &#8220;orlando&#8221;;<br />
//informo e-mail<br />
hUsuario.email = &#8220;velho@mail.com&#8221;;<br />
//informo username<br />
hUsuario.username = &#8220;velho&#8221;;<br />
//adiciono as informações no banco<br />
hUsuario.append();<br />
}<br />
&lt;/cfformitem&gt;<br />
&lt;/cfform&gt;</p>
<p><img width="347" src="http://www.mxstudio.com.br/imagens_artigos/PedroClaudio_112006_Remoting2_imagens/advanced2.gif" height="486" /></p>
<p>Vou aproveitar o ID que foi retornado no append, para nas demais execuções.<br />
A atualização é bem semelhante ao cadastro, a diferença está justamente no identificador do usuário, que deve ser passado como parâmetro, o restante é idêntico..</p>
<p>3.cfm</p>
<p>&lt;cfform name=&#8221;basic&#8221; format=&#8221;flash&#8221; onload=&#8221;initRemoting();&#8221;&gt;<br />
&lt;cfformitem type=&#8221;script&#8221;&gt;<br />
function initRemoting(){<br />
hUsuario.nome = &#8220;Orlando&#8221;;<br />
hUsuario.email = &#8220;gandalf@mail.com&#8221;;<br />
hUsuario.username = &#8220;gandalf&#8221;;<br />
hUsuario.update(&#8220;20&#8243;);<br />
}<br />
&lt;/cfformitem&gt;<br />
&lt;/cfform&gt;</p>
<p><img width="341" src="http://www.mxstudio.com.br/imagens_artigos/PedroClaudio_112006_Remoting2_imagens/advanced3.gif" height="458" /></p>
<p>As próximas execuções apresentam a mesma complexidade que a primeira, ou seja nenhuma.<br />
Removeremos agora o gandalf da base de dados.</p>
<p>4.cfm</p>
<p>&lt;cfform name=&#8221;basic&#8221; format=&#8221;flash&#8221; onload=&#8221;hUsuario.remove(&#8217;20&#8242;);&#8221;&gt;<br />
&lt;/cfform&gt;</p>
<p><img width="343" src="http://www.mxstudio.com.br/imagens_artigos/PedroClaudio_112006_Remoting2_imagens/advanced4.gif" height="460" /></p>
<p>E para finalizar a sequencia, vamos pesquisar um caracter comum a todos os registro.</p>
<p>5.cfm</p>
<p>&lt;cfform name=&#8221;basic&#8221; format=&#8221;flash&#8221; onload=&#8221;hUsuario.search(&#8216;@&#8217;);&#8221;&gt;<br />
&lt;/cfform&gt;</p>
<p><img width="342" src="http://www.mxstudio.com.br/imagens_artigos/PedroClaudio_112006_Remoting2_imagens/advanced5.gif" height="458" /></p>
<p>Para que entendam, mais claramente, de que ser este tipo de implementação, façam uma comparação do código da aplicação do artigo anterior para o código da aplicação a seguir.</p>
<p>index.cfm</p>
<p style="scroll">
<pre>&lt;cfform name="form1" format="flash" onload="initApp()"&gt; 

		&lt;cfformitem type="script"&gt;			function initApp(){				Usuario.formName = 'form1';			}		&lt;/cfformitem&gt; 

		&lt;cfformgroup type="panel" width="420"&gt;			&lt;cfformgroup  type="horizontal" &gt;				&lt;cfinput type="text"   name="qry"    id="qry"                                                                 /&gt;				&lt;cfinput type="button" name="search" id="search" value="Pesquisar" onclick="Usuario.search(_root.qry.text);"  /&gt;			&lt;/cfformgroup&gt;		&lt;/cfformgroup&gt; 

		&lt;cfformgroup type="panel" width="420" visible="false" id="pGrid"&gt;			&lt;cfgrid name="listUsuarios" width="400" rowheaders="false" onchange="_root.pUser.visible = true;"&gt;				&lt;cfgridcolumn name="nome"     /&gt;				&lt;cfgridcolumn name="username" /&gt;				&lt;cfgridcolumn name="email"    /&gt;			&lt;/cfgrid&gt; 			&lt;cfformgroup type="horizontal"&gt;				&lt;cfinput name="RefreshUsuarios" id="RefreshUsuarios" type="button" value="Refresh" onclick="Usuario.get();"                                          /&gt;				&lt;cfinput name="addUsuarios"     id="addUsuarios"     type="button" value="Novo"    onclick="Usuario.clear(); _root.pUser.visible = true;"            /&gt;				&lt;cfinput name="RemoveUsuarios"  id="RemoveUsuarios"  type="button" value="Remove"  onclick="Usuario.remove(_root.listUsuarios.selectedItem.userid);" /&gt;			&lt;/cfformgroup&gt;		&lt;/cfformgroup&gt; 

		&lt;cfformgroup type="panel" width="420" id="pUser" visible="false"&gt;			&lt;cfinput type="text"    id="id"           name="id"           label="ID"       validate="integer"  enabled="false"  bind="{listUsuarios.selectedItem.userid}"                                           /&gt;			&lt;cfinput type="text"    id="username"     name="username"     label="username" validate="noblanks" required="true"  bind="{listUsuarios.selectedItem.username}"                                         /&gt;			&lt;cfinput type="text"    id="nome"         name="nome"         label="nome"     validate="noblanks" required="false" bind="{(listUsuarios.selectedItem.nome != null)?listUsuarios.selectedItem.nome:''}" /&gt;			&lt;cfinput type="text"    id="email"        name="email"        label="email"    validate="email"    required="true"  bind="{listUsuarios.selectedItem.email}"                                            /&gt;			&lt;cfinput  type="button" id="saveUsuarios" name="saveUsuarios" value="Salvar"					onclick="							Usuario.nome = _root.nome.text ;							Usuario.email = _root.email.text;							Usuario.username = _root.username.text;							if(_root.id.text == ''){								Usuario.append();							}else{								Usuario.update(_root.id.text);							}" &gt;		&lt;/cfformgroup&gt; 

&lt;/cfform&gt;</pre>
<p><img width="514" src="http://www.mxstudio.com.br/imagens_artigos/PedroClaudio_112006_Remoting2_imagens/app1.gif" height="290" /></p>
<p><img width="509" src="http://www.mxstudio.com.br/imagens_artigos/PedroClaudio_112006_Remoting2_imagens/app2.gif" height="509" /></p>
<p><img width="455" src="http://www.mxstudio.com.br/imagens_artigos/PedroClaudio_112006_Remoting2_imagens/app3.gif" height="635" /></p>
<p>Obs.: São três imagens, mas não houve reload, basta testar o cfml e verá.</p>
<h1>Conclusão</h1>
<p>&#8220;Uma boa prática deixa seu código muito mais apresentável, otimizado, com uma produtividade alta e um tempo de implementação reduzido.&#8221;</p>
<p>&#8211;<br />
<a target="_blank" href="http://livedocs.macromedia.com/coldfusion"></a><a href="alert(pcsilva@mxstudio.com.br);">Pedro Claudio &#8211; pcsilva@mxstudio.com.br</a><br />
<a target="_blank" href="http://forum.mxstudio.com.br/index.php?showforum=31">visite o fórum MXStudio ColdFusion </a><br />
<a target="_blank" href="http://pcsilva.blogspot.com">Blog</a></td>
</tr>
<tr>
<td> </td>
</tr>
</table>
<p>     FormatCF(new Array(\&#8217;1.cfm\&#8217;,\&#8217;2.cfm\&#8217;,\&#8217;3.cfm\&#8217;,\&#8217;4.cfm\&#8217;,\&#8217;5.cfm\&#8217;,\&#8217;index.cfm\&#8217;));   FormatAS(new Array(\&#8217;hUsuario.as\&#8217;,\&#8217;oget\&#8217;,\&#8217;communication\&#8217;,\&#8217;Construtor\&#8217;,\&#8217;atributos\&#8217;)); </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/coldfusion/cfform___flash_remoting_2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

