<?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>Debugando.com &#187; web</title>
	<atom:link href="http://www.debugando.com/tag/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.debugando.com</link>
	<description>Noticias, dicas e tutorias do mundo da Tecnologia.</description>
	<lastBuildDate>Thu, 01 Dec 2011 23:44:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Designer projeta controle-remoto-bumerangue para navegar na web</title>
		<link>http://www.debugando.com/designer-projeta-controle-remoto-bumerangue-para-navegar-na-web/</link>
		<comments>http://www.debugando.com/designer-projeta-controle-remoto-bumerangue-para-navegar-na-web/#comments</comments>
		<pubDate>Tue, 25 May 2010 17:26:03 +0000</pubDate>
		<dc:creator>Lincoln César</dc:creator>
				<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[bumerangue]]></category>
		<category><![CDATA[controle remoto]]></category>
		<category><![CDATA[interpad]]></category>
		<category><![CDATA[navegar]]></category>
		<category><![CDATA[tv 3d]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=1172</guid>
		<description><![CDATA[




Caro internauta, olhe o  futuro. O designer Marcial Ahsayane não apenas pensou em livrar você do velho  mouse e do teclado, que criou um controle remoto mutante para realizar todas  essas função.
O futurista InterPad possue  botões direcionais, como em um joystick de videogame, e funções  dispostas no círculo central para, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="file:///C:/DOCUME%7E1/LINCOL%7E1.XPP/CONFIG%7E1/Temp/moz-screenshot.png" alt="" /></p>
<p style="text-align: center;"><img class="aligncenter" style="margin-top: 5px; margin-bottom: 5px;" title="imag2" src="http://uoltecnologia.blog.uol.com.br/images/inter_gigablog2.jpg" alt="" width="475" height="360" /></p>
<p>Caro internauta, olhe o  futuro. O designer Marcial Ahsayane não apenas pensou em livrar você do velho  mouse e do teclado, que criou um controle remoto mutante para realizar todas  essas função.</p>
<p>O futurista InterPad possue  botões direcionais, como em um joystick de videogame, e funções  dispostas no círculo central para, teoricamente, facilitar o uso.  Música, câmera, redes sociais: tudo isso estaria ao alcance desse  controle sem fio.</p>
<p>Agora é só comprar uma  TV 3D com conexão à internet, fixar residência no sofá e perder todos  os amigos e parentes enquanto você espera o InterPad virar realidade.</p>
<p><strong>Fonte:</strong> UOL Tecnologia</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/designer-projeta-controle-remoto-bumerangue-para-navegar-na-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uma a cada cinco empresas nos EUA usa o Google Docs, diz IDC</title>
		<link>http://www.debugando.com/uma-a-cada-cinco-empresas-nos-eua-usa-o-google-docs-diz-idc/</link>
		<comments>http://www.debugando.com/uma-a-cada-cinco-empresas-nos-eua-usa-o-google-docs-diz-idc/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 04:00:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google docs]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=669</guid>
		<description><![CDATA[A larga dominância do pacote de aplicativos de produtividade Microsoft Office nas empresas pode estar perto de enfrentar um grande desafio: o Google Docs.
Um estudo da consultoria IDC apontou que o software online de produtividade do Google é “amplamente” usado em uma a cada cinco companhias, mesmo que, em alguma delas, o pacote seja apenas [...]]]></description>
			<content:encoded><![CDATA[<p>A larga dominância do pacote de aplicativos de produtividade Microsoft Office nas empresas pode estar perto de enfrentar um grande desafio: o Google Docs.</p>
<p>Um estudo da consultoria IDC apontou que o software online de produtividade do Google é “amplamente” usado em uma a cada cinco companhias, mesmo que, em alguma delas, o pacote seja apenas um complemento ao Office.</p>
<p>O IDC entrevistou 262 gerentes de nível sênior de empresas de diferentes tamanhos, o que aponta para um rápido crescimento no interesse pelo serviço.</p>
<p>Uma pesquisa similar, feita em dezembro de 2007, apontava que 5% das empresas entrevistadas usavam amplamente o Google Docs na época. Na atual pesquisa, feita em julho, o Google Docs é usado em 19,5% das companhias.</p>
<p>“O Google Docs ainda não está substituindo o Office, mas o fato de ele crescer tão rapidamente mostra um momento importante. É uma grande ameaça à Microsoft”, disse a analista do IDC, Melissa Webster.</p>
<p>Apesar do crescimento do Google Docs, o uso do Office praticamente não mudou entre as duas pesquisas, com mais de 97% de uso nas companhias &#8211; indicativo de que os funcionários usam ambas as ferramentas.</p>
<p>Para Melissa, isso é negativo para a dona do Office, porque o Google Docs “vai canibalizar a oportunidade da Microsoft em torno de seus próprios softwares baseados na web”, disse ela.</p>
<p>Na quinta-feira (17/9), a companhia começou a testar o <a href="http://idgnow.uol.com.br/internet/2009/09/18/microsoft-comeca-a-testar-versao-online-das-ferramentas-do-office/">Office Web Apps</a>, a versão online do pacote de aplicativos, que ainda não tem data definida para lançamento.</p>
<div class="font"><em>(Patrick Thibodeau)</em></div>
<p><!-- NOVA BARRA DE FERRAMENTA INFERIOR --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/uma-a-cada-cinco-empresas-nos-eua-usa-o-google-docs-diz-idc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando um Data Grid com POO e PHP5</title>
		<link>http://www.debugando.com/criando-um-data-grid-com-poo-e-php5/</link>
		<comments>http://www.debugando.com/criando-um-data-grid-com-poo-e-php5/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 13:18:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Data Grid]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=649</guid>
		<description><![CDATA[Um data grid nada mais é do que a apresentação de dados em forma de tabela (lembra das &#60;table&#62;&#60;/table&#62;? Algo assim). Cada conjunto de registros é mostrado em uma linha, e o data grid pode ter funcionalidades de ordenação dos dados e opções para sua edição ou exclusão.
Classe Data Grid PHP
Com esta simples classe é [...]]]></description>
			<content:encoded><![CDATA[<p>Um data grid nada mais é do que a apresentação de dados em forma de tabela (lembra das &lt;table&gt;&lt;/table&gt;? Algo assim). Cada conjunto de registros é mostrado em uma linha, e o data grid pode ter funcionalidades de ordenação dos dados e opções para sua edição ou exclusão.</p>
<h4><strong>Classe Data Grid PHP</strong></h4>
<p>Com esta simples classe é possível criar um data grid a partir de um array com os dados que queremos apresentar na tabela. É simples criar e configurar e, com alguns comandos avançados, é possível alterar o seu comportamento para que seja possível implementar as necessidades habituais em uma estrutura desse tipo.</p>
<p>Essa classe foi criada com POO (Programação Orientada a Objetos) e características que estão disponíveis somente a partir do PHP5. Ela pode ser baixada <a class="ext" href="http://www.phpclasses.org/browse/package/5476.html">clicando aqui</a>.</p>
<p>Vamos começar a ver como funciona a classe utilizando um exemplo simples e inserindo funcionalidades no decorrer do artigo, para deixar nosso exemplo mais robusto.</p>
<p>Para começar é necessário inserir a classe nos scripts PHP antes de utilizá-la.</p>
<div class="codigo">
<pre><em><code><span class="com">//incluimos a classe</span><span class="pln">

</span><span class="kwd">require</span><span class="pln"> </span><span class="str">'DataGrid.php'</span><span class="pun">;</span></code></em></pre>
</div>
<p>Agora temos que criar um Array com os dados que serão apresentados no Data Grid. Será um array associativo, duas dimensões, onde a primeira, o array principal, receberá todos os registros a serem mostrados no data Grid, e na segunda estão cada um dos registros definidos como um array associativo.</p>
<p>Agora construímos o array com um algumas informações, mais adiante veremos como construir esse array através de uma consulta ao banco de dados.</p>
<div class="codigo">
<pre><em><code><span class="com">//criamos o array com os dados a serem apresentados no Data Grid</span><span class="pln">

$alunos </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">

array</span><span class="pun">(</span><span class="str">"id"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nome"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Pepe Perez"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"curso"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Informática básica"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nivel"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">2</span><span class="pun">),</span><span class="pln">

array</span><span class="pun">(</span><span class="str">"id"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nome"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"María Suarez"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"curso"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Informática avançada"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nivel"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">),</span><span class="pln">

array</span><span class="pun">(</span><span class="str">"id"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nome"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Roberto Soriano"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"curso"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Sistemas operacionais"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nivel"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">2</span><span class="pun">),</span><span class="pln">

array</span><span class="pun">(</span><span class="str">"id"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nome"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Alberto Rodriguez"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"curso"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Inglés técnico"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nivel"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">),</span><span class="pln">

array</span><span class="pun">(</span><span class="str">"id"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">7</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nome"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Julia Marcos"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"curso"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Sociologia"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nivel"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">3</span><span class="pun">),</span><span class="pln">

array</span><span class="pun">(</span><span class="str">"id"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nome"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Socorro Rozas"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"curso"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Informática básica"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nivel"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">),</span><span class="pln">

array</span><span class="pun">(</span><span class="str">"id"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">11</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nome"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Pablo Reñones"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"curso"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"Informática básica"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"nivel"</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln">

</span><span class="pun">);</span></code></em></pre>
</div>
<p>Agora, antes de continuarmos com a construção da estrutura, temos que criar alguns estilos CSS para podermos melhorar o aspecto do Data Grid</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">style</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/css"</span><span class="pun">&gt;</span><span class="pln">

</span><span class="pun">.</span><span class="pln">linhaI</span><span class="pun">{</span><span class="pln">background</span><span class="pun">-</span><span class="pln">color</span><span class="pun">:</span><span class="com">#ffffcc;}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">linhaP</span><span class="pun">{</span><span class="pln">background</span><span class="pun">-</span><span class="pln">color</span><span class="pun">:</span><span class="com">#ffcc99;}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">fdg_sortable </span><span class="pun">{</span><span class="pln">cursor</span><span class="pun">:</span><span class="pln">pointer</span><span class="pun">;</span><span class="pln">text</span><span class="pun">-</span><span class="pln">decoration</span><span class="pun">:</span><span class="pln">underline</span><span class="pun">;</span><span class="pln">color</span><span class="pun">:</span><span class="com">#00c;}</span><span class="pln">

</span><span class="pun">&lt;/</span><span class="tag">style</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Foram criadas três classes CSS, com seus respectivos estilos. As classes &#8220;linhaI&#8221; (linha ímpar) e &#8220;linhaP&#8221; (linha par) aplicaram estilo às linhas do Data Grid e a classe &#8220;fdg_sortable&#8221; é responsável por estilizar os títulos de cada coluna do Data Grid.</p>
<p>Vamos criar o data grid a partir dos dados que temos no array.</p>
<div class="codigo">
<pre><em><code><span class="com">//instanciamos o objeto data grid, passando como parâmetro o array anterior</span><span class="pln">

Fete_ViewControl_DataGrid</span><span class="pun">::</span><span class="pln">getInstance</span><span class="pun">(</span><span class="pln">$alunos</span><span class="pun">)</span><span class="pln">

</span><span class="com">//VAMOS LANÇANDO DIVERSOS MÉTODOS SOBRE O OBJETO INSTANCIADO</span><span class="pln">

</span><span class="com">//atributos gerais para a tabela</span><span class="pln">

</span><span class="pun">-&gt;</span><span class="pln">setGridAttributes</span><span class="pun">(</span><span class="pln">array</span><span class="pun">(</span><span class="str">'cellspacing'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'3?, '</span><span class="pln">cellpadding</span><span class="str">' =&gt; '</span><span class="lit">4</span><span class="pun">?,</span><span class="pln"> </span><span class="str">'border'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'0?))

//permitimos que hajam características de ordenação

-&gt;enableSorting(true)

//fazemos um setup das colunas do data grid, indicando o valor que será mostrado na primeira linha do data grid

-&gt;setup(array(

'</span><span class="pln">id</span><span class="str">' =&gt; array('</span><span class="pln">header</span><span class="str">' =&gt; '</span><span class="pln">ID</span><span class="str">'),

'</span><span class="pln">nome</span><span class="str">' =&gt; array('</span><span class="pln">header</span><span class="str">' =&gt; '</span><span class="pln">Nome</span><span class="str">'),

'</span><span class="pln">curso</span><span class="str">' =&gt; array('</span><span class="pln">header</span><span class="str">' =&gt; '</span><span class="pln">Curso</span><span class="str">'),

'</span><span class="pln">nivel</span><span class="str">' =&gt; array('</span><span class="pln">header</span><span class="str">' =&gt; '</span><span class="typ">Nivel</span><span class="pln"> curso</span><span class="str">')

))

//definimos os estilos para as linhas ímpares

-&gt;setRowClass('</span><span class="pln">linhaI</span><span class="str">')

//definimos os estilos para as linhas pares

-&gt;setAlterRowClass('</span><span class="pln">linhasP</span><span class="str">')

//chamamos o método que construirá o data grid

-&gt;render();</span></code></em></pre>
</div>
<p>Todas as linhas foram comentadas para que o entendimento se torne mais simples.</p>
<p>Agora vejamos como inserir ou apagar coisas do data grid, para personalizá-lo. Faremos algumas coisas como:</p>
<ol>
<li>Vamos ocultar o &#8220;ID&#8221; do array associativo, para que não seja mostrado.</li>
<li>No campo de nível do cursos, vamos mostrar o nível com alguns asteriscos usando uma função que converterá os números em uma cadeia de asteriscos.</li>
<li>Vamos coluna no data grid, que aparecerá antes de qualquer outra, para mostrar um contador que indicará a quantidade de registros apresentados.</li>
</ol>
<p>Destas três coisas, a mais complicada é fazer um modelo para alterar a forma como é mostrado um campo. Para começar, precisaremos de uma função que devolva o dado que se quer mostrar, com o formato desejado.</p>
<div class="codigo">
<pre><em><code><span class="kwd">function</span><span class="pln"> nivel_estrelas</span><span class="pun">(</span><span class="pln">$num</span><span class="pun">){</span><span class="pln">

$estrelas </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">

</span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$i</span><span class="pun">=</span><span class="lit">0</span><span class="pun">;</span><span class="pln"> $i</span><span class="pun">&lt;</span><span class="pln">$num</span><span class="pun">;</span><span class="pln"> $i</span><span class="pun">++){</span><span class="pln">

$estrelas </span><span class="pun">.=</span><span class="pln"> </span><span class="str">"*"</span><span class="pun">;</span><span class="pln">

</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">return</span><span class="pln"> $estrelas</span><span class="pun">;</span><span class="pln">

</span><span class="pun">}</span></code></em></pre>
</div>
<p>Utilizaremos essa função para atribuir como &#8220;template&#8221; para o campo nível de curso.</p>
<p>Vamos agora ao código utilizado para implementar todas as funcionalidades citadas no data grid:</p>
<div class="codigo">
<pre><em><code><span class="com">//OCULTAR UM CAMPO NO DATA GRID</span><span class="pln">

</span><span class="com">//COLOCAR UMA FUNÇÂO PARA MOSTRAR UM CAMPO</span><span class="pln">

</span><span class="com">//COLOCAR UM CAMPO ANTES DAS COLUNAS DO ARRAY DO DATA GRID</span><span class="pln">

Fete_ViewControl_DataGrid</span><span class="pun">::</span><span class="pln">getInstance</span><span class="pun">(</span><span class="pln">$alunos</span><span class="pun">)</span><span class="pln">

</span><span class="pun">-&gt;</span><span class="pln">setGridAttributes</span><span class="pun">(</span><span class="pln">array</span><span class="pun">(</span><span class="str">'cellspacing'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'3?, '</span><span class="pln">cellpadding</span><span class="str">' =&gt; '</span><span class="lit">4</span><span class="pun">?,</span><span class="pln"> </span><span class="str">'border'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'0?))

-&gt;enableSorting(true)

//fazemos com que o campo "id" do array associativo não seja mostrado

-&gt;removeColumn('</span><span class="pln">id</span><span class="str">')

-&gt;setup(array(

'</span><span class="pln">nome</span><span class="str">' =&gt; array('</span><span class="pln">header</span><span class="str">' =&gt; '</span><span class="pln">Nome</span><span class="str">'),

'</span><span class="pln">curso</span><span class="str">' =&gt; array('</span><span class="pln">header</span><span class="str">' =&gt; '</span><span class="pln">Curso</span><span class="str">'),

//utilizamos a função template para mostrar o nivel do curso com umas estrelas

'</span><span class="pln">nivel</span><span class="str">' =&gt; array('</span><span class="pln">header</span><span class="str">' =&gt; '</span><span class="typ">Nivel</span><span class="pln"> curso</span><span class="str">', '</span><span class="pln">cellTemplate</span><span class="str">' =&gt; '</span><span class="pun">[[</span><span class="pln">nivel_estrelas</span><span class="pun">:%</span><span class="pln">data</span><span class="pun">%]]</span><span class="str">')

))

//inserimos uma coluna em todos os registros do data grid(a primeira coluna será esta)

//nesta coluna mostramos um contador de registros

-&gt;addColumnBefore('</span><span class="pln">Contador</span><span class="str">', '</span><span class="pun">%</span><span class="pln">counter</span><span class="pun">%</span><span class="pln">.</span><span class="str">', '</span><span class="pln">Num</span><span class="str">', array('</span><span class="pln">align</span><span class="str">' =&gt; '</span><span class="pln">right</span><span class="str">'))

//definimos a partir de que número será iniciado o contador

-&gt;setStartingCounter(1)

-&gt;setRowClass('</span><span class="pln">linhaI</span><span class="str">')

-&gt;setAlterRowClass('</span><span class="pln">linhaP</span><span class="str">')

-&gt;render();</span></code></em></pre>
</div>
<p>Novamente as linhas foram comentadas para facilitar o entendimento. Chamo a atenção sobre a linha que faz uso da função anterior como um template para um campo.</p>
<div class="codigo">
<pre><em><code><span class="str">'nivel'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="str">'header'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'Nivel curso'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cellTemplate'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'[[nivel_estrelas:%data%]]'</span><span class="pun">)</span></code></em></pre>
</div>
<p>Isto faz com que o campo &#8220;nivel&#8221;, quando for mostrado em linhas distintas do data grid, chame a função nivel_estrelas(), passando como parâmetro %data%, que é o valor que tem cada um dos registros do array associativo, no campo &#8220;nível&#8221;.</p>
<p>Por último vamos ver outro exemplo, um pouco mais desenvolvido, para mostrar os dados do mesmo array. Neste caso vamos simplesmente mostrar uma coluna adicional ao final de cada registro do data grid, onde iremos inserir uns links para editar e/ou apagar o registro atual.</p>
<div class="codigo">
<pre><em><code><span class="com">//PARA COLOCAR UM BOTÃO PARA EDITAR OU APAGAR</span><span class="pln">
Fete_ViewControl_DataGrid</span><span class="pun">::</span><span class="pln">getInstance</span><span class="pun">(</span><span class="pln">$alunos</span><span class="pun">)</span><span class="pln">
</span><span class="pun">-&gt;</span><span class="pln">setGridAttributes</span><span class="pun">(</span><span class="pln">array</span><span class="pun">(</span><span class="str">'cellspacing'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'3?, '</span><span class="pln">cellpadding</span><span class="str">' =&gt; '</span><span class="lit">4</span><span class="pun">?,</span><span class="pln"> </span><span class="str">'border'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'0?))
-&gt;enableSorting(true)
-&gt;removeColumn('</span><span class="pln">id</span><span class="str">')
-&gt;setup(array(
'</span><span class="pln">nome</span><span class="str">' =&gt; array('</span><span class="pln">header</span><span class="str">' =&gt; '</span><span class="pln">Nome</span><span class="str">'),
'</span><span class="pln">curso</span><span class="str">' =&gt; array('</span><span class="pln">header</span><span class="str">' =&gt; '</span><span class="pln">Curso</span><span class="str">'),
'</span><span class="pln">nivel</span><span class="str">' =&gt; array('</span><span class="pln">header</span><span class="str">' =&gt; '</span><span class="typ">Nivel</span><span class="pln"> curso</span><span class="str">', '</span><span class="pln">cellTemplate</span><span class="str">' =&gt; '</span><span class="pun">[[</span><span class="pln">nivel_estrelas</span><span class="pun">:%</span><span class="pln">data</span><span class="pun">%]]</span><span class="str">')
))
-&gt;addColumnBefore('</span><span class="pln">Contador</span><span class="str">', '</span><span class="pun">%</span><span class="pln">counter</span><span class="pun">%</span><span class="pln">.</span><span class="str">', '</span><span class="pln">Num</span><span class="str">', array('</span><span class="pln">align</span><span class="str">' =&gt; '</span><span class="pln">right</span><span class="str">'))
//agora mostro um campo depois de cada elelemto, com links para editar ou apagar o registro
//no interior deste campo utilizo $id$ para enviar o valor "id" do array
-&gt;addColumnAfter('</span><span class="pln">actions</span><span class="str">', '</span><span class="pun">&lt;</span><span class="pln">a href</span><span class="pun">=</span><span class="str">"exemplo3.php?editar=$id$"</span><span class="pun">&gt;</span><span class="typ">Editar</span><span class="pun">&lt;</span><span class="str">/a&gt; ?
&lt;a href="exemplo3.php?apagar=$id$" onclick="return confirm('Está certo que quer apagar $nome$?')"&gt;Apagar&lt;/</span><span class="pln">a</span><span class="pun">&gt;</span><span class="str">', '</span><span class="pln">Actions</span><span class="str">', array('</span><span class="pln">align</span><span class="str">' =&gt; '</span><span class="pln">center</span><span class="str">'))
-&gt;setStartingCounter(1)
-&gt;setRowClass('</span><span class="pln">linhaI</span><span class="str">')
-&gt;setAlterRowClass('</span><span class="pln">linhaP</span><span class="str">')
-&gt;render();</span></code></em></pre>
</div>
<p>Neste exemplo apenas inserimos uma linha de código para fazer uma chamada ao método addColumnAfter(), que serve para inserir uma coluna depois das colunas que formamos com o array.</p>
<div class="codigo">
<pre><em><code><span class="pun">-&gt;</span><span class="pln">addColumnAfter</span><span class="pun">(</span><span class="str">'actions'</span><span class="pun">,</span><span class="pln">
</span><span class="str">'&lt;a href="exemplo3.php?editar=$id$"&gt;Editar&lt;/a&gt; ? &lt;a
href="exemplo3.php?apagar=$id$" onclick="return confirm('</span><span class="typ">Est</span><span class="pun">á</span><span class="pln"> certo que
quer apagar $nome$</span><span class="pun">?</span><span class="str">')"&gt;Apagar&lt;/a&gt;'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Actions'</span><span class="pun">,</span><span class="pln"> array</span><span class="pun">(</span><span class="str">'align'</span><span class="pln">
</span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'center'</span><span class="pun">))</span></code></em></pre>
</div>
<p>Neste caso simplesmente temos que indicar como parâmetro a addColumnAfter() dois dados: o primeiro para especificar um título para a coluna e o segundo para especificar o seu conteúdo. O conteúdo dessa coluna, neste caso, são os links para editar e apagar, onde são utilizadas urls que enviam os dados por GET, que é o identificador do registro.</p>
<h4><strong>Montando o data grid a partir de um banco de dados</strong></h4>
<p>Só falta agora falar sobre como extrair os dados de uma base de dados para fazer o array de elementos que será utilizado na montagem do data grid.</p>
<p>No exemplo que acompanha a classe data_grid há um código para extrair a informação do MySQL, como pode ser visto nas linhas abaixo.</p>
<div class="codigo">
<pre><em><code><span class="pln">$users </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">();</span><span class="pln">

$result </span><span class="pun">=</span><span class="pln"> mysql_query</span><span class="pun">(</span><span class="str">"SELECT * FROM user"</span><span class="pun">,</span><span class="pln"> $dbLinkId</span><span class="pun">);</span><span class="pln">

</span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$row </span><span class="pun">=</span><span class="pln"> mysql_fetch_assoc</span><span class="pun">(</span><span class="pln">$result</span><span class="pun">))</span><span class="pln">

</span><span class="pun">{</span><span class="pln">

$users</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $row</span><span class="pun">;</span><span class="pln">

</span><span class="pun">}</span></code></em></pre>
</div>
<p>Como se pode ver, primeiro se cria um array e logo se faz um looping pelos resultados da consulta. Cada um dos elementos retornados pela consulta será introduzido no array criado anteriormente e para ele assinalamos o array associativo que nos devolverá mysql_fetch_assoc() desse primeiro array.</p>
<p>Bom, pessoal, espero que esse artigo possa ser útil a vocês. Clique abaixo para poder fazer o download da classe e de um exemplo.<br />
<strong><br />
<a href="http://www.jlamim.com.br/downloads/php_datagrid.zip">Clique aqui para baixar a classe data grid junto com um exemplo</a></strong></p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/13951/php/criando_um_data_grid_com_poo_e_php5/" target="_blank">Imasters</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/criando-um-data-grid-com-poo-e-php5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entendendo um pouco a API Google Maps</title>
		<link>http://www.debugando.com/entendendo-um-pouco-a-api-google-maps/</link>
		<comments>http://www.debugando.com/entendendo-um-pouco-a-api-google-maps/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 13:12:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google API]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=647</guid>
		<description><![CDATA[
O Google dispensa comentários com todas as inovações que ele faz. Hoje falaremos um pouco sobre a API do Google Maps. API (Application Programming Interface ou Interface de Programação de Aplicativos) é a forma que temos de nos comunicar com as funções pré-programadas definidas pelo fornecedor, no caso, Google. Esta API permite a criação de [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>O Google dispensa comentários com todas as inovações que ele faz. Hoje falaremos um pouco sobre a API do Google Maps. API (Application Programming Interface ou Interface de Programação de Aplicativos) é a forma que temos de nos comunicar com as funções pré-programadas definidas pelo fornecedor, no caso, Google. Esta API permite a criação de mapas com locais definidos, controle de zoom, tipos de mapa, geração de rotas, pesquisa por estabelecimentos, e muitas coisas mais.</p>
<h4>Como começar</h4>
<p>A primeira coisa que devemos fazer é acessar o <a class="ext" href="http://code.google.com/intl/pt-BR/apis/maps/signup.html">link da página inicial da API</a>, ler e aceitar o contrato, digitar a url do site que deseja usar a API e clicar no botão &#8220;Gerar chave da API&#8221;. (veja a figura 1)</p>
<p><img src="http://conteudo.imasters.uol.com.br/13893/1.jpg" alt="" /></p>
<p><span class="c4">Figura 1: Aceitando o contrato</span></p>
<p>Após isso, caso ainda não esteja logado com a sua &#8220;Google Account&#8221;, o Google pedirá para efetuar o login, nesse passo você obterá a chave para usar a API somente na url que digitou o site. Caso queira usar a API em outro site, deverá repetir esse processo para cada site que quiser. (Veja a figura 2)</p>
<p><img src="http://conteudo.imasters.uol.com.br/13893/2.jpg" alt="" /></p>
<p><span class="c4">Figura 2: Chave gerada</span></p>
<p>Agora que já temos a chave, podemos usar a API no site. O Google disponibiliza alguns exemplos, para trabalhar com JavaScript, Flash, Serviço, etc..<br />
Neste artigo abordaremos o uso da API para JavaScript e para isso devemos adicionar o seguinte script dentro do bloco head do HTML, no local &#8220;SUA_CHAVE&#8221;, você deve colocar a chave que o Google gerou para o site, veja o campo Your key is na figura 2.</p>
<div class="codigo">
<pre><code><span class="pun">&lt;</span><span class="tag">script</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;sensor=true&amp;amp;key=SUA_CHAVE"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span><span class="pun">&gt;
&lt;/</span><span class="tag">script</span><span class="pun">&gt;</span></code></pre>
</div>
<p>O código de base para começar o aprendizado está abaixo:</p>
<div class="codigo">
<pre><em><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
	&lt;head&gt;
		&lt;title&gt;Aprendendo a Usar a API Google Maps | Paulo Fernandes &lt;/title&gt;
		&lt;meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/&gt;
		&lt;script src="http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;sensor=true&amp;amp;
                  key=ABQIAAAAAaVFxs6kNq7gWY59qf5XMxSec6s_uUscdbTyPSy8oWl8zYzqFRRanjFebOU60thMmEQQDEPx3A3y5Q"
                  type="text/javascript"&gt;&lt;/script&gt;
		&lt;script type="text/javascript"&gt;
			var map = null;
			var geocoder = null;
			function inicializa() {
				if (GBrowserIsCompatible()) {
					map = new GMap2(document.getElementById("mapa_base"));
					map.setCenter(new GLatLng(-22.9035393, -43.2095869), 13);
					geocoder = new GClientGeocoder();
  			    }
			}
    &lt;/script&gt;
	&lt;/head&gt;
	&lt;body onload="inicializa()" onunload="GUnload()"&gt;
		&lt;div id="mapa_base" style="width: 500px; height: 300px"&gt;&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;</code></em></pre>
</div>
<p>Este código não está difícil de entender, explicaremos as partes mais importantes:</p>
<ul>
<li>No onload(), a função inicializa() verifica se o navegador do usuário é compatível com a API Google Maps, caso positivo, o método captura uma div com id igual a &#8220;mapa_base&#8221; e define o mapa centralizado. O local padrão que escolhi foi a cidade do Rio de Janeiro, que é representada pelas seguintes coordenadas de latitude e longitude -22.9035393, -43.2095869, respectivamente. O número seguinte, 13, representa o zoom no mapa, quanto menor esse número, menor o zoom.</li>
</ul>
<ul>
<li>No onunload(), a função GUnload() serve para limpar as estruturas internas e liberar a memória.</li>
</ul>
<p>Para mais informações sobre os métodos, acesse a documentação em português, através <a class="ext" href="http://code.google.com/intl/pt-BR/apis/maps/documentation/reference.html">deste link</a>. Essa documentação está interessante, e será a base para o artigo.</p>
<h4>Exemplos simples</h4>
<p><a class="ext" href="http://code.google.com/intl/pt-BR/apis/maps/documentation/demogallery.html">Neste link</a> podemos analisar diversos exemplos do poder desta API.</p>
<p>Para o artigo, colocaremos alguns exemplos interessantes para inserir um mapa personalizado no site.</p>
<ul>
<li><strong>Descobrir qual a latitude e longitude do endereço:</strong> Isso é útil quando se pretende definir algum local como default ao entrar no site. Para isso faremos um formulário onde você digita o endereço e o mapa é carregado no endereço e exibe o posicionamento de latitude e longitude. O código JavaScript é esse:</li>
</ul>
<div class="codigo">
<pre><code><em><span class="kwd">function</span><span class="pln"> mostraEndereco</span><span class="pun">(){</span><span class="pln">
                </span><span class="kwd">var</span><span class="pln"> endereco </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">"endereco"</span><span class="pun">).</span><span class="pln">value</span><span class="pun">;</span><span class="pln">
                </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> geocoder </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                        geocoder</span><span class="pun">.</span><span class="pln">getLatLng</span><span class="pun">(</span><span class="pln">endereco</span><span class="pun">,</span><span class="pln">
                                </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">point</span><span class="pun">){</span><span class="pln">
                                        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln">point </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                                                alert</span><span class="pun">(</span><span class="pln">endereco </span><span class="pun">+</span><span class="pln"> </span><span class="str">" não encontrado"</span><span class="pun">);</span><span class="pln">
                                        </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                                                map</span><span class="pun">.</span><span class="pln">setCenter</span><span class="pun">(</span><span class="pln">point</span><span class="pun">,</span><span class="pln"> </span><span class="lit">13</span><span class="pun">);</span><span class="pln">
                                                </span><span class="kwd">var</span><span class="pln"> marca </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">GMarker</span><span class="pun">(</span><span class="pln">point</span><span class="pun">);</span><span class="pln">
                                                map</span><span class="pun">.</span><span class="pln">addOverlay</span><span class="pun">(</span><span class="pln">marca</span><span class="pun">);</span><span class="pln">
                                                marca</span><span class="pun">.</span><span class="pln">openInfoWindowHtml</span><span class="pun">(</span><span class="pln"> endereco </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;br /&gt;"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> point</span><span class="pun">.</span><span class="kwd">toString</span><span class="pun">()</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
                                        </span><span class="pun">}</span><span class="pln">
                                </span><span class="pun">}</span><span class="pln">
                        </span><span class="pun">);</span><span class="pln">
                </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                        alert</span><span class="pun">(</span><span class="str">"GeoCoder não identificado"</span><span class="pun">);</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></em><span class="pln"><em>
</em>E </span><span class="kwd">no</span><span class="pln"> HTML</span><span class="pun">:</span><span class="pln">
</span><em><span class="pun">&lt;</span><span class="pln">form id</span><span class="pun">=</span><span class="str">"form_mapa"</span><span class="pln"> action</span><span class="pun">=</span><span class="str">"#"</span><span class="pln"> method</span><span class="pun">=</span><span class="str">"get"</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="pln">input type</span><span class="pun">=</span><span class="str">"text"</span><span class="pln"> name</span><span class="pun">=</span><span class="str">"endereco"</span><span class="pln"> id</span><span class="pun">=</span><span class="str">"endereco"</span><span class="pln"> size</span><span class="pun">=</span><span class="str">"50"</span><span class="pln"> value</span><span class="pun">=</span><span class="str">"São Paulo"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="pln">input type</span><span class="pun">=</span><span class="str">"button"</span><span class="pln"> name</span><span class="pun">=</span><span class="str">"enviar"</span><span class="pln"> id</span><span class="pun">=</span><span class="str">"enviar"</span><span class="pln"> value</span><span class="pun">=</span><span class="str">"Mostrar Latitude/Longitude"</span><span class="pln"> onclick</span><span class="pun">=</span><span class="str">"mostraEndereco()"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="str">/form&gt;</span></em></code></pre>
</div>
<ul>
<li><strong>Definindo um evento:</strong> Para definir um evento precisamos utilizar o objeto GEvent. Seguindo a mesma linha do código, definiremos um evento, que será disparado toda vez que o marcador for clicado, fazendo com que a posição geográfica seja exibida. Devemos colocar esse evento na função mostrarEndereco(), pois é nela que definimos o marcador.</li>
</ul>
<div class="codigo">
<pre><code><span class="typ">     GEvent</span><span class="pun">.</span><span class="pln">addListener</span><span class="pun">(</span><span class="pln">marca</span><span class="pun">,</span><span class="pln"> </span><span class="str">"click"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
           marca</span><span class="pun">.</span><span class="pln">openInfoWindowHtml</span><span class="pun">(</span><span class="pln"> endereco </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;br /&gt;"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> point</span><span class="pun">.</span><span class="kwd">toString</span><span class="pun">()</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
     </span><span class="pun">});</span></code></pre>
</div>
<ul>
<li><strong>Adicionando zoom no mapa:</strong> Para adicionar o controle de zoom, devemos adicionar um controle ao mapa, através do método addControl() e a esse controle devemos adicionar o controle do mapa, o mais correto é adicionar isso na função de inicialização: inicializa(), a linha completa que deve ser inserida é esta:</li>
</ul>
<div class="codigo">
<pre><code><span class="pln">map</span><span class="pun">.</span><span class="pln">addControl</span><span class="pun">(</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">GSmallMapControl</span><span class="pun">()</span><span class="pln"> </span><span class="pun">);</span></code></pre>
</div>
<ul>
<li>Adicionando forma de visualização: Podemos definir um controle para que o usuário possa ver o endereço na forma de mapa, híbrido ou satélite. Para isso devemos seguir a mesma linha de raciocínio para inserir o zoom, que seria adicionar um controle.</li>
</ul>
<div class="codigo">
<pre><code><span class="pln">map</span><span class="pun">.</span><span class="pln">addControl</span><span class="pun">(</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">GMapTypeControl</span><span class="pun">()</span><span class="pln"> </span><span class="pun">);</span></code></pre>
</div>
<h4>Exemplo avançado</h4>
<p>Para mostrar algo avançado, que tal traçar a rota do ponto A ao ponto B? Para isso precisaremos que o usuário digite os valores dos pontos A e B. Para traçar a rota, vamos reescrever todo o exemplo, simplificando as configurações.</p>
<div class="codigo">
<pre><em><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;head&gt;
        &lt;title&gt;Aprendendo a Usar a API Google Maps - Obter Rota | Paulo Fernandes &lt;/title&gt;
        &lt;meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/&gt;

    &lt;script
src="http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;sensor=true&amp;amp;
key=ABQIAAAAAaVFxs6kNq7gWY59qf5XMxSec6s_uUscdbTyPSy8oWl8zYzqFRRanjFebOU60thMmEQQDEPx3A3y5Q"
type="text/javascript"&gt;&lt;/script&gt;
        &lt;script type="text/javascript"&gt;
            var map = null;
            var geocoder = null;
            var from;
            var to;
            var directionsPanel = null;
            var directions = null;

            function inicializa() {
                if (GBrowserIsCompatible()) {
                    map = new GMap2(document.getElementById("mapa_base"));
                    map.setCenter(new GLatLng(-22.5489433, -46.6388182), 7);
                    geocoder = new GClientGeocoder();
                    map.addControl( new GSmallMapControl() );
                    map.addControl( new GMapTypeControl() );
                    directionsPanel = document.getElementById("route");
                    directions = new GDirections(map, directionsPanel);

                  }
            }

            function gerarRota(){
                from = document.getElementById("partida").value;
                to = document.getElementById("destino").value;
                if ( geocoder ) {
                    geocoder.getLatLng(from,
                        function(point){
                            if ( !point ) {
                                alert(from + " não encontrado");
                            }
                        }
                    );
                    geocoder.getLatLng(to,
                        function(point){
                            if ( !point ) {
                                alert(to + " não encontrado");
                            }
                        }
                    );

                    var string = "from: " + from + " to: "+to;
                    directions.clear();
                    directions.load(string);
                    GEvent.addListener(directions, "error", erroGetRoute);
                } else {
                    alert("GeoCoder não identificado");
                }
            }

            function erroGetRoute(){
                alert("Não foi possivel traçar a rota de: " + from + " para: " + to );
            }

    &lt;/script&gt;
    &lt;/head&gt;
    &lt;body onload="inicializa()" onunload="GUnload()"&gt;
        &lt;form id="form_mapa" action="#" method="get"&gt;
            &lt;label for="partida"&gt;Partida&lt;/label&gt;
            &lt;input type="text" name="partida" id="partida" value="São Paulo" size="50" /&gt;
            &lt;br /&gt;
            &lt;label for="destino"&gt;Destino&lt;/label&gt;
            &lt;input type="text" name="destino" id="destino" value="Rio de Janeiro" size="50" /&gt;
            &lt;br /&gt;
            &lt;input type="button" name="enviar" id="enviar" value="Obter Rota" onclick="gerarRota()"/&gt;
        &lt;/form&gt;
        &lt;div id="mapa_base" style="width: 800px; height: 500px;"&gt;&lt;/div&gt;
        &lt;div id="route" style="width: 300px; height: 500px; position: absolute; right: 0; top: 0;"&gt;&lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></em></pre>
</div>
<p>Para mostrar a rota, tivemos que criar uma nova div com o id igual à &#8220;route&#8221;, é neste local que exibiremos o passo a passo da rota traçada. Essa captura do local foi feita nesta linha directionsPanel = document.getElementById(&#8220;route&#8221;); Para traçar a rota, devemos instanciar o objeto GDirections e informar para ele carregar a rota através do método directions.load(string);</p>
<p>No método load devemos passar os dois endereços escritos por extenso, antes o endereço de partida devemos atribuir from: e antes do endereço de destino to: , ficando a string completa from: São Paulo to: Rio de Janeiro, por exemplo.</p>
<p>Caso algum dos dois endereços não seja encontrado, o código exibirá um alert informando que a rota não pode ser traçada.</p>
<h4>Conclusão</h4>
<p>Com este artigo pudemos perceber o poder que a API nos dá, ela nos fornece outras diversas possibilidades que podem ser vistas na documentação oficial. O objetivo do artigo foi introduzir os principais conceitos e o que se pode utilizar no site de sua empresa, por exemplo.</p>
<p>Algo que devemos tomar cuidado é na declaração das variáveis, pois o local onde ela é declarada pode fazer com que a API se porte de forma indesejada. Por exemplo, quando declaramos uma marca, se a tivemos declarado fora da função a cada novo endereço, a marca anterior seria perdida, mas repare que a informação de latitude e longitude é perdida, mantendo somente a ultima. Faça o teste, declare a variável fora do método, acredito que achará bem interessante.</p>
<p>Pode ser que exista outra forma de fazer o que demonstramos ou até que o que foi demonstrado esteja errado, mesmo que aparentemente funcionando.</p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/13893/desenvolvimento/entendendo_um_pouco_a_api_google_maps/" target="_blank">Imasters</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/entendendo-um-pouco-a-api-google-maps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Frameworks no PHP: O que, quando, por que e qual?</title>
		<link>http://www.debugando.com/frameworks-no-php-o-que-quando-por-que-e-qual/</link>
		<comments>http://www.debugando.com/frameworks-no-php-o-que-quando-por-que-e-qual/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 20:45:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Codelgniter]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=637</guid>
		<description><![CDATA[
PHP é a linguagem de programação mais famosa do mundo por várias razões: flexibilidade, facilidade de uso e vários outros fatores. Mas algumas vezes a programação se torna monótona e/ou repetitiva, e é aí que um framework pode ajudar.
O que é um framework de PHP?
De forma resumida o framework é uma estrutura, uma fundação para [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>PHP é a linguagem de programação mais famosa do mundo por várias razões: flexibilidade, facilidade de uso e vários outros fatores. Mas algumas vezes a programação se torna monótona e/ou repetitiva, e é aí que um <strong>framework</strong> pode ajudar.</p>
<h4>O que é um <em>framework</em> de PHP?</h4>
<p>De forma resumida o framework é uma estrutura, uma fundação para você criar a sua aplicação. Em outras palavras o framework te permite o desenvolvimento rápido de aplicações (RAD), o que faz economizar tempo, ajuda a criar aplicações mais sólidas e seguras além de reduzir a quantidade de código repetido. Os frameworks também permitem que os iniciantes criem aplicações mais estáveis garantindo uma boa relação entre o banco de dados e a camada externa de exibição. Isso tudo te permite gastar mais tempo desenvolvendo a aplicação em si do que repetindo os códigos que todas as aplicações têm.</p>
<p>A idéia padrão de trabalho por trás de um framework no PHP está ligada ao modelo MVC (Model View Controller). MVC é uma forma de programação que isola a <strong>lógica de negócio</strong> (como a aplicação funciona) da <strong>camada de exibição</strong> (a parte visual). O <strong>Model</strong> cuida do banco de dados, o <strong>View</strong> cuida da camada de exibição e o <strong>Controller</strong> cuida da lógica de negócio. Isso tudo faz com que você trabalhe mais rápido e de forma setorizada.</p>
<h4>Por que usar um <em>framework</em> de PHP?</h4>
<p>Os desenvolvedores utilizam frameworks por vários motivos, e o maior deles é para agilizar o processo de desenvolvimento. A re-utilização de código em vários projetos vai economizar muito tempo e trabalho? Isso é garantido, pois o framework já traz uma série de módulos pré-configurados (e funcionando) para fazer as mais variadas e comuns tarefas como envio de e-mails, conexão com o banco de dados, sanitização (limpeza) de dados e proteção contra ataques.</p>
<p>Estabilidade é outra grande vantagem dos frameworks. A simplicidade, que é um dos grandes &#8220;feitos&#8221; do PHP, também é o que possibilita inúmeros erros e falhas pelos principiantes? Nem todo código que funciona necessariamente está correto e bem desenvolvido.</p>
<h4>Quando usar um <em>framework</em> de PHP?</h4>
<p>Essa é uma dúvida muito comum em todos os níveis de desenvolvimento. Para a maioria dos iniciantes, usar um framework, além de ser mais fácil, vai ser mais estável, então é bom usá-los sempre que possível.</p>
<p>Em contrapartida vários programadores experientes vêem os frameworks como ferramentas usadas por programadores fracos, que não sabem como criar um código limpo, sólido e seguro.</p>
<p>Quando se trabalha com projetos que têm um prazo muito curto (o que eu chamo de &#8220;prazo Jack Bauer&#8221;) é sempre bom usar um framework, pois ele vai agilizar todo o processo. Outro motivo forte para o uso do framework é que você não está criando &#8220;código artesanal&#8221;? Há todo um padrão que você deve seguir para que as coisas funcionem, e está tudo documentado e explicado em uma vasta comunidade de suporte.</p>
<h3>CakePHP</h3>
<p>O <a href="http://www.cakephp.com.br/">CakePHP</a> é uma grande opção para iniciantes e desenvolvedores avançados. Ele foi criado usando as bases e modelos do Ruby on Rails e é pesadamente focado no desenvolvimento ágil e rápido. Recentemente ele tem se tornado muito famoso por sua simplicidade e facilidade de uso.</p>
<p>Eu <strong>pessoalmente</strong> recomendo o CakePHP. Minha vida de programador mudou depois que eu comecei a usar ele.</p>
<h4>Zend Framework</h4>
<p>O <a class="ext" href="http://framework.zend.com/">Zend Framework</a> é um framework focado no desenvolvimento de aplicações pra web 2.0. Ele tem um grande número de seguidores, fontes de suporte e uma comunidade cheia de usuários ativos e participativos. O Zend é o framework mais famoso hoje em dia, ele é robusto e permite a criação de aplicações <em>enterprise</em> (de grande porte) mas seu uso exige um conhecimento vasto do PHP.</p>
<h4>CodeIgniter</h4>
<p>Já o <a class="ext" href="http://codeigniter.com/">CodeIgniter</a> é bastante conhecido pela sua facilidade de uso, performance e rapidez. É ideal para aplicações rodando em servidores compartilhados. Ele oferece soluções simples e de pequeno porte, com um grande número de tutoriais em vídeo, fóruns e wikis.</p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/13718/php/frameworks_no_php_o_que_quando_por_que_e_qual/" target="_blank">Imasters</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/frameworks-no-php-o-que-quando-por-que-e-qual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conectando C# ao MySQL</title>
		<link>http://www.debugando.com/conectando-c-ao-mysql/</link>
		<comments>http://www.debugando.com/conectando-c-ao-mysql/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 20:42:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=635</guid>
		<description><![CDATA[Quem está habituado a programar C# normalmente utiliza SQL Server como banco de dados, uma vez que ela está integrada no Visual Studio e, por isso mesmo, existe grande facilidade em trabalhar com as duas ferramentas.
Por vezes existem projetos em que se torna conveniente (por várias razões) utilizar outro tipo de base de dados. Seja [...]]]></description>
			<content:encoded><![CDATA[<p>Quem está habituado a programar C# normalmente utiliza SQL Server como banco de dados, uma vez que ela está integrada no Visual Studio e, por isso mesmo, existe grande facilidade em trabalhar com as duas ferramentas.</p>
<p>Por vezes existem projetos em que se torna conveniente (por várias razões) utilizar outro tipo de base de dados. Seja que banco de dados for, a sua integração é sempre diferente do SQL Server.</p>
<p>Neste caso vou mostrar como fazer a integração entre o C# e o MySQL.</p>
<p>Supondo que já existe uma instalação do MySQL na máquina, precisamos instalar um intermediário entre o C# e a base de dados. Neste caso necessitamos instalar o MySQL Connector NET.</p>
<p><a class="ext" href="http://dev.mysql.com/downloads/connector/net/6.0.html">Download</a></p>
<p>A <a class="ext" href="http://dev.mysql.com/downloadshttp://dev.mysql.com/downloads/connector/net/5.2.html">versão 5.2</a> já tem suporte ao Visual Studio 2008, mas eu vou utilizar a última versão (6.0).</p>
<p>Instalamos o Connector Net 6.0.</p>
<p>Devemos já ter uma base de dados com uma tabela (users por exemplo), em que os campos da tabela são: id, nome, email.</p>
<p>Como exemplo criamos um projecto Windows Forms Application.</p>
<p>Antes de mais nada, devemos fazer uma referência à classe que vai ligar o C# ao MySQL. Para isso vamos ao painel Solution Explorer, na raiz do projeto, clicamos com o lado direito do mouse e selecionamos Add Reference.</p>
<p><img src="http://conteudo.imasters.uol.com.br/13681/mysqlcsharp1.gif" alt="" /></p>
<p>Na primeira divisória (.NET) selecionamos a referência MySQL.Data e damos OK.</p>
<p>Não esquecer: incluir no início do código as classes:</p>
<p><em>using  System.Data; </em></p>
<p><em>using MySql.Data.MySqlClient;</em></p>
<p>Sem adicionar a referência à MySQL.Data, a classe MySql.Data.MySqlClient não será reconhecida.</p>
<p>Para exemplificar fazemos um formulário de inserção de dados (nome e e-mail) na base de dados.</p>
<p>No form colocamos duas caixas de texto, uma para o nome (txtNome) e outra para o e-mail (txtMail) e um botão que terá a ação de inserir os dados na base de dados.</p>
<p><img src="http://conteudo.imasters.uol.com.br/13681/mysqlcsharp2.gif" alt="" /></p>
<p>Vamos então definir, em primeiro lugar, o dataset e a string de conexão à base de dados.</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="typ">MySqlConnection</span><span class="pln"> bdConn</span><span class="pun">;</span><span class="pln"> </span><span class="com">//MySQL</span><span class="pln">
</span><span class="kwd">private</span><span class="pln"> </span><span class="typ">MySqlDataAdapter</span><span class="pln"> bdAdapter</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">private</span><span class="pln"> </span><span class="typ">DataSet</span><span class="pln"> bdDataSet</span><span class="pun">;</span><span class="pln"> </span><span class="com">//MySQL</span></code></em></pre>
</div>
<p><em>Na ação do botão:</em></p>
<div class="codigo">
<pre><em><code><span class="com">//Definição do dataset</span><span class="pln">
bdDataSet </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">DataSet</span><span class="pun">();</span><span class="pln">
 </span><span class="com">//Define string de conexão</span><span class="pln">
bdConn </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MySqlConnection</span><span class="pun">(</span><span class="str">"Persist Security  Info=False;server=localhost;database=rfidapp;uid=root;server=localhost;database=rfidapp;uid=root;pwd=''"</span><span class="pun">);</span></code></em></pre>
</div>
<p><em>Neste caso a base de dados não tem password.</em></p>
<div class="codigo">
<pre><em><code><span class="com">//Abre conecção</span><span class="pln">
 </span><span class="kwd">try</span><span class="pun">{</span><span class="pln">
        bdConn</span><span class="pun">.</span><span class="typ">Open</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">catch</span><span class="pun">{</span><span class="pln">
 </span><span class="typ">MessageBox</span><span class="pun">.</span><span class="typ">Show</span><span class="pun">(</span><span class="str">"Impossível estabelecer conexão"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">//Verifica se a conexão está aberta</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">bdConn</span><span class="pun">.</span><span class="typ">State</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="typ">ConnectionState</span><span class="pun">.</span><span class="typ">Open</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        </span><span class="com">//Se estiver aberta insere os dados na BD</span><span class="pln">
</span><span class="typ">MySqlCommand</span><span class="pln"> commS </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MySqlCommand</span><span class="pun">(</span><span class="str">"INSERT INTO regists VALUES('',\\'"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> txtNome </span><span class="pun">+</span><span class="pln"> </span><span class="str">"\\',\\'"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> txtMail </span><span class="pun">+</span><span class="pln"> </span><span class="str">"\\')"</span><span class="pun">,</span><span class="pln"> bdConn</span><span class="pun">);</span><span class="pln">
commS</span><span class="pun">.</span><span class="typ">BeginExecuteNonQuery</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Tome atenção na sintaxe do SQL para o MySQL (INSERT) que é um pouco diferente do C#/SQL Server.</p>
<p>Neste momento o formulário deverá  inserir dados no BD.</p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/13681/mysql/conectando_c_ao_mysql/" target="_blank">Imasters</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/conectando-c-ao-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Manipulação de dados BLOB com PHP e MySQL</title>
		<link>http://www.debugando.com/manipulacao-de-dados-blob-com-php-e-mysql/</link>
		<comments>http://www.debugando.com/manipulacao-de-dados-blob-com-php-e-mysql/#comments</comments>
		<pubDate>Thu, 14 May 2009 14:41:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=597</guid>
		<description><![CDATA[
Sem dúvida alguma, uma das perguntas mais frequentes em relação ao MySQL é: &#8220;como posso armazenar arquivos em uma base de dados?&#8221;. A resposta é: tens que usar o tipo de dados BLOB. Estes BLOBs (Binary Large Objects) podem armazenar praticamente qualquer tipo de dados, incluindo documentos do MS Word, imagens gif/jpeg, arquivos PDF,  [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>Sem dúvida alguma, uma das perguntas mais frequentes em relação ao MySQL é: &#8220;como posso armazenar arquivos em uma base de dados?&#8221;. A resposta é: tens que usar o tipo de dados BLOB. Estes BLOBs (Binary Large Objects) podem armazenar praticamente qualquer tipo de dados, incluindo documentos do MS Word, imagens gif/jpeg, arquivos PDF,  mp3, etc.</p>
<p>Neste artigo vamos ver como criar um repositório de arquivos binários usando PHP e MySQL para poder armazenar diferentes tipos de arquivos. Veremos como armazenar cada um dos arquivos em uma base de dados, para posteriormente recuperá-los.</p>
<p>Para testar os exemplos deste artigo, é necessário ter acesso a um servidor com suporte a PHP, além de contar com um servidor MySQL. Assumindo que você conte com os privilégios apropriados para criar a base dados, e que o MySQL está rodando no mesmo servidor que o PHP, vamos iniciar o desenvolvimento.</p>
<h4><strong>Criando a base de dados</strong></h4>
<p>Nosso repositório de documentos usará uma base dados que contenha unicamente uma tabela para armazenar todos os documentos. O banco de dados será chamado de &#8220;<strong>repositorio</strong>&#8220;, e a tabela de &#8220;<strong>arquivos</strong>&#8220;.</p>
<p><strong>Código SQL para criar a tabela</strong></p>
<div class="codigo">
<pre><em><code><span class="pln">CREATE TABLE arquivos</span><span class="pun">(</span><span class="pln">
id </span><span class="kwd">int</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">null</span><span class="pln"> auto_increment primary key</span><span class="pun">,</span><span class="pln">
nome varchar</span><span class="pun">(</span><span class="lit">50</span><span class="pun">),</span><span class="pln">
titulo varchar</span><span class="pun">(</span><span class="lit">50</span><span class="pun">),</span><span class="pln">
conteudo mediumblob</span><span class="pun">,</span><span class="pln">
tipo varchar</span><span class="pun">(</span><span class="lit">50</span><span class="pun">));</span></code></em></pre>
</div>
<p>Agora temos uma base chamada <strong>repositorio</strong>, que contém uma tabela chamada <strong>arquivos</strong>.</p>
<p>Veja abaixo informações sobre cada campo da tabela arquivos:</p>
<ul>
<li><strong>id -</strong> um número inteiro que nos proporcionará um identificador único para cada arquivo que iremos armazenar. Este será incrementado automaticamente cada vez que for inserido um novo registro.</li>
<li><strong>nome -</strong> o nome original do arquivo, por exemplo, fot.gif, curriculum.doc, etc.</li>
<li><strong>titulo -</strong> uma breve descrição de cada arquivo que será gravada na tabela, por exemplo &#8220;Carta para minha noiva&#8221;, ou &#8220;A foto do meu irmão&#8221;. Este título será usado posteriormente na visualização dos arquivos do repositório em uma página web.</li>
<li><strong>conteudo</strong> &#8211; um campo do tipo binário (blob) para guardar o conteúdo de cada arquivo. Na nossa tabela usamos um tipo mediumblob, o qual pode armazenar arquivos de até 16Mb.<strong><br />
</strong></li>
<li><strong>ipo</strong> &#8211; como veremos mais adiante, cada arquivo (seja um .doc, .gif, .pdf, etc) tem um tipo único. Quando se envia um<br />
arquivo para o servidor web através de uma página web, o navegar envia ao servidor a informação acerca do tipo de arquivo, o tipo de conteúdo do arquivo, etc. Os tipos de conteúdo são simples cadeias. O tipo de conteúdo para um arquivo MS WORD é &#8220;application/msword&#8221;, o tipo de conteúdo para uma imagem é &#8220;image/gif&#8221;, etc.</li>
</ul>
<h4><strong>Agregando arquivos à base de dados</strong></h4>
<p>Agora que temos a base de dados do nosso repositório e sabemos a finalidade de cada campo, vamos criar uma simples página web que permita selecionar um arquivo desde o navegador para posteriormente enviá-lo para um script em PHP que ficará encarregado de armazená-lo em nossa base de dados.A página web será nomeada <strong>escolher_arquivo.html</strong> e o script em PHP será chamado de <strong>guardar_arquivo.php</strong>.</p>
<p>A página web pode conter todo o código HTML que se deseje, mas é necessário que se inclua o seguinte formulário para que se tenha a opção de escolher um arquivo e enviá-lo ao servidor.</p>
<div class="codigo">
<pre><em><code><span class="com">&lt;!-- ...código anterior --&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">form</span><span class="pln"> </span><span class="atn">enctype</span><span class="pun">=</span><span class="atv">"multipart/form-data"</span><span class="pln"> </span><span class="atn">action</span><span class="pun">=</span><span class="atv">"guardar_arquivo.php"</span><span class="pln"> </span><span class="atn">method</span><span class="pun">=</span><span class="atv">"post"</span><span class="pun">&gt;</span><span class="pln">
Descrição </span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"titulo"</span><span class="pln"> </span><span class="atn">size</span><span class="pun">=</span><span class="atv">"30"</span><span class="pun">&gt;</span><span class="pln">
Arquivo </span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"file"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"arquivo"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"Enviar arquivo"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">form</span><span class="pun">&gt;</span><span class="pln">
</span><span class="com">&lt;!-- ...código posterior --&gt;</span></code></em></pre>
</div>
<p>Do código que escrevemos temos que frisar o seguinte:</p>
<ul>
<li>o formulário necessita de um atributo enctype com um valor multipart/form-data</li>
<li>o método de envio tem que ser POST</li>
<li>tem que ser usado pelo menos um campo do tipo FILE</li>
</ul>
<p>Estes são os três requerimentos básicos que a página HTML deve cumprir para que seja possível enviar o arquivo para o servidor.</p>
<p>Antes de escrever o código do script guarda_arquivo.php, vamos comentar algo acerca da forma como serão recebidos os dados do arquivo em questão.</p>
<p>Desde a versão 4.1 do PHP é recomendada a utilização da variável <strong>$_FILES</strong> para a leitura dos dados do arquivo que está sendo enviado ao servidor. Abaixo estão listadas os índices e parâmetros recebidos pela variável. Note que o nome dos índices depende de como é nomeado o campo do tipo FILE no formulário.<br />
<strong><br />
$_FILES['arquivo']['name']</strong><br />
Nome original do arquivo<strong><br />
$_FILES['arquivo']['type']</strong><br />
O tipo MIME do arquivo, &#8230; image/gif, application/pdf, application/msword,.. etc<br />
<strong>$_FILES['arquivo']['size']</strong><br />
O tamanho do arquivo em bytes<strong><br />
$_FILES['arquivo']['tmp_name']</strong></p>
<p>O local do arquivo temporário que se cria quando o arquivo é enviado ao servidor. É nesta variável que são lidos todos os dados do arquivo em si. Se estes dados não são copiados ou movidos para outro lugar, ou em nosso caso, armazenados em uma base de dados, podem ser perdidos, já que o PHP elimina esses arquivos depois de um determinado tempo.</p>
<p>Por exemplo, estes são os possíveis valores para um arquivo j-odbc.zip que foi enviado ao servidor:</p>
<div class="codigo">
<pre><em><code><span class="pln">$_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="pln">name</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> j</span><span class="pun">-</span><span class="pln">jdbc</span><span class="pun">.</span><span class="pln">zip
$_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="pln">type</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> application</span><span class="pun">/</span><span class="pln">zip
$_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="pln">tmp_name</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">/tmp/</span><span class="pln">phpvXQpqP
$_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="pln">size</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">337945</span></code></em></pre>
</div>
<p>Vale ressaltar que devem ser revistos e, se necessário modificar as seguintes variáveis no arquivo de configuração do PHP para que você possa fazer o upload dos arquivos para o servidor, e pode ser gerida por um script PHP.</p>
<ul>
<li><strong>file_uploads</strong> &#8211; diz ao PHP se pode ou não ser feito o envio de arquivos para o servidor. Essa variável deve ter o valor  &#8220;On&#8221;.</li>
<li><strong>upload_max_filesize</strong> &#8211; diz ao PHP qual o tamanho máximo do arquivo que pode ser enviado ao servidor. Pode ser utilizado o sufixo &#8220;M&#8221; para indicar o valor em Megabytes, por exemplo, com um valor 2M se aceita um arquivo máximo de 2 Megabytes.</li>
<li><strong>upload_tmp_dir</strong> &#8211; é o diretório para onde será copiado temporariamente o conteúdo do arquivo quando for enviado ao<br />
servidor.</li>
</ul>
<p>Agora é o momento de mostrar o código PHP que vai armazenar o arquivo em nossa base de dados.</p>
<p><strong> <em>/* guardar_arquivo.php */</em></strong></p>
<div class="codigo">
<pre><em><code><span class="kwd">require</span><span class="pun">(</span><span class="str">"dbconnect.inc.php"</span><span class="pun">);</span><span class="pln">

 $arquiivo </span><span class="pun">=</span><span class="pln"> $_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="str">"tmp_name"</span><span class="pun">];</span><span class="pln">
 $tamanho </span><span class="pun">=</span><span class="pln"> $_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="str">"size"</span><span class="pun">];</span><span class="pln">
 $tipo    </span><span class="pun">=</span><span class="pln"> $_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="str">"type"</span><span class="pun">];</span><span class="pln">
 $nome  </span><span class="pun">=</span><span class="pln"> $_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="str">"name"</span><span class="pun">];</span><span class="pln">
 $titulo  </span><span class="pun">=</span><span class="pln"> $_POST</span><span class="pun">[</span><span class="str">"titulo"</span><span class="pun">];</span><span class="pln">

 </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> $arquivo </span><span class="pun">!=</span><span class="pln"> </span><span class="str">"none"</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
 </span><span class="pun">{</span><span class="pln">
 $fp </span><span class="pun">=</span><span class="pln"> fopen</span><span class="pun">(</span><span class="pln">$arquivo</span><span class="pun">,</span><span class="pln"> </span><span class="str">"rb"</span><span class="pun">);</span><span class="pln">
 $conteudo </span><span class="pun">=</span><span class="pln"> fread</span><span class="pun">(</span><span class="pln">$fp</span><span class="pun">,</span><span class="pln"> $tamanho</span><span class="pun">);</span><span class="pln">
 $conteudo </span><span class="pun">=</span><span class="pln"> addslashes</span><span class="pun">(</span><span class="pln">$conteudo</span><span class="pun">);</span><span class="pln">
 fclose</span><span class="pun">(</span><span class="pln">$fp</span><span class="pun">);</span><span class="pln"> 

 $qry </span><span class="pun">=</span><span class="pln"> </span><span class="str">"INSERT INTO arquivos VALUES
 (0,'$nome','$titulo','$conteudo','$tipo')"</span><span class="pun">;</span><span class="pln">

 mysql_query</span><span class="pun">(</span><span class="pln">$qry</span><span class="pun">);</span><span class="pln">

 </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">mysql_affected_rows</span><span class="pun">(</span><span class="pln">$conn</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
 </span><span class="kwd">print</span><span class="pln"> </span><span class="str">"O arquivo foi gravado na base de dados."</span><span class="pun">;</span><span class="pln">
 </span><span class="kwd">else</span><span class="pln">
 </span><span class="kwd">print</span><span class="pln"> </span><span class="str">"Não foi possível gravar o arquivo na base de dados."</span><span class="pun">;</span><span class="pln">
 </span><span class="pun">}</span><span class="pln">
 </span><span class="kwd">else</span><span class="pln">
 </span><span class="kwd">print</span><span class="pln"> </span><span class="str">"Não foi possível carregar o arquivo para o servidor."</span><span class="pun">;</span></code></em></pre>
</div>
<p>O arquivo <strong>dbconnetc.inc.php</strong> contém unicamente as instruções para conexão ao MySQL e selecionar a base de dados que será utilizada.<strong><br />
</strong></p>
<p><em><strong>/* dbconnect.inc.php */</strong></em></p>
<div class="codigo">
<pre><em><code><span class="pln">$conn </span><span class="pun">=</span><span class="pln"> mysql_connect</span><span class="pun">(</span><span class="str">"localhost"</span><span class="pun">,</span><span class="str">"usuário"</span><span class="pun">,</span><span class="str">"senha"</span><span class="pun">);</span><span class="pln">
 mysql_select_db</span><span class="pun">(</span><span class="str">"repositorio"</span><span class="pun">);</span><strong><span class="pln">
</span></strong></code></em></pre>
</div>
<h4><strong>Listando os arquivos da base de dados</strong></h4>
<p>Já que gravamos alguns arquivos no nosso repositório, agora podemos listar as informações deles, para posteriomente fazermos o download.</p>
<p><em><strong>/* listar_arquivos.php */</strong></em></p>
<div class="codigo">
<pre><em><code><span class="kwd">require</span><span class="pun">(</span><span class="str">"dbconnect.inc.php"</span><span class="pun">);</span><span class="pln">

$qry </span><span class="pun">=</span><span class="pln"> </span><span class="str">"SELECT id, nome, titulo, tipo FROM arquivos"</span><span class="pun">;</span><span class="pln">
$res </span><span class="pun">=</span><span class="pln"> mysql_query</span><span class="pun">(</span><span class="pln">$qry</span><span class="pun">);</span><span class="pln">

</span><span class="kwd">while</span><span class="pun">(</span><span class="pln">$fila </span><span class="pun">=</span><span class="pln"> mysql_fetch_array</span><span class="pun">(</span><span class="pln">$res</span><span class="pun">))</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="str">"$fila[titulo]
&lt;br&gt;
$fila[nome] ($fila[tipo])
&lt;br&gt;
&lt;a href='baixar_arquivo.php?id=$fila[id]'&gt;Fazer Download&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><strong><span class="pln">
</span></strong></code></em></pre>
</div>
<h4><strong>Fazendo o download dos arquivos da base de dados</strong></h4>
<p>Como se pode observar no código anterior, foi colocado um link para cada arquivo, chamado baixar_arquivo.php. A funcionalidade deste script será ler os dados dos arquivos que estão gravados na base de dados e enviá-los ao navegador.</p>
<p>Dependendo do tipo de arquivo da qual se trate, o navegador poderá mostrá-lo por ele mesmo o conteúdo do arquivo.</p>
<p><strong> <em>/* Script baixar_arquivo.php */</em></strong></p>
<div class="codigo">
<pre><em><code><span class="kwd">require</span><span class="pun">(</span><span class="str">"dbconnect.inc.php"</span><span class="pun">);</span><span class="pln">

 $qry </span><span class="pun">=</span><span class="pln"> </span><span class="str">"SELECT tipo, conteudo FROM arquivos WHERE id=$id"</span><span class="pun">;</span><span class="pln">
 $res </span><span class="pun">=</span><span class="pln"> mysql_query</span><span class="pun">(</span><span class="pln">$qry</span><span class="pun">);</span><span class="pln">
 $tipo </span><span class="pun">=</span><span class="pln"> mysql_result</span><span class="pun">(</span><span class="pln">$res</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"tipo"</span><span class="pun">);</span><span class="pln">
 $conteudo </span><span class="pun">=</span><span class="pln"> mysql_result</span><span class="pun">(</span><span class="pln">$res</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"conteudo"</span><span class="pun">);</span><span class="pln">

 header</span><span class="pun">(</span><span class="str">"Content-type: $tipo"</span><span class="pun">);</span><span class="pln">
 </span><span class="kwd">print</span><span class="pln"> $conteudo</span><span class="pun">;</span></code></em></pre>
</div>
<h4><strong>Comentário Finais</strong></h4>
<p>Como se pode observar, o código PHP dos scripts é bem simples, e não tem nenhum grau de dificuldade. O código foi desenvolvido com o propósito mais simples possível, para que possa ser melhorado e utilizado em aplicações mais robustas.</p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/12775/php/manipulacao_de_dados_blob_com_php_e_mysql/" target="_blank">Imasters</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/manipulacao-de-dados-blob-com-php-e-mysql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Barra de Progresso com AJAX</title>
		<link>http://www.debugando.com/barra-de-progresso-com-ajax/</link>
		<comments>http://www.debugando.com/barra-de-progresso-com-ajax/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 18:59:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=581</guid>
		<description><![CDATA[
Uma das necessidades com que nos deparamos na hora de realizar projetos longos na web é indicar ao  usuário o quanto é preciso esperar. Às vezes é bastante complicado criar uma barra de progresso que mostre o estado atual do processo que está sendo executado.
Uma forma de realizar essa tarefa é usando AJAX. Fazemos [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>Uma das necessidades com que nos deparamos na hora de realizar projetos longos na web é indicar ao  usuário o quanto é preciso esperar. Às vezes é bastante complicado criar uma barra de progresso que mostre o estado atual do processo que está sendo executado.</p>
<p>Uma forma de realizar essa tarefa é usando AJAX. Fazemos uma chamada AJAX que executa a ação, e quando o objeto AJAX tem o estado LOADING (readyState == 3), podemos obter a resposta do script chamado e passá-lo para mostrar o percentual da ação que está sendo realizada.</p>
<p>Para isso, desenvolveremos um script (res. php, por exemplo) que devolva a porcentagem seguida por um hífen. Por exemplo, quando passar por 1% será retornado pelo script &#8220;1-&#8221;, quando passar por 5% será retornado &#8220;1-2-3-4-5&#8243;. Processando isso podemos saber, através do último número, o percentual já processado.</p>
<p>O PHP seria o seguinte:</p>
<div class="codigo">
<pre><em><code><span class="kwd">for</span><span class="pun">(</span><span class="pln">$i</span><span class="pun">=</span><span class="lit">0</span><span class="pun">;</span><span class="pln"> $i</span><span class="pun">&lt;</span><span class="lit">10000000</span><span class="pun">;</span><span class="pln"> $i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">  if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$i</span><span class="pun">%</span><span class="lit">10000</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> echo </span><span class="pun">((</span><span class="kwd">int</span><span class="pun">)</span><span class="pln"> $i</span><span class="pun">/</span><span class="lit">100000</span><span class="pun">)</span><span class="pln">.</span><span class="str">'-'</span><span class="pun">;</span><span class="pln">
  flush</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span></code></em></pre>
</div>
<p>E o JavaScript seria assim:</p>
<div class="codigo">
<pre><code><em><span class="kwd">function</span><span class="pln"> ajaxobj</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
</span><span class="kwd">  try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
    _ajaxobj </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ActiveXObject</span><span class="pun">(</span><span class="str">"Msxml2.XMLHTTP"</span><span class="pun">);</span><span class="pln">  
</span><span class="pun">  }</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="pln">e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
</span><span class="kwd">  try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
    _ajaxobj </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ActiveXObject</span><span class="pun">(</span><span class="str">"Microsoft.XMLHTTP"</span><span class="pun">);</span><span class="pln">  
</span><span class="pun">  }</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="pln">E</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
    _ajaxobj </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">  
</span><span class="pun">  }</span><span class="pln">  
</span><span class="pun">}</span><span class="pln">  

 </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">_ajaxobj </span><span class="pun">&amp;&amp;</span><span class="pln"> </span><span class="kwd">typeof</span><span class="pln"> </span><span class="typ">XMLHttpRequest</span><span class="pun">!=</span><span class="str">'undefined'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
   _ajaxobj </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">XMLHttpRequest</span><span class="pun">();</span><span class="pln">  
</span><span class="pun"> }</span><span class="pln">  

</span><span class="kwd"> return</span><span class="pln"> _ajaxobj</span><span class="pun">;</span></em><span class="pln"><em> </em> 
</span><span class="pun">}</span><span class="pln">
</span><em><span class="kwd">function</span><span class="pln"> prueba </span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
  ajax </span><span class="pun">=</span><span class="pln"> ajaxobj</span><span class="pun">();</span><span class="pln">  
  ajax</span><span class="pun">.</span><span class="pln">open</span><span class="pun">(</span><span class="str">"GET"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"res.php"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span><span class="pln">  
  ajax</span><span class="pun">.</span><span class="pln">onreadystatechange</span><span class="pun">=</span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">  if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">ajax</span><span class="pun">.</span><span class="pln">readyState </span><span class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  

</span><span class="com">   // Mostramos o percentual </span><span class="pln">
</span><span class="kwd">   var</span><span class="pln"> res </span><span class="pun">=</span><span class="pln"> ajax</span><span class="pun">.</span><span class="pln">responseText</span><span class="pun">;</span><span class="pln">
   res </span><span class="pun">=</span><span class="pln"> res</span><span class="pun">.</span><span class="pln">split</span><span class="pun">(</span><span class="str">'-'</span><span class="pun">);</span><span class="pln">  
   alert</span><span class="pun">(</span><span class="pln">res</span><span class="pun">[</span><span class="pln">res</span><span class="pun">.</span><span class="pln">length</span><span class="pun">-</span><span class="lit">2</span><span class="pun">]);</span><span class="pln">  
</span><span class="pun">  }</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">ajax</span><span class="pun">.</span><span class="pln">readyState </span><span class="pun">==</span><span class="pln"> </span><span class="lit">4</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  

</span><span class="com">  // Fim</span><span class="pln">
  alert</span><span class="pun">(</span><span class="str">'FIM'</span><span class="pun">);</span><span class="pln">  
</span><span class="pun"> }</span><span class="pln">  
</span><span class="pun">}</span><span class="pln">  

</span><span class="com"> // Enviamos algo para que o processo funcione</span><span class="pln">
 ajax</span><span class="pun">.</span><span class="pln">send</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">);</span><span class="pln">  
</span><span class="pun">}</span><span class="pln">  </span></em></code></pre>
</div>
<p>Como não existe nada perfeito, e menos ainda o Internet Explorer, esse script só funcionou no Firefox, Opera, Safari e Chrome.</p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/12615/ajax/barra_de_progresso_com_ajax/" target="_blank">Imasters</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/barra-de-progresso-com-ajax/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Construindo aplicações ricas de internet com Adobe Flex 3 e ASP.NET</title>
		<link>http://www.debugando.com/construindo-aplicacoes-ricas-de-internet-com-adobe-flex-3-e-aspnet/</link>
		<comments>http://www.debugando.com/construindo-aplicacoes-ricas-de-internet-com-adobe-flex-3-e-aspnet/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 21:52:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[FLEX]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[ASP .NET]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=545</guid>
		<description><![CDATA[
Utilizarei o Visual Studio 2008 com o SQL Server 2005 e o banco de dados Northwind, porém os mesmos passos podem ser seguidos no Visual Studio 2005 com o SQL Server 2000.
Crie um novo projeto Web no Visual Studio, logo em seguida clique com o botão direito sobre a solução e escolha Add / New [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>Utilizarei o Visual Studio 2008 com o SQL Server 2005 e o banco de dados Northwind, porém os mesmos passos podem ser seguidos no Visual Studio 2005 com o SQL Server 2000.</p>
<p>Crie um novo projeto Web no Visual Studio, logo em seguida clique com o botão direito sobre a solução e escolha Add / New Item.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/01_adicionarnovoitem-300x216.png" alt="" /></p>
<p>Na janela que se abrirá, selecione o Item DataSet e atribua o nome DsTerritorio.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/02_novodataset-300x181.png" alt="" /></p>
<p>Com o DataSet criado, clique com o botão direito dentro da janela do DataSet, escolha Add / TableAdapter, abrirá uma janela solicitando qual conexão com o banco de dados será utilizado para a construção do TableAdapter, crie a conexão com o SQL Server e salve com o nome NorthwindConn e clique em Next.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/03_adicionartableadapter-300x216.png" alt="" /></p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/04_selecionarconexao-300x235.png" alt="" /></p>
<p>Na próxima janela selecione como o TableAdapter acessará o banco de dados, as opções possíveis são: SQL statements, criar nova Stored Procedure ou utilizar uma Stored Procedure já existente no banco de dados.</p>
<p>Deixe a opção Use SQL statements marcada e clique em Next.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/05_selecionarmodoacesso-300x235.png" alt="" /></p>
<p>A próxima janela é onde se insere o código SQL para o retorno dos dados, porém você pode utilizar o Query Builder, que é a ferramenta visual para construção de instruções SQL, portanto clique no botão Query Builder.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/06_entradasql-300x235.png" alt="" /></p>
<p>Após clicar no botão Query Builder, aparecerão duas janelas, a janela do próprio Query Builder e a janela de Add Table, a segunda janela já com as tabelas existentes no banco de dados.</p>
<p>Procure e selecione a tabela Region, em seguida, clique em Add. A tabela Region aparecerá no Query Builder.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/07_adicionartabelaquerybuilder-300x216.png" alt="" /></p>
<p>Clique em Close, em seguida, selecione as duas colunas da tabela Region (RegionID e RegionDescription). Agora clique em Execute Query.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/08_querybuilderregion-300x246.png" alt="" /></p>
<p>Se o resultado do Execute Query for igual à figura acima, clique em Ok. A próxima janela solicitará nomes para os métodos de Fill e Return que por padrão são Fill e GetData respectivamente.</p>
<p>Para a tabela Region, deixe os nomes sugeridos e clique em Next. A próxima janela exibirá o sumário da criação do TableAdapter. Clique em Finish.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/09_definirnomemetodo-300x235.png" alt="" /></p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/10_tableadaptercriado-300x235.png" alt="" /></p>
<p>Agora já é possível visualizar o TableAdapter dentro do DataSet dsTerritorio.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/11_datasetterritorio-300x216.png" alt="" /></p>
<p>Ainda dentro do DataSet dsTerritorio, crie outro TableAdapter. Novamente, clique com o botão direito dentro do DataSet, escolha Add / TableAdapter, escolha a conexão com a base de dados, também escolha Use SQL statements.</p>
<p>Na janela do Query Builder, adicione a tabela Territories, selecione todas as colunas. Na linha RegionID, insira o parâmetro @RegionID na coluna Filter. O parâmetro será responsável por aplicar o filtro de qual região o SQL retornará os territórios.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/12_querybuilderterritories-300x246.png" alt="" /></p>
<p>Na janela de definições dos métodos, acrescente a expressão ByRegionID, após Fill e GetData. Dessa maneira apenas pelo nome do método é possível saber que um parâmetro chamado RegionID é esperado.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/13_definirnomemetodoterritories-300x235.png" alt="" /></p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/14_datasetterritoriocompleto-300x216.png" alt="" /></p>
<p>Agora que concluiu a criação do DataSet dsTerritorio, crie o DataSet dsVendedor, e dentro dele crie um TableAdapter com o SQL abaixo.</p>
<div class="codigo">
<pre><em><code><span class="pln">SELECT  </span><span class="typ">EmployeeTerritories</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pun">,</span><span class="pln">
        </span><span class="typ">Employees</span><span class="pun">.</span><span class="typ">FirstName</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">' '</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">Employees</span><span class="pun">.</span><span class="typ">LastName</span><span class="pln"> AS </span><span class="typ">FullName</span><span class="pun">,</span><span class="pln">
        </span><span class="typ">EmployeeTerritories</span><span class="pun">.</span><span class="typ">TerritoryID</span><span class="pln">
FROM </span><span class="typ">Employees</span><span class="pln"> INNER JOIN </span><span class="typ">EmployeeTerritories</span><span class="pln">
        ON </span><span class="typ">Employees</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">EmployeeTerritories</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pln">
WHERE </span><span class="pun">(</span><span class="typ">EmployeeTerritories</span><span class="pun">.</span><span class="typ">TerritoryID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">@TerritoryID</span><span class="pun">)</span></code></em></pre>
</div>
<p><img src="http://conteudo.imasters.uol.com.br/12375/15_entradasqlemployees-300x235.png" alt="" /></p>
<p>Acrescente ByTerritoryID na definição dos métodos Fill e GetData.</p>
<p>Após clicar em Finish, o TableAdapter criado estará com os nomes DataTable1 e DataTable1TableAdapter, altere-os para Employee e EmployeeTableAdapter.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/16_tableadapteremployee.png" alt="" /></p>
<p>Crie um novo DataSet chamado dsCliente, e também crie um novo TableAdapter com o código abaixo.</p>
<div class="codigo">
<pre><em><code><span class="pln">SELECT  </span><span class="typ">Customers</span><span class="pun">.</span><span class="typ">CustomerID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Customers</span><span class="pun">.</span><span class="typ">CompanyName</span><span class="pun">,</span><span class="pln"> </span><span class="typ">CustomerEmployee</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pln">
FROM </span><span class="pun">(</span><span class="pln">SELECT </span><span class="typ">CustomerID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pln">
        FROM </span><span class="typ">Orders</span><span class="pln">
        GROUP BY </span><span class="typ">CustomerID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pun">)</span><span class="pln"> AS </span><span class="typ">CustomerEmployee</span><span class="pln"> INNER JOIN
        </span><span class="typ">Customers</span><span class="pln"> ON </span><span class="typ">CustomerEmployee</span><span class="pun">.</span><span class="typ">CustomerID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Customers</span><span class="pun">.</span><span class="typ">CustomerID</span><span class="pln">
WHERE </span><span class="pun">(</span><span class="typ">CustomerEmployee</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">@EmployeeID</span><span class="pun">)</span></code></em></pre>
</div>
<p>Para os nomes dos métodos Fill e GetDate, não esqueça de adicionar ByEmployeeID em ambos.</p>
<p>Como no TableAdapter de vendedores, os nomes deste TableAdapter também não estão corretos, altere-os para Customers e CustomersTableAdapter respectivamente.</p>
<p>Para concluir a construção dos DataSets, crie mais um chamado dsPedido e também crie um novo TableAdapter com o código abaixo.</p>
<div class="codigo">
<pre><em><code><span class="pln">SELECT </span><span class="typ">OrderID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">CustomerIR</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">OrderDate</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ShippedDate</span><span class="pun">,</span><span class="pln">
        </span><span class="typ">ShipName</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ShipAddress</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ShipCity</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Shipcountry</span><span class="pln">
FROM </span><span class="typ">Orders</span><span class="pln">
WHERE </span><span class="pun">(</span><span class="typ">CustormerID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">@CustomerID</span><span class="pun">)</span><span class="pln"> AND
        </span><span class="pun">(</span><span class="typ">EmployeeID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">@EmployeeID</span><span class="pun">)</span></code></em></pre>
</div>
<p>Acrescente ByCustomerIDEmployeeID  aos métodos Fill e GetData e clique em Finalizar.</p>
<p>Agora crie o último TableAdapter chamado OrderDetails conforme a figura abaixo.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/17_sqlorderdetails-300x247.png" alt="" /></p>
<p>Após a criação de todos os DataSets (Território, Vendedor, Cliente e Pedido) o projeto deve estar conforme a figura abaixo.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/18_arquivosprojeto.png" alt="" /></p>
<p>Copie os seguintes arquivos do diretório de instalação do WebOrb (por padrão em c:\inetpub\wwwroot\weborb30) para o diretório do projeto .NET.</p>
<p><em>/weborb.config<br />
/bin/weborb.dll<br />
/WEB-INF</em></p>
<p>Adicione o código XML abaixo ao web.config do projeto .NET.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">configuration</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;</span><span class="tag">system</span><span class="pln">.</span><span class="atn">web</span><span class="pun">&gt;</span><span class="pln">
   </span><span class="pun">&lt;</span><span class="tag">httpHandlers</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="tag">add</span><span class="pln"> </span><span class="atn">verb</span><span class="pun">=</span><span class="atv">"*"</span><span class="pln"> </span><span class="atn">path</span><span class="pun">=</span><span class="atv">"weborb.aspx"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"Weborb.ORBHttpHandler"</span><span class="pun">/&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="tag">add</span><span class="pln"> </span><span class="atn">verb</span><span class="pun">=</span><span class="atv">"*"</span><span class="pln"> </span><span class="atn">path</span><span class="pun">=</span><span class="atv">"codegen.aspx"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="pln"> </span><span class="atv">"Weborb.Management.CodeGen.CodegeneratorHttpHandler"</span><span class="pun">/&gt;</span><span class="pln">
   </span><span class="pun">&lt;/</span><span class="tag">httpHandlers</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;/</span><span class="tag">system</span><span class="pln">.</span><span class="atn">web</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">configuration</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>É preciso referenciar o weborb.dll ao projeto, para isso no Solution Explorer do Visual Studio, clique duas vezes sobre a opção My Project, em seguida clique em References e depois em Add / References?</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/19_myproject-300x216.png" alt="" /></p>
<p>Clique na aba Browse, localize o diretório Bin do projeto, selecione o arquivo weborb.dll e clique em OK, salve o projeto e feche a janela My Project.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/20_weborb_dll-300x246.png" alt="" /></p>
<p>Clique com o botão direito sobre a solução e escolha Add / New Item, porém escolha Class e dê o nome de csFlex.vb.</p>
<p>Nesta classe serão criados os métodos de chamada e retorno dos DataSets e TableAdapters criados anteriormente, através desses métodos é que a comunicação entre o .NET e o Flex ocorrerá.</p>
<p>Insira o código abaixo ao arquivo csFlex.vb</p>
<div class="codigo">
<pre><em><code><span class="typ">Imports</span><span class="pln"> </span><span class="typ">Weborb</span><span class="pun">.</span><span class="typ">Service</span><span class="pln">

</span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Class</span><span class="pln"> csFlex

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getRegion</span><span class="pun">()</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsTerritorioTableAdapters</span><span class="pun">.</span><span class="typ">RegionTableAdapter</span><span class="pun">().</span><span class="typ">GetData</span><span class="pun">()</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getTerritories</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">RegionID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsTerritorioTableAdapters</span><span class="pun">.</span><span class="typ">TerritoriesTableAdapter</span><span class="pun">().</span><span class="typ">GetDataByRegionID</span><span class="pun">(</span><span class="typ">RegionID</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getEmployee</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">TerritoryID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsVendedorTableAdapters</span><span class="pun">.</span><span class="typ">EmployeeTableAdapter</span><span class="pun">().</span><span class="typ">GetDataByTerritoryID</span><span class="pun">(</span><span class="typ">TerritoryID</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getCustomers</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsClienteTableAdapters</span><span class="pun">.</span><span class="typ">CustomersTableAdapter</span><span class="pun">().</span><span class="typ">GetDataByEmployeeID</span><span class="pun">(</span><span class="typ">EmployeeID</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getOrders</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">CustomerID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsPedidoTableAdapters</span><span class="pun">.</span><span class="typ">OrdersTableAdapter</span><span class="pun">().</span><span class="typ">GetDataByCustomerIDEmployeeID</span><span class="pun">(</span><span class="typ">CustomerID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getOrderDetails</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">OrderID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsPedidoTableAdapters</span><span class="pun">.</span><span class="typ">OrderDetailsTableAdapter</span><span class="pun">().</span><span class="typ">GetDataByOrderID</span><span class="pun">(</span><span class="typ">OrderID</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

</span><span class="typ">End</span><span class="pln"> </span><span class="typ">Class</span></code></em></pre>
</div>
<p>Salve e feche o arquivo csFlex, agora compile o projeto. Caso o Visual Studio sinalize algum erro, volte e execute os passos novamente.</p>
<p>Antes de criar a interface no Adobe Flex, crie a aplicação Web no Internet Information Services (IIS) com o nome do projeto, verifique se ao acessar o endereço através do navegador uma página em branco é exibida.</p>
<p>Agora já com a aplicação web configurada no IIS, abra o Adobe Flex Builder 3, adicione um novo projeto (File / New / Flex Project).</p>
<p>Agora defina o nome do Projeto, se a opção Use default location estiver marcada, desmarque-a e localize o endereço do projeto .NET e dentro da pasta do projeto crie uma nova pasta chamada FlexSrc. O Project location do Flex deve ficar como a figura abaixo. A opção de Application type deixe marcado Web Application, e em Server technology selecione ASP.NET. Clique em Next.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/21_definirnomeprojeto-300x267.png" alt="" /></p>
<p>Na próxima janela, na opção Server selecione Use Internet Information Services (IIS), em Web application root informe o diretório raiz da aplicação web definida no IIS e no campo Web application URL informe o endereço da aplicação no IIS. Após clicar no botão Validate Configuration, na parte superior da janela o Flex Builder deve ser informar: &#8220;The web application root and URL are valid&#8221;, caso apareça outra mensagem, os endereços informados não estão corretos, corrija antes de prosseguir.</p>
<p>Na mesma janela, um pouco abaixo está definida a pasta bin-debug como local a serem salvos os arquivos Flex compilados, deixe o nome que o Builder sugeriu e clique Next.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/22_definirservidor-300x267.png" alt="" /></p>
<p>Na última janela de configuração do projeto Flex, é possível definir qual a pasta onde o Flex Builder salvará os arquivos fontes, bem como qual o nome do primeiro arquivo do projeto a ser criado.</p>
<p>Deixe os campos preenchidos como o Builder sugeriu e clique em Finish. Após alguns segundos o Adobe Flex Builder 3 exibirá o arquivo ArtigoFlex.mxml pronto para o início da construção da interface da aplicação.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/23_adobeflexbuilder-300x216.png" alt="" /></p>
<p>Porém antes começar a codificar é necessário incluir um argumento de compilação ao projeto, pois sem esse argumento o Flex não conseguirá acessar os métodos construídos na classe csFlex. Para incluir o argumento, clique com o botão direito sobre o nome do projeto no Flex Navigator e em seguida clique em Properties. Com a janela de propriedades aberta, clique sobre a opção Flex Compiler, e insira o argumento após o argumento ?locale en_US</p>
<div class="codigo">
<pre><code><span class="pun">-</span><span class="pln">services c</span><span class="pun">:\</span><span class="typ">Inetpub</span><span class="pun">\</span><span class="pln">wwwroot</span><span class="pun">\</span><span class="pln">weborb30</span><span class="pun">\</span><span class="pln">web</span><span class="pun">-</span><span class="pln">inf</span><span class="pun">\</span><span class="pln">flex</span><span class="pun">\</span><span class="pln">services</span><span class="pun">-</span><span class="pln">config</span><span class="pun">.</span><span class="pln">xml</span></code></pre>
</div>
<p><img src="http://conteudo.imasters.uol.com.br/12375/24_propriedadeflexcompiler-300x230.png" alt="" /></p>
<p>Após inserir o argumento services, clique em OK.</p>
<p>Agora com o projeto corretamente configurado e pronto para comunicar com o .NET é possível iniciar a construção da interface, para tanto crie um painel, entre as tags , com o título Painel de Vendas, esse painel terá um tamanho ajustável conforme as dimensões do navegador do cliente, para isso configure as propriedades left, right, top e bottom, todos com o valor 10.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Panel</span><span class="pln"> </span><span class="atn">layout</span><span class="pun">=</span><span class="atv">"absolute"</span><span class="pln"> </span><span class="atn">left</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">right</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">top</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">bottom</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"Painel de Vendas"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:Panel</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>É possível verificar como o projeto está ficando, bastar clicar no Play.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/25_executaraplicacaoflex-300x36.png" alt="" /></p>
<p>Dentro do painel, crie um canvas na cor cinza.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Canvas</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"42"</span><span class="pln"> </span><span class="atn">left</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">top</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">right</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">backgroundColor</span><span class="pun">=</span><span class="atv">"#F3F3F3"</span><span class="pln"> </span><span class="atn">borderStyle</span><span class="pun">=</span><span class="atv">"none"</span><span class="pln"> </span><span class="atn">borderThickness</span><span class="pun">=</span><span class="atv">"1"</span><span class="pln"> </span><span class="atn">borderColor</span><span class="pun">=</span><span class="atv">"#C2BEBE"</span><span class="pun">&gt;</span><span class="pln">

</span><span class="pun">&lt;/</span><span class="tag">mx:Canvas</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Dentro do canvas coloque os labels e comboboxs que serão utilizados para selecionar região, território, vendedor e cliente, coloque também dentro do canvas o botão consultar.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Label</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"12"</span><span class="pln"> </span><span class="atn">text</span><span class="pun">=</span><span class="atv">"Região"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-348"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbRegion"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"RegionDescription"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-274"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Label</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"12"</span><span class="pln"> </span><span class="atn">text</span><span class="pun">=</span><span class="atv">"Território"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-194"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbTerritory"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"TerritoryDescription"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-114"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Label</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"12"</span><span class="pln"> </span><span class="atn">text</span><span class="pun">=</span><span class="atv">"Vendedor"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-32"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbEmployee"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"FullName"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"49"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Label</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"12"</span><span class="pln"> </span><span class="atn">text</span><span class="pun">=</span><span class="atv">"Cliente"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"124"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbCustomer"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"CompanyName"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"198"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Button</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">label</span><span class="pun">=</span><span class="atv">"Consultar"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"119"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"310"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"btConsultar"</span><span class="pun">/&gt;</span></code></em></pre>
</div>
<p>A propriedade horizontalCenter define qual a distância em pixel que um objeto está do centro da página, valores negativos representam objetos a esquerda do centro da tela e valores positivos representam objetos a direita, os valores definidos garantem que os objetos estarão sempre centralizados.</p>
<p>labelField é a propriedade que define qual o campo que será exibido como label do combobox. O Adobe Flex trabalha de maneira diferente do .NET quando o assunto é combobox ou dropdownlist, pois no .NET é possível definir apenas dois valores ao dropdownlist, o datatextfield e o datavalueFfeld, já no Adobe Flex só se define qual será o valor de exibição do combobox, labelField, pois cada linha de opção do combobox é um objeto com propriedades. Essas propriedades são as colunas que retornaram do banco de dados, logo você não tem acesso a somente duas colunas como dropdownlist, você tem acesso a todas as colunas que retornaram do banco de dados.</p>
<p>A propriedade Y define qual a distância que o objeto tem do topo do componente ao qual ele está pertencendo, neste caso, y=&#8221;12&#8243; diz ao Flex que o label está a 12 pixel do topo do canvas.</p>
<p>Após o canvas inclua um datagrid onde serão exibidos os pedidos resultantes da consulta ao banco de dados.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:DataGrid</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"dgPedido"</span><span class="pln"> </span><span class="atn">right</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">left</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">top</span><span class="pun">=</span><span class="atv">"55"</span><span class="pln"> </span><span class="atn">bottom</span><span class="pun">=</span><span class="atv">"10"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:columns</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Detalhes"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"85"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Data Pedido"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"OrderDate"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Data Entrega"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ShippedDate"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Entregue para"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ShipName"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Endereço"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ShipAdress"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Cidade"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ShipCity"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"País"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ShipCountry"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:columns</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:DataGrid</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Para fazer a comunicação entre a interface Flex e a aplicação server-side .NET utilize o componente RemoteObject do Adobe Flex 3.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:RemoteObject</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"roNet"</span><span class="pln"> </span><span class="atn">destination</span><span class="pun">=</span><span class="atv">"GenericDestination"</span><span class="pln">
        </span><span class="atn">source</span><span class="pun">=</span><span class="atv">"ArtigoFlex.csFlex"</span><span class="pln"> </span><span class="atn">showBusyCursor</span><span class="pun">=</span><span class="atv">"true"</span><span class="pln">
        </span><span class="atn">fault</span><span class="pun">=</span><span class="atv">"faultHandler(event)"</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln">

        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getRegion"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotRegion(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getTerritories"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotTerritories(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getEmployee"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotEmployee(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getCustomers"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotCustomers(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getOrders"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotOrders(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getOrderDetails"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotOrderDetails(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">

</span><span class="pun">&lt;/</span><span class="tag">mx:RemoteObject</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>A propriedade destination deve sempre ser &#8220;GenericDestination&#8221; para a comunicação através do weborb, a propriedade source deve ser preenchida com o nome do projeto .NET e a classe que será acessada, então neste caso será &#8220;ArtigoFlex.csFlex&#8221;.</p>
<p>A propriedade showBusyCursor seta se será exibido ou não o relógio como cursor do mouse enquanto alguma requisição ao .NET estiver sendo feita. E finalmente, fault define qual função será disparada caso algum erro ocorra durante alguma requisição do .NET.</p>
<p>Os métodos (</p>
<p>A propriedade result define qual função será disparada após o retorno da requisição ao .NET.</p>
<p>É necessário agora construir as funções, faultHandler, gotRegion, gotTerritories, gotEmployee, gotCustomers, gotOrders e gotOrderDetails. As funções são escritas na linguagem Action Script 3.0</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Script</span><span class="pun">&gt;</span><span class="pln">
        &lt;![CDATA[
                import mx.rpc.events.ResultEvent;
                import mx.controls.Alert;
                import mx.rpc.events.FaultEvent;
        ]]&gt;
</span><span class="pun">&lt;/</span><span class="tag">mx:Script</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Nesta parte do código além do bloco das tags de inicio e fim de script, também estão declaradas as importações das bibliotecas ResultEvent, Alert e FaultEvent que serão utilizadas logo mais.</p>
<p>Agora crie a função faultHandler</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> faultHandler</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">FaultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        </span><span class="typ">Alert</span><span class="pun">.</span><span class="pln">show</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">.</span><span class="pln">fault</span><span class="pun">.</span><span class="pln">faultString</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Erro"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>A função faultHandler recebe um parâmetro do tipo FaultEvent que será exibido para o usuário através do Alert.show quando algum erro ocorrer durante a requisição ao .NET.</p>
<p>Agora crie os métodos de preenchimento dos valores do combobox região.</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindRegion</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getRegion</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotRegion</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        cbRegion</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">
        cbRegion</span><span class="pun">.</span><span class="pln">selectedIndex </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
        bindTerritories</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>No código acima foram criadas duas funções, bindRegion e gotRegion. A função bindRegion chama o método getRegion do remote object roNet.</p>
<p>Após o retorno da requisição ao método roNet.getRegion, a função gotRegion é disparada recebendo um parâmetro do tipo ResultEvent que contém o retorno do método getRegion, o retorno é associado como dataProvider do combobox cbRegion, em seguida é selecionado o índice zero dos dados retornados. Após a seleção do índice, a função bindTerritories() é disparada.</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindTerritories</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getTerritories</span><span class="pun">(</span><span class="pln">cbRegion</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">RegionID</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotTerritories</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        cbTerritory</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">
        cbTerritory</span><span class="pun">.</span><span class="pln">selectedIndex </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
        bindEmployee</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Assim como a função bindRegion, bindTerritories chama um método do remote object roNet, porém agora o método chamado é o getTerritories, esse método espera como parâmetro o código da região, por isso o parâmetro informado é o cbRegion.selectedItem.RegionID. RegionID é uma propriedade que o dataProvider do cbRegion passou a ter após a atribuição do event.result. Abaixo estão as demais funções para a preparação dos comboboxs.</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindEmployee</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getEmployee</span><span class="pun">(</span><span class="pln">cbTerritory</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">TerritoryID</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotEmployee</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        cbEmployee</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">
        cbEmployee</span><span class="pun">.</span><span class="pln">selectedIndex </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
        bindCustomers</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">       

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindCustomers</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getCustomers</span><span class="pun">(</span><span class="pln">cbEmployee</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotCustomers</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        cbCustomer</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">
        cbCustomer</span><span class="pun">.</span><span class="pln">selectedIndex </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Para que quando o usuário acesse a aplicação os comboboxs já sejam preenchidos é necessário definir a propriedade creationComplete na tag mx:Application.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Application</span><span class="pln"> </span><span class="atn">xmlns:mx</span><span class="pun">=</span><span class="atv">"http://www.adobe.com/2006/mxml"</span><span class="pln"> </span><span class="atn">layout</span><span class="pun">=</span><span class="atv">"absolute"</span><span class="pln"> </span><span class="atn">creationComplete</span><span class="pun">=</span><span class="atv">"bindRegion()"</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Com essa propriedade definida, depois de criada a aplicação, a função bindRegion será disparada iniciando assim a população de todos os comboboxs, pois eles estão aninhados.</p>
<p>Também é preciso configurar os comboboxs para que depois de alterada a seleção de um dos filtros, os outros sejam alterados também, para isso será utilizada a propriedade change.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbRegion"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"RegionDescription"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">change</span><span class="pun">=</span><span class="atv">"bindTerritories()"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-274"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbTerritory"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"TerritoryDescription"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">change</span><span class="pun">=</span><span class="atv">"bindEmployee()"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-114"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbEmployee"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"FullName"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">change</span><span class="pun">=</span><span class="atv">"bindCustomers()"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"49"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Agora faça a população da datagrid,</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindOrders</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getOrders</span><span class="pun">(</span><span class="pln">cbCustomer</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">CustomerID</span><span class="pun">,</span><span class="pln">cbEmployee</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotOrders</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        dgPedido</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Para que a função bindOrders seja disparada ao clicar o botão Consultar, defina a propriedade click do botão btConsultar.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Button</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">label</span><span class="pun">=</span><span class="atv">"Consultar"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"119"</span><span class="pln"> </span><span class="atn">click</span><span class="pun">=</span><span class="atv">"bindOrders()"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"310"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"btConsultar"</span><span class="pun">/&gt;</span></code></em></pre>
</div>
<p>Para finalizar o projeto, crie a estrutura para exibir os detalhes dos pedidos. Para isso crie uma TitleWindow, em File / New / MXML Component, defina o nome de orderDetails, baseado em TitleWindow</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/26_criarnovocomponente-300x284.png" alt="" /></p>
<p>Utilize o código abaixo para a TitleWindow orderDetails.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;?</span><span class="pln">xml version</span><span class="pun">=</span><span class="str">"1.0"</span><span class="pln"> encoding</span><span class="pun">=</span><span class="str">"utf-8"</span><span class="pun">?&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:TitleWindow</span><span class="pln"> </span><span class="atn">xmlns:mx</span><span class="pun">=</span><span class="atv">"http://www.adobe.com/2006/mxml"</span><span class="pln"> </span><span class="atn">layout</span><span class="pun">=</span><span class="atv">"absolute"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"730"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"420"</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"Detalhes do Pedido"</span><span class="pln"> </span><span class="atn">showCloseButton</span><span class="pun">=</span><span class="atv">"true"</span><span class="pln"> </span><span class="atn">close</span><span class="pun">=</span><span class="atv">"{PopUpManager.removePopUp(this)}"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Script</span><span class="pun">&gt;</span><span class="pln">
        &lt;![CDATA[
                import mx.managers.PopUpManager;
                import mx.events.CloseEvent;
        ]]&gt;
</span><span class="pun">&lt;/</span><span class="tag">mx:Script</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:DataGrid</span><span class="pln"> </span><span class="atn">left</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">right</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">top</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">bottom</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"dgOrderDetails"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:columns</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Cód."</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ProductID"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Produto"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ProductName"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Preço Un."</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"UnitPrice"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Qtde"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"Quantity"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Desconto"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"Discount"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Total"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"Total"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:columns</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:DataGrid</span><span class="pun">&gt;</span><span class="pln">  
</span><span class="pun">&lt;/</span><span class="tag">mx:TitleWindow</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Crie as funções para a população da TitleWindow orderDetails dentro do script do arquivo ArtigoFlex.mxml</p>
<div class="codigo">
<pre><em><code><span class="kwd">import</span><span class="pln"> mx</span><span class="pun">.</span><span class="pln">managers</span><span class="pun">.</span><span class="typ">PopUpManager</span><span class="pun">;</span><span class="pln">

</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindOrderDetails</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getOrderDetails</span><span class="pun">(</span><span class="pln">dgPedido</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">OrderID</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotOrderDetails</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">var</span><span class="pln"> popUp</span><span class="pun">:</span><span class="pln">orderDetails </span><span class="pun">=</span><span class="pln"> orderDetails</span><span class="pun">(</span><span class="typ">PopUpManager</span><span class="pun">.</span><span class="pln">createPopUp</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">,</span><span class="pln"> orderDetails</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">));</span><span class="pln">
        </span><span class="typ">PopUpManager</span><span class="pun">.</span><span class="pln">centerPopUp</span><span class="pun">(</span><span class="pln">popUp</span><span class="pun">);</span><span class="pln">
        popUp</span><span class="pun">.</span><span class="pln">dgOrderDetails</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">                                              
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Altere a primeira coluna da datagrid dgPedido para o código abaixo para inserir o botão para exibir os detalhes do pedido.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Detalhes"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"85"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:itemRenderer</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Component</span><span class="pun">&gt;</span><span class="pln">                                          
        </span><span class="pun">&lt;</span><span class="tag">mx:HBox</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"100%"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"100%"</span><span class="pln"> </span><span class="atn">horizontalAlign</span><span class="pun">=</span><span class="atv">"center"</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">mx:Button</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"80"</span><span class="pln"> </span><span class="atn">label</span><span class="pun">=</span><span class="atv">"Detalhes"</span><span class="pln"> </span><span class="atn">click</span><span class="pun">=</span><span class="atv">"outerDocument.bindOrderDetails()"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"btDetalhes"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;/</span><span class="tag">mx:HBox</span><span class="pun">&gt;</span><span class="pln">                      
</span><span class="pun">&lt;/</span><span class="tag">mx:Component</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:itemRenderer</span><span class="pun">&gt;</span><span class="pln">                              
</span><span class="pun">&lt;/</span><span class="tag">mx:DataGridColumn</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Salve o projeto e execute, o resultado deve ser como o das figuras abaixo.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/27_datagridpreenchida-300x216.png" alt="" /></p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/28_datagridorderdetailspreenchida-300x216.png" alt="" /></p>
<p>Baixe o <a href="http://www.igormusardo.com.br/wp-content/uploads/2009/01/fonte.rar" target="_blank">código fonte completo</a>.</p>
<p>Divirta-se.</p>
<p><span class="c4">Publicado originalmente em <em><a href="http://www.igormusardo.com.br/2009/01/26/construindo-aplicacoes-ricas-de-internet-com-adobe-flex-3-e-aspnet">http://www.igormusardo.com.br</a></em></span></p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/12375/aspnet/construindo_aplicacoes_ricas_de_internet_com_adobe_flex_3_e_aspnet/" target="_blank">Imasters</a></em></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/construindo-aplicacoes-ricas-de-internet-com-adobe-flex-3-e-aspnet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Consultar bolsa de valores por PHP</title>
		<link>http://www.debugando.com/consultar-bolsa-de-valores-por-php/</link>
		<comments>http://www.debugando.com/consultar-bolsa-de-valores-por-php/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 01:11:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=523</guid>
		<description><![CDATA[No exemplo desse artigo vamos usar um ativo da Petrobrás (PETR4, essa é a sigla) e para lermos o XML vamos usar simple_xml.
Então o que precisamos saber para consultar os índices de um ativo na bolsa?

A URL  &#8211; http://www.theoziran.org/webservice/bovespa/


A sigla de um ativo &#8211; PETR4

Veja abaixo um código exemplo:

&#60;?php

      [...]]]></description>
			<content:encoded><![CDATA[<p>No exemplo desse artigo vamos usar um ativo da Petrobrás (PETR4, essa é a sigla) e para lermos o XML vamos usar simple_xml.</p>
<p>Então o que precisamos saber para consultar os índices de um ativo na bolsa?</p>
<ul>
<li>A URL  &#8211; <a class="ext" href="http://www.theoziran.org/webservice/bovespa/">http://www.theoziran.org/webservice/bovespa/</a></li>
</ul>
<ul>
<li>A sigla de um ativo &#8211; PETR4</li>
</ul>
<p>Veja abaixo um código exemplo:</p>
<div class="codigo">
<pre><em><code>&lt;?php

            $url_base = "http://www.theoziran.org/webservice/bovespa/";

            $indice = "petr4";

            $url_xml = $url_base.$indice;

            $xml_string = file_get_contents($url_xml);

            $simple_xml = simplexml_load_string($xml_string);

            //O ativo consultado

            $simple_xml-&gt;ativo;

            //A cotação do dia

            $simple_xml-&gt;dia;

            //A cotação da semana

            $simple_xml-&gt;semana;

            //A cotação dos últimos sete dias

            $simple_xml-&gt;setedias;

            //A cotação do mês

            $simple_xml-&gt;mes;

            //A cotação dos últimos trinta dias

            $simple_xml-&gt;trintadias;

            //A cotação do ano

            $simple_xml-&gt;ano;

            //A contação dos últimos 365 dias

            $simple_xml-&gt;ano-relativo;

            //Data em que os dados foram capturados

            $simple_xml-&gt;data;

?&gt;</code></em></pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/consultar-bolsa-de-valores-por-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

