Datenaustausch zwischen Macromedia Flash und ASP
Geschrieben von: Günter Hoffellner Dies ist ein Forum für ASP Entwickler. Warum also ein Artikel zum Thema Macromedia Flash? Die Zeit, da Flash nur als reines Animationstool für Introsequenzen von Websites benutzt wurde ist seit dem Erscheinen von Flash 4.0 vorbei. Wenn man Flash in komplexe Aufgabenstellungen integriert, so muß Flash als programmierbares Frontend mit serverseitigen Programmen wie ASP-Seiten zusammenarbeiten. Dies bedeutet in erster Linie, daß man Daten zwischen Flash und ASP austauscht, und zwar sowohl von Flash zu ASP, als auch von ASP zu Flash. Dieser Artikel soll der Auftakt für eine Reihe sein, die zum einen ein Verständnis für das Interface zwischen der Flash- und der ASP-Programmierung schaffen soll, und gleichzeitig Einsatzmöglichkeiten dieser beiden Technologien in ihrer Verbindung aufzeigt. Für diesen Artikel werden vom Flashdesigner vollständige Kenntnisse über statisches Flash und grundlegende Kenntnisse über Flash - Lingoprogrammierung vorausgesetzt. Voraussetzungen für den ASP Programmierer zum vollständigen Verständnis der in diesem Artikel vorgestellten Techniken sind Kenntnisse im Auslesen von Querystrings (mittels der Request.QueryString Collection ähnlich dem Auslesen von mittels GET gesendeten Formulardaten) und im Erstellen von URL-Encoded Strings. 1. EinführungIn den folgendenden Absätzen wird ein einfaches Beispiel gezeigt, in dem Daten von Flash an ASP übergeben werden, dort Berechnungen mit den übergebenen Daten stattfinden, und die Ergebnisse schließlich zur Darstellung an Flash übermittelt werden. In vielen ASP Applikationen werden Querystrings für verschiedene Zwecke eingesetzt. Im nachfolgenden Beispiel wird nun ein Querystring benutzt, um Daten von Flash an ASP zu übermitteln. Der Querystring ist dabei Teil der URL. Die folgende URL enthält den Querystring sum=20&status=Alles+in+Ordnung%21, der an die ASP-Seite namens getit.asp übergeben wird. http://www.someserver.com/getit.asp?sum=20&status=Alles+in+Ordnung%21 Der Querystring enthält die URL-Encoded Strings sum=20 und status=Alles in Ordnung!. Diese repräsentieren für die ASP-Seite Paare von Namen und Werten, die für Berechnungen oder als Parameter für Datenbankabfragen benutzt werden können. Die meisten Flash Entwickler hatten bisher nichts mit Querystrings zu tun. Es wird jedoch gezeigt werden, wie ein einfaches Userinterface in Flash erstellt werden kann, das von Flash aus Werte in einen Querystring verpackt, um damit gezielt Daten an den Server zu schicken. Weiters sehen Sie, wie die Ergebnisse von Server auf dem einfachsten Weg wieder in das Flash Userinterface transferiert werden und dort ausgegeben werden können. 2. Aufgabenstellung für das BeispielIm Userinterface sollen zwei beliebige Zahlen vom Benutzer eingegeben werden. Innerhalb von Flash wird geprüft, ob der Benutzer Werte in das Fomular eingegeben hat, bevor die Werte zur ASP-Seite am Webserver geschickt werden. Zum Übermitteln der eingegebenen Werte wird ein Querystring zusammengebaut und der Inhalt der beiden Variablen an den Server geschickt (an eine ASP Seite des Webservers). Genauer gesagt: Es wird die ASP Seite aufgerufen und die Daten als Teil des URLs im Querystring übergeben. Das Aufrufen einer URL und das Laden des Inhalts der betreffenden Seite geschieht in Flash mittels dem Befehl Load Variables (URL, 0). Flash wartet daraufhin auf die Antwort des Servers. Damit Flash Variablen Werte von der ASP-Seite lesen kann, muß diese wieder Paare von Namen und Werten als Querystring bereitstellen, der einfach wie eine HTML Seite an das Flash Programm übermittelt wird. Flash setzt daraufhin Variablenwerte im aufrufenden Frame entprechend den Werten die von der ASP-Seite geschickt wurden. Die ASP Seite in unserem Beispiel errechnet Ergebnisse der vier mathematischen Grundoperationen zwischen den beiden im Flash Formular eingebenen Zahlen aus. Weiters wird eine Statusmeldung zu Flash geschickt, die Auskunft darüber gibt, ob alle Operationen erfolgreich durchgeführt wurden oder ob eine Division durch Null dies verhindert hat. 3. Die Flash Grundstruktur des BeispielsHier wird der grundlegende Aufbau des herunterladbaren Flash Files erklärt. Erfahrene Flash User mögen Punkt 3.1 getrost überspringen. Das Flash Formular sehen Sie im folgenden Bild: 3.1 Beschreibung der LayerstrukturDie Layerstruktur ist der besseren Anschaulichkeit halber stark aufgesplittet (siehe nachfolgendes Bild). Es wäre ohne weiteres möglich diese auf nur zwei Layer zu reduzieren.
3.2 Die Logik des Flash FilesIn Frame 2 wird das User Interface aufgebaut und eine STOP Action gestetzt. Danach hat der User Zeit, Werte in die Felder Zahl1 und Zahl2 einzugeben. Die Eingabe wird durch Drücken des blauen Buttons bestätigt und überprüft. Der Einfachheit halber wird nur auf "keine Eingabe" oder "Eingabe" geprüft, nicht aber ob der Benutzter Zahlen oder Strings eingegeben hat. In Frame 4 wird der Querystring zusammengebaut, damit die eingegebenen Zahlen als Teil der URL zum Server geschickt werden können. Zu guter letzt wird in Frame 5 die ASP Seite aufgerufen, die Variablen verschickt (URL enthält den Querystring) und auf eine Antwort des Servers gewartet. Die vom Server rückgesendeten Variablen haben die selben Namen wie die Ausgabefelder und werden somit von Flash automatisch übernommen. 4. Die Flash ProgrammierungIm folgenden Punkt wird die Programmierung des Flash Action Scripts zum Datenaustausch zwischen Flash und ASP genauer unter die Lupe genommen. 4.1 Die verwendeten VariablenFür die Textein(aus)gabefelder werden bei der statischen Erzeugung des Formulares folgende Variablennamen verwendet:
4.2 Button - Action zur EingabeverifizierungWird der hellblaue Button gedrückt, so findet eine Überprüfung statt, ob Werte eingegeben wurden, oder ob sich in den Feldern noch immer ein Leerstring befindet. Für den Fall, daß zahl1 oder zahl2 einen Leerstring enthält wird eine Meldung in der Statuszeile ausgegeben sowie die Werte der Variablen nicht an die ASP Seite geschickt. Folgendes Button - Actionscript wird unter "Eigenschaften" des in Frame 2 auf der Bühne positionierten Buttons eingegeben: On (Press) If ((zahl1 ne "") and (zahl2 ne "")) Go to Next Frame Else Set Variable: "status" = "Bitte Zahlen eingeben" End If End On Nach dem Drücken des Buttons wird geprüft, ob keines der beiden Textfelder einen Leerstring enthält. Wie zu sehen ist, wird der Inhalt des Textfeldes direkt über seinen Variablennamen angesprochen. Achtung: Flash erlaubt als Vergleichsoperatoren in if - Abfragen sowohl eq, ne, lt, gt, le, ge als auch =, <>, <, >, <=, >=. Dabei sollte strikt darauf geachtet werden, daß bei Stringvergleichen equal, not equal usw. und bei numerischen Vergleichen =, <> usw. zu verwenden ist. Ansonsten interpretiert Flash Stringwerte als numerische Werte (oder umgekehrt). Nebeneffekte sind, daß Null als Leerstring oder ein Leerstring als Null interpretiert werden könnte. Das hätte im vorherigen Skript natürlich fatale Folgen, da somit ein echter Leerstring nicht erkannt werden würde (implizite Konvertierung in eine Null bei Verwendung des <> Operators anstelle von ne). Sollte noch ein Leerstring vorhanden sein, so wird eine Meldung in die Statuszeile geschrieben. Dies geschieht direkt durch Zuweisung eines Wertes auf die Variable "status". 4.3 Löschen des StatusfeldesLiegt eine gültige Eingabe der zwei Zahlenwerte (also kein Leerstring) erst beim zweiten (oder späterem) Klick auf den Button vor, so würde nach wie vor die Statusmeldung der falschen Eingabe sichtbar sein. Dies macht es nötig die Statusmeldung durch Überschreiben der status Variable mit einem Leerstrings zu löschen. Dies geschieht in Frame 3 des Layers "Daten_an_ Server und retour": Set Variable: "status" = "" Go to Next Frame Nachdem die Statuszeile gelöscht wurde geht Flash zum nächsten Frame. 4.4 Zusammenbau des QuerystringsIn Frame 4 wird der Querystring vorbereitet. Dies ist nötig um ausschließlich die Variablen zahl1 und zahl2 an den Server zu schicken. Der Zusammenbau könnte auch direkt im Statement zum Aufrufen der ASP-Seite stattfinden, wurde aber der Übersichtlichkeit halber in ein eigenes Actionscript verpackt. Dieses Script stellt sich folgendermaßen dar: Set Variable: "aspfile" = "/calc.asp?"&"a="&Zahl1&"&"&"b="&Zahl2 Go to Next Frame Der eigentliche Querystring, der dadurch an den Server geschickt wird, sieht folgendermaßen aus: a=[zahl1]&b=[zahl2]. Der Querystring wird an den Namen der ASP-Datei durch ? getrennt angehängt. [zahl1] und [zahl2] stehen für die Werte der Variablen bzw. Eingabefelder zahl1 und zahl2. Also: /calc.asp?a=zahl1&b=zahl2.Bei einer Eingabe der Zahlen 17 und 4 sieht der Inhalt der Variablen aspfile wie folgt aus: /calc.asp?a=17&b=4 Dieser String stellt die aufzurufende URL der ASP Seite dar. Die URL wird in Flash unter Verwendung des &-Zeichen aus Strings und numerischen Variablen aufgebaut. Das Ergebnis wird in der Variablen aspfile gespeichert. Der Server bekommt dann die eingegebenen Zahlenwerte als Werte der Querystring-Variablen a und b. Dadurch kann man die Werte in der ASP Seite über Request.QueryString("a") und Request.QueryString("b") auslesen. 4.5 Aufrufen der ASP-Seite, Serverantwort, ErgebnisausgabeDer eigentliche Kernteil stellt sich sehr einfach dar. Nachdem eine ASP-Seite mittles Load Variables Befehl aufgerufen und die Variablen im Querystring übergeben wurden, wartet Flash solange im gleichen Frame, bis die Antwort der ASP Seite eintrifft. Die Antwort der ASP Seite besteht dabei einfach aus einem URL-Encoded String, der alle Variablen und Werte enthält, die im Flash gesetzt werden sollen. So liefert eine ASP Seite (mittels Response.Write) den folgenden String zurück, um in Flash die Variable sum auf den Wert 7 und die Variable dif auf den Wert 9 zu setzen: sum=7&dif=9 Die Variablennamen des vom Server geschickten "Textes" werden also analog zu den Textein/Ausgabefeldern von Flash definiert. So werden die vom Server gesendeten Werte ohne Umweg direkt in die Ergebnisfelder geschrieben. Der Aufruf der ASP-Seite erfolgt in den folgenden Zeilen: Set Variable: "status" = "Variablen werden an den Server geschickt" Load Variables (aspfile, 0) Stop Bis die Antwort des Servers im Script eintrifft, wird in der Statuszeile also eine Meldung angezeigt. Mit dem Load Variables Befehl, der sinnigerweise ein Unterbefehl des Load Movie Befehls ist, wird der im vorherigen Frame erzeugte URL-String aspfile benutzt, um die zugehörige ASP-Datei aufzurufen und Werte im Query-String zu übergeben. Wie die ASP Datei des Servers genau aufgebaut ist wird unter Punkt 5 erklärt. Alternativ zu dieser Vorgangsweise des selektiven Versendens von Variablenwerten durch Angeben im Querystring der URL können die Variablen auch ohne das umständliche Zusammenstellen des Query-Strings an den Server geschickt werden: Dazu gibt man als URL nur das ASP-File an und wählt "send using get" oder "post" aus. In diesem Fall würden aber alle Variablen des gleichen Levels, in unserem Beispiel also nicht nur zahl1 und zahl2 sondern auch alle anderen Variablen, an den Server geschickt werden, was bei einem aufwendigen Flash Script einen großen Datenstrom zwischen Browser (Flash Script) und Server zur Folge hätte. Achtung: Es darf nicht vergessen werden beim Load Variables Befehl den Button neben dem URL - Eingabefeld von "ABC" auf "=" zu setzen, da ansonsten der angegebene Wert als String und nicht als Expression (Ausdruck) behandelt werden würde. Das heißt in diesem Fall, daß Flash versuchen würde "nichts" (kein "send using get" oder "post") an die Datei "aspfile" zu schreiben. Grundsätzlich kann gesagt werden, daß das Nichtsetzen des Expression Buttons "=" die häufigste Fehlerquelle beim Flash-Programmieren darstellt. Achtung: Bei der Load Movie - Load Variable Action ist der Level standardmäßig auf Eins (1) gesetzt. Werden Variablen in der Haupinstanz von Flash genutzt (Szenenebene), muß dieser Wert auf Null (0) umgestellt werden, da ansonsten die Variablen des Servers nicht an ihrem Bestimmungsort eintreffen. 5. ASP Datei, Aktionen am ServerDie im Querystring gesendeten Werte werden mittels
a = Request.QueryString("a") b = Request.QueryString("b") Danach werden die Werte für die Variablen sum, mult, div und dif errechnet: a = CDbl(a) b = CDbl(b) strStatus = "Alles in Ordnung!" dblSum = a + b dblMult = a * b dblDif = a - b If Abs(b) < 0.00001 Then dblDiv = "Error" strStatus = "Fehler: Division durch Null!" Else dblDiv = a / b End If Nun können die Ergebnisse an Flash zurückgeschickt werden.
Die geschieht durch das Senden eines URL-Encoded Strings,
der alle Variablen und Werte enthält, mittels strURLEncoded = "sum=" & Server.URLEncode(dblSum) strURLEncoded = strURLEncoded & "&mult=" & Server.URLEncode(dblMult) strURLEncoded = strURLEncoded & "&div=" & Server.URLEncode(dblDiv) strURLEncoded = strURLEncoded & "&dif=" & Server.URLEncode(dblDif) strURLEncoded = strURLEncoded & "&status=" & Server.URLEncode(strStatus) Response.Write strURLEncoded Wenn Flash also die Werte 16 (a) und 4 (b) sendet, so sieht der von der ASP Seite retournierte String wie folgt aus: sum=20&mult=64&div=4&dif=12&status=Alles+in+Ordnung%21 SchlußbemerkungWie zu zeigen war, ist die Übergabe von Daten an den Server nicht wirklich schwierig. Natürlich gibt es auch hier Fallen die in schwer zu erkennenden Fehlern resultieren können. Dies vor allem dann, wenn die mit "Achtung" gekennzeichneten Tips nicht eingehalten werden. Außerdem ist die unkonventionelle Art um Flash-Scripts zu programmieren fehlerträchtig. Nichts desto trotz eröffnet sich für den Flash Programmierer eine neue Welt durch die Möglichkeit in Flash sehr komplexe oder unmögliche Berechnungen in einer ASP-Seite verrichten zu lassen. Somit sind ansonsten unlösbare Aufgaben relativ leicht zu lösen (z.B. Array Emulation, trigonometrische Funktionen). In kommenden Artikeln wird auf die Kommunikation zwischen Flash-Script und ASP-Seite zur Nutzung der besten Möglichkeiten beider Welten weiter eingegangen werden. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Cookies in Flash mittels ASP manipulieren Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |