Passando dados usando eventos

Flex / Flex Builder No Comments »

O exemplo seguinte modifica o exemplo da seção anterior para usar event listener definidos no aplicativo principal para lidar com o transcurso de dados retornados do pop-up para o aplicativo principal. Este exemplo mostra ao arquivo ArrayEntryForm.MXML sem event listener definidos dentro dele.

<?xml version=”1.0″?><mx:TitleWindow xmlns:mx=”http://www.adobe.com/2006/mxml”        showCloseButton=”true” width=”200″ borderAlpha=”1″>

    <mx:Script>        <![CDATA[            import mx.managers.PopUpManager;

            // As variáveis cujos valores são fixados pelo aplicativo principal.            // Array Data Provider para o componente ComboBox.            [Bindable]            public var myArray:Array;

        ]]>    </mx:Script>

    <mx:ComboBox id=”cb1″ dataProvider=”{myArray}”/>    <mx:HBox>        <mx:Button id=”okButton” label=”OK”/>        <mx:Button id=”cancelButton” label=”Cancel”/>    </mx:HBox></mx:TitleWindow> 

O aplicativo principal define os event listeners e registra-so com os controles definidos dentro do pop-up:

<?xml version=”1.0″?><mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”>

    <mx:Script>        <![CDATA[            import mx.managers.PopUpManager;            import flash.events.Event;

            public var pop1:ArrayEntryForm;

            public function displayForm():void {                // Array com os dados para o controle ComboBox.                var doctypes:Array = [”*.as”, “*.mxml”, “*.swc”]

                // Create the pop-up and cast the return value of the createPopUp()                // Method to the ArrayEntryForm custom component.                pop1 = ArrayEntryForm(                    PopUpManager.createPopUp(this, ArrayEntryForm, true));                // Set TitleWindow properties.                pop1.title=”Select File Type”;                pop1.showCloseButton=true;

                // Set the event listeners for the ArrayEntryForm component.                pop1.addEventListener(”close”, removeMe);                pop1[”cancelButton”].addEventListener(”click”, removeMe);                    pop1[”okButton”].addEventListener(”click”, submitData);    

                // Set properties of the ArrayEntryForm custom control.                pop1.myArray = doctypes;                PopUpManager.centerPopUp(pop1);            }

            // OK button click event listener.            // Sets the target component in the application to the            // selected ComboBox item value.            private function submitData(event:Event):void {                ti1.text = String(pop1.cb1.selectedItem);                removeMe();            }

            // Cancel button click event listener.            private function removeMe():void {                PopUpManager.removePopUp(pop1);            }                    ]]>    </mx:Script>

    <mx:VBox>        <mx:TextInput id=”ti1″ text=”"/>    </mx:VBox>    <mx:Button id=”b1″ label=”Select File Type” click=”displayForm();”/></mx:Application>

Passando dados para e de uma janela Pop-up

Flex / Flex Builder No Comments »

Para fazer seu pop-up mais flexível, você poderia querer passar dados para ele ou retornar dados dele. Para fazer isto, use as diretrizes seguintes:

  • Crie um componente personalizado para ser seu pop-up. Na maioria das circunstâncias, este componente é um recipiente TitleWindow..
  • Declare variáveis em seu pop-up que você fixará no aplicativo que cria o pop-up.
  • Lance o pop-up para estar no mesmo tipo que seu componente personalizado..
  • Passe uma referência daquele componente para o pop-up, se o pop-up é para fixar um valor no aplicativo ou um dos componentes do aplicativo..

Por exemplo, o aplicativo seguinte povoa um ComboBox no pop-up com um Array definido no aplicativo principal.

Quando criado o pop-up, o aplicativo lança o pop-up para ser de tipo ArrayEntryForm, que é o nome do componente personalizado que define o pop-up. Se você não fizer isto, o aplicativo não pode acessar as propriedades que você cria.

O aplicativo passa uma referência para o componente TextInput no recipiente do Aplicativo para o pop-up de forma que o pop-up pode escrever seus resultados atrás para o recipiente. O aplicativo também passa pela Array de extensões de arquivo para o pop-up ComboBox data provider, e fixa o título do pop-up. Deixando estes no aplicativo, você pode reusar o pop-up em outras partes do aplicativo sem modificação, porque ele não tem que saber o nome do componente que está escrevendo de volta para ou os dados que está exibindo, só que seus dados está em um Array e está escrevendo para uma TextArea.

<?xml version=”1.0″?><mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”>

    <mx:Script>        <![CDATA[            import mx.managers.PopUpManager;            public var helpWindow:Object;

            public function displayForm():void {                // Array com dados para o controle ComboBox.                var doctypes:Array = [”*.as”, “*.mxml”, “*.swc”]

                // Crie o pop-up e lança o valor de retorno do método createPopUp()                // para o componente personalizado ArrayEntryForm.                var pop1:ArrayEntryForm = ArrayEntryForm(                    PopUpManager.createPopUp(this, ArrayEntryForm, true));                // Fixa as propriedades do TitleWindow.                pop1.title=”Select File Type”;                pop1.showCloseButton=true;

                // Fixa as propriedades do componente ArrayEntryForm.                pop1.targetComponent = ti1;                pop1.myArray = doctypes;                PopUpManager.centerPopUp(pop1);            }

        ]]>    </mx:Script>

    <mx:VBox>        <mx:TextInput id=”ti1″ text=”"/>    </mx:VBox>    <mx:Button id=”b1″ label=”Select File Type” click=”displayForm();”/></mx:Application>

O componente personalizado seguinte, ArrayEntryForm.mxml, declara duas variáveis. A primeira é para o Array que o aplicativo pai passa para o pop-up. A segunda alça faz uma referência para o aplicativo pai é controle TextInput. O componente usa aquela referência para atualizar o aplicativo pai:

<?xml version=”1.0″?><mx:TitleWindow xmlns:mx=”http://www.adobe.com/2006/mxml”        showCloseButton=”true” width=”200″ close=”removeMe();” borderAlpha=”1″>

    <mx:Script>        <![CDATA[            import mx.controls.TextInput;            import mx.managers.PopUpManager;

            // As variáveis cujos valores são fixados pelo aplicativo principal.            // Array Data Provider para o componente ComboBox.            [Bindable]            public var myArray:Array;            // Uma referência para o controle TextInput em que coloca o resultado.            public var targetComponent:TextInput;

            // OK button click event listener.            // Fixe o target do componente no aplicativo para o     //valor de item do ComboBox selecionado.            private function submitData():void {                targetComponent.text = String(cb1.selectedItem);                removeMe();            }

            // Cancel button click event listener.            private function removeMe():void {                PopUpManager.removePopUp(this);            }        ]]>    </mx:Script>

    <mx:ComboBox id=”cb1″ dataProvider=”{myArray}”/>    <mx:HBox>        <mx:Button label=”OK” click=”submitData();”/>        <mx:Button label=”Cancel” click=”removeMe();”/>    </mx:HBox>

</mx:TitleWindow> 

Dentro do componente pop-up, você também pode acessar propriedades do aplicativo pai usando a propriedade parentApplication. Por exemplo, se o aplicativo tem um controle Botão chamado b1, você pode conseguir a tag daquele controle de Botão, como o exemplo seguinte mostra:

myLabel = parentApplication.b1.label;

Esta técnica, porém, usa um valor hard-coded no pop-up para ambos os componentes iD no pai e a propriedade no componente

Credenciais de transcurso de componentes client-side

Flex / Flex Builder No Comments »

Para enviar credenciais de usuário para um destino que usa uma restrição de segurança, você especifica usuário e senha como os parâmetros do setCredentials() método do RemoteObject, HTTPService, WebService, DataService, Publisher, ou Consumer component que vocês está usando em seu aplicativo. Você pode remover credenciais chamando o método do componente logout().

NOTA: Chamando o método setCredentials() ou setRemoteCredentials() não tem nenhum efeito quando uma propriedade componente de serviço for useProxy está fixada para falso.

O exemplo seguinte mostra o código ActionScript para enviar usuário e senha de um componente de HTTPService até um destino:

import mx.rpc.http.HTTPService;

var employeeHTTP:HTTPService = new HTTPService();employeeHTTP.destination = “SecureDest”;employeeHTTP.setCredentials(”myUserName”, “myPassword”);empoyeeHTTP.send({param1: ‘foo’});

Você pode usar o método setRemoteCredentials() para passar credenciais para um serviço de HTTP ou serviço da web remota que exige-os. Por exemplo, quando usando um componente de HTTPService, você pode passar credenciais para uma págna JSP segura. As credenciais são enviadas para o destino em cabeçalhos de mensagem.

Você também pode chamar o método setRemoteCredentials() para destinos de Serviço de Remoting que são administrados por um serviço externo que exige autenticação de senha e usuário, como componente de ColdFusion (CFC).

As credenciais de transcurso remoto é distinta de passar por credenciais de usuário e senha para satisfazer uma restrição de segurança definida no arquivo de configuração de serviços de Flex. Porém, os dois tipos de credenciais podem ser usados em combinação.

O exemplo seguinte mostra o código ActionScript para enviar remotamente usuário e senha para um destino. A configuração de destino passa por estas credenciais para o JSP atual que exige-os.

var employeeHTTP:mx.rpc.http.HTTPService = new HTTPService();employeeHTTP.destination = “secureJSP”;employeeHTTP.setRemoteCredentials(”myRemoteUserName”, “myRemotePassword”);employeeHTTP.send({param1: ‘foo’});

Como uma alternativa para fixar credenciais remotas em um cliente em tempo de execução, você pode fixar credenciais remotas em elementos remote-username e remote-password nas seção <propriedades> de um server-side. O exemplo seguinte mostra a um destino que especifica estas propriedades:

    <destination id="samplesProxy">        <channels>            <channel ref=”samples-amf”/>        </channels>

        <properties>            <url>                http://someserver/SecureService.jsp            </url>            <remote-username>johndoe</remote-username>            <remote-password>opensaysme</remote-password>        </properties>    </destination>…

Usando rendereres de item customizado e editores de item

Flex / Flex Builder No Comments »

Para controlar a exibição de um componente de lista, você escreve um renderer de item ou editor de item personalizado. Seus rendereres de item e editores de item personalizados ainda usam a funcionalidade subjacente do controle de lista, mas permite você controlar a exibição e edição dos dados. Os rendereres de item e editores de artigo personalizados fornecem a você com várias vantagens:

  • Você pode criar uma interface de usuário mais compelativa substituindo a exibição de texto com uma aparência mais intuitivo. .
  • Você pode combinar elementos múltiplos em um item de lista única, como label e uma imagem.
  • Você pode programaticamente controlar a exibição dos dados.

O controle de Lista seguinte é uma modificação do controle de Lista na retribuição de item padrão de seção e edição de célula. Neste exemplo, você usa um renderer de item personalizado para exibir o nome do estado, capital, e um URL para o site da web oficial do estado em cada artigo de lista:

Custom item renderer

<?xml version=”1.0″?>

<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” xmlns:local=”*” height=”700″ width=”700″>

<mx:List id=”myList” itemRenderer=”RendererState”
rowHeight=”75″ height=”200″ width=”250″>
<mx:dataProvider>
<mx:Object label=”Alaska” data=”Juneau”
webPage=”http://www.state.ak.us/”/>
<mx:Object label=”Alabama” data=”Montgomery”
webPage=”http://www.alabama.gov/”/>
<mx:Object label=”Arkansas” data=”Little Rock”
webPage=”http://www.state.ar.us/”/>
</mx:dataProvider>
</mx:List>
</mx:Application>

——————————————————–

<?xml version=”1.0″?>    <mx:VBox xmlns:mx=”http://www.adobe.com/2006/mxml”>          <mx:Script>            <![CDATA[                // Import Event and URLRequest classes.                import flash.events.Event;                import flash.net.URLRequest;

                public var u:URLRequest;

                // Event listener to open URL using the navigateToURL() method.                private function handleClick(eventObj:Event):void {                    u = new URLRequest(data.webPage);                    navigateToURL(u);                }              ]]>        </mx:Script>

        <mx:HBox>              <!– Use Label controls to display state and capital names. –>            <mx:Label id=”State” text=”State: {data.label}”/>            <mx:Label id=”Statecapital” text=”Capital: {data.data}”/>        </mx:HBox>

        <!– Define the LinkButton control to open a URL. –>        <mx:LinkButton id=”webPage” label=”Official {data.label} Web page”            click=”handleClick(event);” color=”blue”/>    </mx:VBox>

Na próxima imagem, você usa um renderer de item padrão para a primeira e terceiras colunas do DataGrid. Você usa um renderer de item personalizado para a segunda coluna para exibir o álbum junto com o título do álbum no DataGrid.

Default and custom item renderers in DataGrid control

<?xml version=”1.0″?><mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” xmlns:local=”*”>

    <mx:Script>        <![CDATA[            // Data includes URL to album cover.            [Bindable]            public var initDG:Array = [                {Artist:’Pavement’, Album:’Slanted and Enchanted’,                    Price:11.99, Cover: ‘http://myComp.com/albums/brighten.jpg’},                {Artist:’Pavement’, Album:’Brighten the Corners’,                    Price:11.99, Cover: ‘http://myComp.com/albums/brighten.jpg’}            ];        ]]>    </mx:Script>

    <mx:DataGrid id=”myGrid” dataProvider=”{initDG}”            variableRowHeight=”true”>          <mx:columns>                <mx:DataGridColumn dataField=”Artist”/>                <mx:DataGridColumn dataField=”Album”>                    <mx:itemRenderer>                        <mx:Component>                            <mx:VBox>                                <mx:Text id=”albumName” selectable=”false” width=”100%”                                    text=”{data.Album}”/>                                <mx:Image id=”albumImage” height=”45″                                    source=”{data.Cover}”/>                            </mx:VBox>                        </mx:Component>                    </mx:itemRenderer>                </mx:DataGridColumn>                  <mx:DataGridColumn dataField=”Price”/>        </mx:columns>          </mx:DataGrid>       </mx:Application>

————————————————————

<mx:DataGridColumn dataField=”Cover”>

<mx:itemRenderer>
<mx:Component>
<mx:VBox horizontalAlign=”center”>
<mx:Image height=”45″ source=”{data.Cover}”/>
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>

Da mesma maneira que você pode definir um renderer de item personalizado para controlar a exibição de uma célula, você pode usar um editor de item personalizado para editar o conteúdo da célula. Por exemplo, se o renderer de item personalizado exibe uma imagem, você podia definir um editor de item personalizado que usa um ComboBox que permite ao usuários selecionarem uma imagem de uma lista de imagens disponíveis. Ou, você podia usar um CheckBox para permitir o usuário fixar um valor verdadeiro ou falso para uma célula, como o exemplo seguinte mostra:

DataGrid control with custom item editor

Usando um renderer de item não implica que o controle também tem um editor de item. Freqüentemente, você não permite seus controles serem editados; Isto é, eles são para somente exibem.

Você também pode usar um editor de item sem um renderer de item correspondente. Por exemplo, você podia exibir informações como um masculino/feminino ou true/false como texto usando o renderer de item padrão. Mas, você podia então usar um editor de item personalizado com um ComboBox que fornece o usuário só um conjunto limitado de opções para entrar na célula quando modificando o valor

Resumo das características de aplicação Flex

Flex / Flex Builder No Comments »

A tabela seguinte descreve as características que você está mais provável a usar quando construir Aplicações Flex:

Controles de Interface de usuário

Os controles são componentes de interface dos usuários, como Botão, TextArea, e ComboBox. Você usa tags de MXML para adicionar controles para uma aplicação.

User-interface containers

Os recipientes são componentes de interface dos usuários que permitem que você controle as características de layout dos componentes que eles contêm. Você pode usar recipientes para controlar tamanho e posicionamento, ou controlar navegação no meio de recipientes filhos múltiplos. Você usa tags de MXML para adicionar recipientes para uma aplicação.

MXML componentes

MXML components are Flex components written in MXML files. They provide an easy way to extend an existing Flex component and encapsulate the appearance and behavior of a component in a custom MXML tag. You use MXML tags to add MXML components to an application.

ActionScript componentes

Os componentes de ActionScript são componentes Flex escritos em classes ActionScript. Eles são uma boa escolha para componentes não visuais. Você pode usar tags de MXML para adicionar componentes de ActionScript para um aplicativo.

Data binding

A característica de data binding fornece uma sintaxe simples para automaticamente copiar o valor de uma propriedade de um objeto client-side para uma propriedade de outro objeto em runtime.

Data services

Os objetos de serviço de dados permitem a você interagir com data source server-side. Você pode trabalhar com fontes de dados que são acessíveis usando serviços da web de SOAP complacente, Objetos java, ou HTTP GET ou pedidos POST, e RemoteObjects acessado usando o protocolo de AMF se você tiver os Serviços de Dados de Flex.

Data validation


Data validators ajuda você assegurar que os valores nos campos de um modelo de dados encontram certos critérios. Por exemplo, você pode usar um validator para verificar se um usuário entrou em um valor de cep válido em um TextInput.

Data formatting

Os Data formatters permite você formatar dados em strings antes de exibi-las na interface de usuário. Por exemplo, você pode usar um formatter para exibir um número de telefone em um formato específicoPa

History management

O History management permite aos usuários navegarem por um aplicativo Flex usando o botão voltar e próximo do browser. Também deixa os usuários retornarem ao local prévio em um aplicativo se o Browser acidentalmente navegar longe daquele local.

Drag-and-drop management

Drag-and-drop (Arrastar e Soltar) permite a você mover dados de um lugar em um aplicativo de Flex para outro. Esta característica é especialmente útil em um aplicativo visual onde seus dados podem ser artigos em uma lista, imagens, ou componentes Flex.

Styles, fonts, and themes

Estilos, Fontes, e temas permitem que você define a aparência global de aplicativos. Você pode usa-los para mudar o aparecimento de um componente único, ou aplicá-los através de todos os componentes.

Behaviors

Os comportamentos permitem você adicionar animação ou som para aplicativos em resposta para usuário ou ação programática.

Repeaters


Os repetidores permitem que você dinamicamente repete qualquer número de controles ou recipientes especificados em tags de MXML, em runtime.

Image and media importing

Você pode usar tags de MXML para importar várias imagens em aplicativos. O Flex suporta vários formatos, inclusive JPEG, PNG, GIF, e imagens de SVG e arquivos SWF. Além disso, você pode usar o controle VideoDisplay para incorporar streaming em aplicativos Flex. Flex suporta o Arquivo de Vídeo do Flash (FLV) formato de arquivo com este controle.

View states

Os estados de visão(view states) permitem a você estruturar seu aplicativo para apresentar uma aparência variada definindo um estado de visão de aplicativo básico, e conjuntos de mudanças que modifica o estado de visão básica. Cada estado de visão pode adicionar ou remover filhos, fixe ou mude estilos e propriedades, ou define eventos de estados específicos. Você também pode definir transições entre estados de visão, que controlem a aparência da mudança de um estado de visão até outro.

ActionScript scripting

ActionScript permite apresentar ações com os componentes que são representados por tags de MXML. Você usa ActionScript em seus aplicativos Flex para fazer o seguinte:

  • Lidar com eventos
  • Definir funções e métodos personalizados
  • Chamar funções ActionScript
  • Trabalhar com componentes depois que eles são instanciados

Debugging

O flex inclui suporte para depuração e mensagens de advertência, um mecanismo de error-reporting, e um comand-line ActionScript debugger para ajudar você em depurar seu aplicativo.

Integrando Flex com PHP

Flex / Flex Builder No Comments »

Nota: Essa matéria é seguência da matéria “Conectando a dados

Pra iniciar nosso exemplo vamos criar a tabela, conforme script abaixo:

CREATE TABLE users(
userid INT NOT NULL ,
username VARCHAR( 255 ) NOT NULL ,
emailaddress VARCHAR( 255 ) NOT NULL
)

Próximo, você criará o script PHP que adiciona usuários e exporta o XML que a aplicação Flex usará. O script é relativamente simples e consiste em 25 linhas de código. Note o uso da função quote_smart como uma melhor prática para ajudar o usuário a verificar o input, de acordo com o site da web PHP.NET.

<?php
define( “DATABASE_SERVER”, “localhost” );
define( “DATABASE_USERNAME”, “root” );
define( “DATABASE_PASSWORD”, “” );
define( “DATABASE_NAME”, “sample” );

//Conecta ao database
$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
mysql_select_db( DATABASE_NAME );

function quote_smart($value)
{
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// se não for integer
if (!is_numeric($value)) {
$value = “‘” . mysql_real_escape_string($value) . “‘”;
}
return $value;
}

if( $_POST[”emailaddress”] AND $_POST[”username”])
{
//Adiciona o usuário
$Query = sprintf(”INSERT INTO users VALUES (”, %s, %s)”, quote_smart($_POST[’username’]), quote_smart($_POST[’emailaddress’]));

$Result = mysql_query( $Query );
}

//Retorna uma lista de todos os usuários
$Query = “SELECT * from users”;
$Result = mysql_query( $Query );

$Return = “<users>”;

while ( $User = mysql_fetch_object( $Result ) )

{
$Return .= “<user><userid>”
$Return .= $User->userid.”</userid><username>”;
$Return .= $User->username.”</username><emailaddress>”;
$Return .= $User->emailaddress.”</emailaddress></user>”;

}

$Return .= “</users>”;
mysql_free_result( $Result );
print ($Return)
?>

Aqui é uma explicação rápida do código PHP. A variável $_POST é povoada com valores da aplicação Flex com dois campos exigidos: Emailaddress e username. Se um usuário entra com informações para ambos, o PHP adiciona o usuário ao banco de dados. Depois disto, o PHP retorna uma lista de usuários no formato XML

Nota: Você não pode passar variáveis de PHP para as aplicações Flex diretamente. Você deve codificá-las em XML primeiro. Por obstração a interface de usuário da recuperação de dados, você pode facilmente mudar como você exibe dados. Por exemplo, você pode usar este mesmo script de PHP para passar dados para uma versão de telefone celular da mesma aplicação. Tudo que você precisaria para isto é escrever a aplicação front-end, a parte back-end que é o script PHP permaneceria o mesmo.

Até agora, tudo deve ser familiar para você. Você tem um script PHP e um banco de dados de MySQL. Agora é hora de começar a construir a interface para a aplicação.

Aplicações Flex usa uma combinação de ActionScript 3.0 e MXML. ActionScript é baseado em ECMAScript (semelhante a JavaScript), então deve ser familiar para desenvolvedores da web. MXML é uma engine de layout baseado em XML para Aplicações Flex. Essencialmente, você atinge a interface de usuário usando XML, e escreve a interface de usuário usando ActionScript. O MXML para a interface é, novamente, muito simples (só 26 linhas):

<?xml version=”1.0″ encoding=”utf-8″?>

<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” xmlns=”*” layout=”absolute” creationComplete=”userRequest.send()”>

<mx:HTTPService id=”userRequest” url=”http://localhost/flex/php/request.php” useProxy=”false” method=”POST”>

<mx:request xmlns=”">

<username>{username.text}</username><emailaddress>{emailaddress.text}</emailaddress>

</mx:request>
</mx:HTTPService>
<mx:Form x=”22″ y=”10″ width=”493″>
<mx:HBox>
<mx:Label text=”Username”/>
<mx:TextInput id=”username”/>
</mx:HBox>
<mx:HBox>
<mx:Label text=”Email Address”/>
<mx:TextInput id=”emailaddress”/>
</mx:HBox>
<mx:Button label=”Submit” click=”userRequest.send()”/>
</mx:Form>
<mx:DataGrid id=”dgUserRequest” x=”22″ y=”128″ dataProvider=”{userRequest.lastResult.users.user}”>
<mx:columns>
<mx:DataGridColumn headerText=”User ID” dataField=”userid”/>
<mx:DataGridColumn headerText=”User Name” dataField=”username”/>
</mx:columns>
</mx:DataGrid>
<mx:TextInput x=”22″ y=”292″ id=”selectedemailaddress” text=”{dgUserRequest.selectedItem.emailaddress}”/>

</mx:Application>

Vamos examinar cada linha em detalhe. Estas são as primeiras duas linhas de cada aplicação Flex:

<?xml version=”1.0″ encoding=”utf-8″?>

<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” xmlns=”*” layout=”absolute” reationComplete=”userRequest.send()”>

A primeira linha declara que isto é um documento XML. A segunda linha declara que isto é uma Aplicação, fornece o namespace para componentes de MX, declara o layout para ser absoluto (que significa que você pode posicionar itens na coordenadas exatas x e y. Outras opções são layouts horizontais ou layouts verticais), e finalmente creationComplete=”userRequest.send()” especifica aquela em conclusão de carregar a interface de usuário, a aplicação chama a função send() no elemento de MXML com o iD userRequest.

A seção seguinte fixa o HTTPService para enviar e receber dados do script de PHP criado por você:

<mx:HTTPService id=”userRequest” url=”http://localhost/flex/php/request.php” useProxy=”false” method=”POST”>

<mx:request xmlns=”">

<username>{username.text}</username><emailaddress>{emailaddress.text}</emailaddress>

</mx:request>

</mx:HTTPService>

Nesta seção, você fixa o iD para userRequest, e forneçe um URL para o script PHP. Você fixa o método submit para POST (Você também pode usar GET, entretanto você deve mudar as variáveis no script PHP). O pedido propriamente contém duas variáveis, username e emailaddress. Este código também fixa o valor para username para o atributo de texto do elemento com iD username (username.text) e o valor para a variável PHP _POST[”emailaddress”] é fixado para o atributo de texto do elemento com iD emailaddress (emailaddress.text). Os { and } parênteses ligam as variáveis para o valor dos elementos de interface de usuário.

Para ser claro, se você mudasse <username> para <user_name>, você teria que mudar a variável de PHP para _POST[”user_name”]. Se você mudar {username.text} para {user_name.text}, você teria que modificar seu MXML: Você teria que mudar o elemento com o ID de username para user_name.

Próximo, você construirá uma formulário simples:

<mx:Form x=”22″ y=”10″ width=”493″>
<mx:HBox>
<mx:Label text=”Username”/>
<mx:TextInput id=”username”/>
</mx:HBox>
<mx:HBox>
<mx:Label text=”Email Address”/>
<mx:TextInput id=”emailaddress”/>
</mx:HBox>
<mx:Button label=”Submit” click=”userRequest.send()”/>
</mx:Form>

Note que você pode atingir a coordenada exata x e y do formulário e deixar sua largura exata. Então, dois HBoxes cerca uma tag label e text input, permitindo-os fluir da esquerda para a direita, um acima do outro. Finalmente, seu botão Submit aparece no fim do formulário. Quando um usuário clicar no botão, a aplicação chama a função send() do elemento com ID userRequest (neste caso, é o elemento de HTTPService).

Agora que você criou a funcionalidade que submete novas entradas para o banco de dados, como você faz para exibí-los? Use o código seguinte:

<mx:DataGrid id=”dgUserRequest” x=”22″ y=”128″ dataProvider=”{userRequest.result.users.user}”>
<mx:columns>
<mx:DataGridColumn headerText=”User ID” dataField=”userid”/>
<mx:DataGridColumn headerText=”User Name” dataField=”username”/>
</mx:columns>
</mx:DataGrid>
<mx:TextInput x=”22″ y=”292″ id=”selectedemailaddress” text=”{dgUserRequest.selectedItem.emailaddress}”/>
</mx:Application>

Neste caso, você tem um componente DataGrid que será povoado com o XML do userRequest HTTPService. Você retorna para um documento XML. Neste caso, você liga o componente DataGrid para os elementos de usuário no documento XML que é retornado. O retorno XML olha algo como o seguinte:

<users>
<user>
<userid>1</userid>
<username>Joe Schmoe</username>
<emailaddress>joe@schmoe.com</emailaddress>
</user>
<user>
<userid>2</userid>
<username>Betty Schmoe</username>
<emailaddress>betty@schmoe.com</emailaddress>
</user>
</users>

Note que você liga aos elementos reais que são retornados, não o elemento que está ao redor deles.

O componente DataGrid exibe o usuário iD e nomes de usuário das pessoas no banco de dados. Eu decidi não mostrar o endereço de e-mail no datagrid, mas você pode adicionar outra coluna com aquelas informações. Note que o elemento columnName precisa mapear diretamente os elementos do XML. O elemento de DataGrid cuidará de permitir a seus usuários para classificar e destacar as filas como elas são selecionados—você não precisa fazer nada!

Finalmente, você tem um elemento de TextInput que mostra ao endereço de e-mail do usuário selecionado, dgUserRequest.selectedItem.emailaddress, e então uma tag de XML que fecha a aplicação.

Isto tudo. Você tem uma aplicação de Flex simples que submete e recupera dados de um banco de dados de MySQL, usando PHP como um back-end.

Conectando a dados

Flex / Flex Builder No Comments »

A coisa mais importante para lembrar sobre trabalhar com dados em Aplicações Flex é isto: aplicações Flex não conectam diretamente a um banco de dados. E, então, Adobe® Flex builder 2 não fornece nenhuma ferramenta para conectar diretamente a dados. Você interage com dados usando MXML e ActionScript.

Em Flex, existem muitos caminhos para interagir com dados, a maior parte está além do âmbito desta breve introdução (para mais informações, vejam os links abaixo). Porém, ilustrar uma maneira que você poderia conectar a dados externos, os exemplos seguintes demonstram como conectar a dados usando XML-formatted.

Gerando os dados

Desde que aplicações Flex não conectam diretamente a um banco de dados, você precisa interage com dados usando algum tipo de serviço. Nos exemplos seguintes, O componente Flex HTTPService é usado para recuperar dados de um arquivo XML que é gerado por PHP.

O primeiro passo em conectar aos dados é gerar os dados que serão usados na aplicação Flex. No lado do PHP, você seguirá estes passos:

• Crie um banco de dados (MySQL por exemplo) se já não existir.
• Escreva um script PHP para que ambos conecte ao banco de dados de MySQL e gere o dados XML.

Para informações detalhadas e código exemplo explicando como fazer isso usando PHP, veja o post integrando Flex com PHP

Estes passos também se aplicam a quaisquer outras ferramentas que você poderia costumizar para gerar os dados (ASP.NET, JSP, e assim por diante).

Link para a fonte de dados externos

Com os dados XML fornecidos pela aplicação de PHP, você usa o componente de HTTPService parasolicitar e recuperar os dados, como mostra este exemplo:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">    <mx:HTTPService     id=”productsRequest”     url=”http://www.somesite.com/products.php” />

O componente HTTPService define um pedido ID, que você usará para ligar os dados para o controle data-drivem, e o URL da aplicação ou serviço que está fornecendo os dados.

Ligando os dados externos para um controle data-driven

Você lida com o resultado de HTTPService (os dados de XML) por que liga aqueles dados para um controle data-driven, como mostra este exemplo:

<mx:DataGrid x=”20″ y=”80″ id=”productGrid” width=”400″dataProvider=”{productRequest.lastResult.products.items}” > 
    <mx:columns>        <mx:DataGridColumn headerText=”Name” dataField=”name” />        <mx:DataGridColumn headerText=”Price” dataField=”price” />    </mx:columns></mx:DataGrid>

A sintaxe do data binding mostrados na propriedade dataProvider do controle de dados é uma combinação do HTTPService request ID, o método lastResult, e então a estrutura de dados do XML. Neste exemplo, a estrutura de dados da fonte de dados de XML parece com isto:

<XML>
<products>
<item>
<name>Mobile Phone</name>
<price>$199</price>
</item>
<item>
<name>Car Charger</name>
<price>$34</price>
</item>

itens de Dados (name e price) está definido nas colunas no dataGrid usando a propriedade dataField (como mostrado acima).

Carregando os dados em tempo de execução

Para carregar os dados em tempo de execução, você envia um pedido para o URL especificado no HTTPService quando aaplicação Flex iniciar, como este exemplo mostra:
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute”creationComplete=”productsRequest.send()” >

Quando você adicionar o método creationComplete à tag de aplicação, os dados é carregado em tempo de execução e povoa o controle data-driven (neste exemplo, o dataGrid).

Você pode também adicionar o HTTPService request para um evento em um controle,em lugar da tag application. Por exemplo: 
<mx:Button x=”50″ y=”8″ label=”Get Data” click=”productsRequest.send();” />

O Flex forneça a você muitos caminhos para conectar a, administrar, formatar, e validar dados. Você pode interagir com dados usando remote procedure calls, data services, e outras tecnologias de nível enterprise.