Mittwoch, 23. Mai 2012


Artikel

November 2008 | Artikel

Einsatz und Integration von Adobe Flex in PHP-Projekte Fortsetzung, Teil 4

Teil 1   Teil 2   Teil 3   Teil 4   Teil 5   

Events

Events sind ein zentraler Bestandteil des Flex-Frameworks und lassen es den Entwickler und alle beteiligten Komponenten wissen, wenn Ereignisse in der Anwendung stattfinden. Eine Unterscheidung von Events findet hier auf zwei Ebenen statt. Zum einen sind dies so genannte System-Events wie creationComplete oder show und zum anderen sind dies User Events wie click oder mouseOver. Die Reaktion auf diese Events kann an unterschiedlichen Stellen beschrieben werden. Zum einen "inline" an der Komponente, die das Event erzeugt, oder über einen <mx:Script/>-Block, der unsere Businesslogik in AS3 enthält. Eine Auslagerung von AS3 in externe Dateien ist natürlich jederzeit möglich.

Das Beispiel in Listing 2 zeigt die Steuerung der text-Eigenschaft einer Label-Komponente über das em>click-Event des Buttons mit dem Instanznamen myButton. Diese zwei Zeilen zeigen aber ebenso auch ein sehr zentrales Thema von Flex: das DataBinding. In der Label-Komponente mit dem Instanznamen myLabel ist dies zu finden. DataBinding ist das Verknüpfen von Variablen und Methoden, ohne sich Gedanken über das Update oder den Fluss der Informationen zu machen. Im Beispiel aus Listing 2 werden automatisch nach dem Start der Anwendung die text-Eigenschaft der Label-Komponente aus der Summe des Strings "Click" und die aktuell in der Button-Komponente befindliche text-Eigenschaft beschrieben.

Events sind aber natürlich viel mächtiger, als es dieses kleine Beispiel hier zeigen kann. So erzeugt jedes Event ein Event-Objekt. Hierbei ist jedes Event-Objekt eine Instanz der ActionScript-Klasse flash.events.Event. Innerhalb dieses Event-Objekts existiert eine Anzahl von "named properties". Die Eigenschaften type und target sind immer enthalten. Über die Eigenschaft target erhält man z.B. eine direkte Referenz zur Komponente, die dieses Event erzeugt hat.

Das Listing 3 zeigt sehr einfach Übergabe und Zugriff auf das Event-Objekt. Wenden wir uns zurück zu Abbildung 2, so werden Sie ziemlich schnell an den Punkt kommen, an dem Sie eigene Events erstellen wollen und diese mit zusätzlichen, für Sie wichtigen Daten oder Informationen füllen müssen. Dies wird über so genannte Custom-Events gelöst und entspricht dem Vorgang, den Sie auch bei der Erstellung von eigenen Komponenten durchführen. Hierbei wird die Event-Basisklasse erweitert und mit zusätzlichen Variablen/Eigenschaften versehen. Ein Beispiel für ein Custom-Event zeigt Listing 4.

Mit diesem Beispiel wird auch der Einsatz von ActionScript-Klassen als zentraler dritter Bereich in der Anwendungsentwicklung, wie unter Abbildung 2 aufgezeigt, deutlich.

RPC-Services

RPC Services dienen zur Integration von Daten in eine Flex-Anwendung. Anstatt Daten "hardcoded" in ein SWF zu kompilieren, ist es sinnvoller, diese Daten über verfügbare Services bereitzustellen. Die Vorteile liegen auf der Hand. Zum einen können große Datenmengen zur Laufzeit nachgeladen werden (Master-Detail Prinzip), aber ebenso können Daten, die in Backend-Systemen dynamischen Veränderungen unterliegen, immer in ihrem aktuellsten Stand in der Flex-Anwendung präsentiert werden. Das Flex Framework stellt drei unterschiedliche RPC Services zur Verfügung, die ihre Unterschiede in dem genutzten Übertragungsformat offenbaren (Kasten RPC Services im Flex Framework).

RPC Services im Flex Framework
HTTPService
<mx:HTTPService id="meinService" url="http://www.abc.de/dein.xml"/>

WebService
<mx:WebService id="meinService" wsdl="http://www.abe.de/mein.wsdl"> <mx:operation name="getHelloData" /> </mx:WebService>

RemoteObject
<mx:RemoteObject id="meinService" destination=“meineDestination"> <mx:method name="getHelloData" /> </mx:RemoteObject>

Schauen wir uns die HTTPService-Klasse etwas genauer an. Die Schritte zur Erzeugung einer HTTP-Anfrage sind die Erstellung des HTTPService-Objekts und das Starten der HTTP-Anfrage. Wichtig ist hierbei die Information, dass die reine Erstellung einer HTTPService-Klasse durch den MXML-Tag <mx:HTTPService/> zu diesem Zeitpunkt noch keine Anfrage startet. Erst durch den Aufruf der send()-Methode auf der Serviceklasse startet die Anfrage nach Daten.

Datenanfragen werden in Flex generell asynchron behandelt. Dies heißt, dass Flex darüber informiert, sobald die angefragten Daten vorliegen. Dies funktioniert, wie nicht anders erwartet, über Events und ist bei allen drei RPC Services das result-Event. Wie im Abschnitt Events beschrieben, ist dieses Event ein spezielles Event vom Typ ResultEvent und besitzt Eigenschaften, die dann wiederum die angefragten Daten enthalten. Flex versucht, alle erhaltenen Daten in die dafür sinnvollen Datentypen umzuwandeln. So werden zum Beispiel XML-Daten automatisch vom Framework in ArrayCollections transferiert bzw. aufbereitet, die dann auf einfache Weise mit DataBinding an andere Komponenten gebunden werden können. Doch nehmen wir uns eine Beispielanwendung vor und schauen uns die Abläufe und Datenstrukturen dort an.

Das PHP RIA SDK von Adobe

Adobe stellt auf seiner Webseite speziell für PHP-Entwickler ein SDK zur Verfügung, welches die unterschiedlichen Formen der Integration von Flex in PHP-Projekte aufzeigt. Ein sehr großer Bestandteil ist die Nutzung unterschiedlicher RPC Services und -Formate in der Kommunikation mit der PHP-Welt.

Die Beispielanwendung

Im Folgenden benutze ich ein im SDK verfügbares Beispiel als Grundlage und erweitere dieses um die in diesem Artikel beschrieben Techniken. Die Flex-Anwendung enthält zwei unterschiedliche Use Cases. Zum einen die Darstellung der aktuellen Daten aus der Datenbank, aber ebenso eine Form zur Eingabe neuer Nutzerdaten.

Die hierfür zuständige PHP-Datei request.php finden Sie im SDK von Adobe; sie muss an dieser Stelle nicht ausführlich beschrieben werden. Sie liefert sowohl Daten aus einer MySQL-Datenbank und nimmt ebenso POST-URL-Parameter entgegen und schreibt diese in die Datenbank.

Teil 1   Teil 2   Teil 3   Teil 4   Teil 5   

Kommentare

Gravatar Myri 27.11.2008
um 17:05 Uhr
Interessanter Artikel. Schade, dass der Flex Builder nicht mehr kostenlos ist - oder gibts Alternativen/Studentenversionen? #zitieren
Gravatar Mickey 30.11.2008
um 14:59 Uhr
Das SDK ist ja kostenlos und wenn man es z.B. mit FlashDevelop nutzt, hat man eine komplett kostenlose Lösung. Man hat dann nur nicht den Design-Modus, aber auf den kann man auch verzichten, wenn man erstmal weiß, was die ganzen Komponenten so für Möglichkeiten haben. #zitieren
Gravatar daslicht 30.11.2008
um 15:59 Uhr
www.flexregistration.com #zitieren
Gravatar Ben 05.08.2009
um 10:40 Uhr
Falls es noch jemanden interessiert. Für Studenten gibts ne kostenlose Version:
https://freeriatools.adobe.com/flex/
#zitieren