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.




