Morfik:Webapplikationen ganz anders
Transcription
Morfik:Webapplikationen ganz anders
Ajax1-5_06 17.08.2006 9:21 Uhr Seite 6 AJAX Morfik: Webapplikationen ganz anders von Michaël Van Canneyt Morfik ist ein neues Produkt mit dem Potential, das Schreiben von Webapplikationen so einfach und bequem zu machen wie die Entwicklung von Desktop-Programmen. Seine einzigartige Architektur hebt Morfik von anderen Entwicklungsplattformen wohltuend ab. Eine neue Strömung in der Entwicklung von Webapplikationen ist AJAX. Das Kürzel steht für »Asynchronous JavaScript and XML«. Das ist eine Technik, deren raffinierte Verbindung von XHTML, CSS und Javascript es ermöglicht, Programme zu schreiben, die zwar im Webbrowser laufen, sich aber trotzdem fast wie ein normales Programm verhalten: Mit Javascript werden Teile des HTMLCodes aktualisiert oder zusätzliche Daten vom Server geholt. Das verlangt einen Browser, der sich an den Standard hält, in der Praxis sind das gerade mal zwei. Außerdem muß natürlich Javascript eingeschaltet sein. Zur Zeit bewegen sich die meisten Entwickler auf der Stufe, auf der AJAX-Code geschrieben wird, vielleicht mit der Hilfe einer IDE und einiger Code-Templates für die Standardaufgaben. Serverseitig gibt es viele Ansätze für das Kodieren des dortigen Teils des Programms, normalerweise in Form von Java, PHP oder .NET (AJAX-fähiges ASP). Alle Ansätze haben aber eines gemeinsam: Sie trennen sauber den Server- und den Client-(Javascript)-Anteil. Das ist alles soweit in Ordnung und funktioniert auch. Außerdem ist es eine wirkliche Verbesserungen dessen, was man bisher zur Verfügung hatte. Aber es reicht immer noch nicht. Wer Desktop-Anwendungen entwickelt, wird mit Kopfschütteln oder sogar Entsetzen auf die Kopfstände blicken, die verlangt werden, um eine simple Anwendung zu schreiben, die mit Einschränkungen das macht, was ein Desktop-Programm ohnehin schon längst kann. Benötigt werden Kenntnisse in XML, HTML, Javascript, CSS, um nur einige zu nennen, eben die klassischen Bestandteile einer Webapplikation. Morfik ist eine Stufe weiter: - Erstens wird die Webapplikation genauso geschrieben wie jede andere Client/Server-Applikation. Entwickelt wird genauso, als würde das Programm mit einem Serverprogramm über Web-Services kommunizieren. Der Umstand, daß der Code in einem Browser abläuft, wird vom Programmierer fast völlig ferngehalten. - Zweitens ist es prinzipiell möglich, in jeder Hochsprache zu entwickeln. Momentan werden Object Pascal, Visual Basic, Java und C# unterstützt. Die Morfik-IDE kompiliert diese Quellen dann in ein Serverprogramm (einen Standalone-HTTP-Server oder ein Apache-Modul) und in Javascript für den Client, das dann vom Server an den Browser gesandt wird. Das bedeutet, daß keine Kenntnisse in Javascript, XML, AJAX, HTML oder CSS erforderlich sind, was ein wirkliches Plus darstellt: jeder Delphi- oder VB-Programmierer 6 TOOLBOX | 5/2006 kann sofort loslegen. Das Endergebnis kann dann als echte Webapplikation verteilt werden, beispielsweise integriert in eine Webseite, aber auch als normale Desktop-Applikation. Beide verhalten sich völlig identisch. Die Desktop-Variante ist nämlich nur die Server-Applikation, die den Webbrowser lädt und auf sich selbst zeigt. Die Installation Derzeit läuft die Morfik-IDE nur unter Windows. Eine etwa 40 MByte große kostenlose Trial-Version ist von der Webseite http://www.morfik.com/ erhältlich, die selbst auch ein Morfik-Programm ist und sich auf jeder Windows-Plattform integrieren läßt. Sie hat eine Einschränkung: Ist bereits Firebird oder Interbase installiert, kollidiert das mit Morfik. Es verwendet nämlich Embedded Firebird 2.0 als DefaultBackend für seine Webapplikationen und dessen Installation kann mit bereits vorhandenen Firebird-Installationen ins Gehege kommen. Unter Unständen sind einige manuelle Anpassungen an der mit Morfik ausgelieferten FirebirdInstallation nötig. Die Hilfe, was zu tun ist, befindet sich auf der Morfik-Webseite, man muß nur das Forum durchsuchen. Hauptsächlich bestehen die Anpassungen darin, eine Version der gds32.dll ins Morfik-Binärverzeichnis zu kopieren und außerdem die Firebird-Konfigurationsdatei von Morfik so zu ändern, daß sie auf einen anderen TCP/IP-Port lauscht als die normale Firebird- oder Interbase-Installation. Dieser bekannte Fehler soll aber in einer der nächsten Versionen behoben werden. Die Morfik-Oberfläche Alle Entwicklungsarbeiten werden in der Morfik-IDE, dem sogenannten AppsBuilder, durchgeführt. Das Aussehen erinnert stark an MS Access, zeigt aber auch Anklänge an andere grafische Oberflächen. Nach dem Start präsentiert sich die Oberfläche wie Bild 1. Sie erlaubt das direkte Laden bereits zuvor geöffneter Projekte und auch das Laden von Beispielen vom MorfikWebserver. Die Anwahl des Punkts New Project im FileMenü zeigt den Dialog in Bild 2. Je nach gewähltem Modus werden dann mehr oder weniger Fragen zur Konfiguration des Projekts gestellt. Alle Dialoge erwarten aber zuerst einen Projektnamen und einen Ort, an dem die Projektdateien abgelegt werden sollen. Ajax1-5_06 17.08.2006 9:21 Uhr Seite 7 AJAX Anzeigenseite Toolbox Leser werben Leser 1/1 Seite 1-farbig kommt von Hawa & Nöh TOOLBOX | 5/2006 7 Ajax1-5_06 17.08.2006 9:21 Uhr Seite 8 AJAX Bereich Funktion Tables (Tabellen) Jedes Morfik-Programm ist an eine Datenbank angebunden, allein schon um in ihr die Daten abzulegen. Voreingestellt dient Embedded Firebird als Backend. Die Tabellen können, in etwa so wie in MS Access oder OpenOffice.org Base, in der IDE visuell entwickelt und bereits in der IDE auch mit Daten gefüllt werden. Die Queries sind vordefinierte Abfragen wie in Access mit dem Unterschied, daß in Morfik ausschließlich Select-Abfragen möglich sind. Mit dem Visual Query Editor lassen sich die Abfragen sehr einfach definieren. Wer mit Access oder OpenOffice.org Base vertraut ist, dem wird sich der Umgang mit dem Query Editor schnell erschließen. Die Abfragen können wie in Delphi Parameter besitzen. Damit sie im Designer ausgeführt werden können, müssen die Parameter auf die Voreinstellungen gesetzt sein. Wie im Tabelleneditor lassen sich die Abfrageergebnisse anzeigen. Die Forms ähneln denen von Delphi oder Visual Basic. Der Hauptunterschied ist natürlich, daß sie im Browser angezeigt werden. Auch der Designprozeß ist dem in Delphi und Visual Basic sehr ähnlich, er besteht aus einer einfachen Drag&Drop-Schnittstelle und einem Objektinspektor zum Setzen der verschiedenen Eigenschaften. In Delphi-Terminologie befinden sich die Morfik-Forms irgendwo in der Mitte zwischen einem TForm und einem TFrame. Ein Form kann von sich selbst angezeigt werden und dabei das Browser-Fenster vollständig ausfüllen oder auch als Teil eines anderen Forms verwendet werden. Morfik spricht dann von einem »SubForm«. Ein Form erhält Datenbankbezug, indem es an eine Abfrage oder Tabelle angebunden wird, und kann dann deren Inhalt anzeigen. Als System für die Entwicklung datenbank-zentrischer Applikationen enthält Morfik natürlich einen vollständigen ReportDesigner. Die Reports werden als hochwertige PDF-Dokumente ausgegeben und im Browser angezeigt. Damit ist auch das Sichern oder wahlweise das direkte Ausdrucken möglich. Das Konstruieren der Reports erfolgt ähnelt dem der Forms, ihre Arbeitsweise entspricht der anderer Report-Designer. »Makro« ist der Begriff der Morfik-IDE für Web-Services, wobei es sich um einem einfachen RPC-Mechanismus handelt, mit dem der Client (in diesem Fall also der Browser) Code auf dem Server ausführen kann. Da alle Kommunikation über das HTTP-Protokoll läuft, ist es nur natürlich, daß die Web-Services mit dem SOAP-Protokoll implementiert sind. Das bedeutet, daß sie mit jedem Programm zusammenarbeiten, das SOAP unterstützt. In Morfik sind die Web-Services als Klasse implementiert, die Ein-/Ausgabeparameter als Variablen zur Verfügung stellt. Alles was man tun muß, ist die Prozedur Execute zu implementieren – und fertig ist der Web-Service. Clientseitig muß dann nur eine einzige Methode mit dem Namen HandleResponse implementiert sein. Module sind einfach nur Dateien, die Quelltext enthalten. Sie können wahlweise auf dem Server oder auf dem Client (oder auf beiden) genutzt werden. Diese Auswahl muß getroffen werden, wenn ein neues Modul begonnen wird. Sie sind vergleichbar mit Units in Delphi oder einfachen Basic-Dateien in Visual Basic. Queries (Abfragen) Forms (Formulare) Reports (Berichte) Macros (Makros) Modules Tabelle 1: Die Anwendungsbereiche in der Morfik-IDE Nachdem der Wizard seine Arbeit beendet und einige Dateien angelegt hat, zeigt sich das Hauptfenster der IDE wie in Bild 3 mit Fenstern für alle Bereich des Projekts. Das ist zu Beginn nur ein Formular mit dem Namen Index, da die meisten Webserver die index.html als Namen für die Startseite erwarten. Das erste »Hello, World!« Die verschiedenen Icons auf der linken Seite repräsentieren die verschiedenen Bereiche (»Dokumente« genannt), aus denen ein Programm aufgebaut sein kann. Sie sind in Tabelle 1 erläutert. Das Klicken auf einen der Bereiche zeigt die jeweiligen Auswahlmöglichkeiten in einer Liste an. Programmtyp Um in die Software-Entwicklung mit Morfik einzusteigen, bietet sich das übliche »Hallo Welt« als einfachstes Programm an. Nach der Auswahl des Menüpunkts New Project fragt der Wizard, welches Wizard-Interface aufgerufen werden soll. Express stellt die wenigsten Fragen, nämlich nur nach Programmtyp und Programmname. Für den Typ stehen die Punkte in Tabelle 2 zur Wahl. Beim Hello-World-Programm paßt die Einstellung »WebOS application«. Nach der Angabe des Namens zeigt die IDE ein Aussehen wie in Bild 3. Das Form index ist Standard bei Morfik und kann in den Projektoptionen durch Doppelklick auf das Form im anschließend geöffneten Designer geändert werden. Das Betätigen von [F11] öffnet das Eigenschaften-Fenster (das Äquivalent zum Objektinspektor im Delphi-Sprachge- Beschreibung WebOS Application Das ist eine »normale« Morfik-Webapplikation, bei der Morfik die Datenbank generiert und die Datenbank hinzufügt. Classic Web Application Eine Web-Applikation ohne die interne Embedded-Datenbank-Engine. Sie wird an eine externe Datenbank gebunden. AppExchange S-Control Damit werden einfache Module für andere Projekte geschrieben, vergleichbar mit Packages in Delphi, OCX-Dateien in Visual Basic oder Assemblies in .NET. Tabelle 2: Die zur Auswahl stehenden Programmtypen 8 TOOLBOX | 5/2006 Ajax1-5_06 17.08.2006 9:21 Uhr Seite 9 AJAX Bild 1: Morfik ist zum ersten Mal gestartet brauch). Von hier ab wird das Programm visuell erzeugt; aus der Toolbox wird ein Textlabel auf das Form abgelegt. Dann werden seine Eigenschaften angepaßt (Caption, Farbe und Schriftgröße). Der Button Preview kompiliert und startet die Anwendung. Natürlich stehen nicht nur Labels zur Verfügung, die meisten Standard-HTML-Elemente und noch einige andere Elemente können auf dem Fenster abgelegt werden. Einige Beispiele zeigt Tabelle 3. Außer den üblichen gibt es im Internet auch eine große Vielzahl sonstiger AJAX-GUI-Elemente, sie kann Morfik über spezielle Importroutinen ebenfalls nutzen. Beispiele dazu und auch verschiedene GUI-Komponentenpacks können von dort heruntergeladen werden. Die fertige Anwendung startet den Browser, Bild 4 zeigt das Ergebnis. Bild 2: Der Wizard für neue Projekte Element-Rubrik Beschreibung Edits Ein Edit-Element ist entweder eine Eingabezeile (Input) oder ein mehrzeiliges Eingabefeld (Textarea). Zusätzlich befinden sich in dieser Rubrik auch Datums- und Zeit-Eingabefelder, Eingabe-Comboboxen und ein Datei-Upload. Hier befinden sich die normalen Schaltflächen, Checkboxen und Radiobuttons. Hiermit werden reine Bilder oder Flash-Animationen eingebunden. Ein besondere Paintbox nimmt einige Bildformate auf der Webseite auf. In dieser Rubrik findet man Tabseiten, Container, Subforms und sogar ein Timer-Control. Buttons Images Others Tabelle 3: Die Steuerelementarten in Morfik TOOLBOX | 5/2006 9 Ajax1-5_06 17.08.2006 9:21 Uhr Seite 10 AJAX Bild 3: Der Projektexplorer Natürlich kann ein »Hallo Welt« in den meisten IDEs und Programmiersprachen mit wenig Aufwand geschrieben werden. Interessanter ist es natürlich, wenn hinter einem Programm – so wie bei den meisten echten Webapplikationen – eine Datenbank hinterlegt ist. Um die Morfik zugrundeliegenden Konzepte zu erläutern, wird ein kleines Programm, eine Art Login-Fenster entwickelt. (unique) Index auf das Feld U_LOGIN. Die Tabelle wird nun in USERS umbenannt und der Vorschau-Button zeigt sie tabellarisch an. Dann können auch sofort Daten eingegeben werden. Ist die Tabelle definiert, wird der User mit einer Query authentifiziert. Die Abfrage erhält den Namen QAuthenticate und sieht so aus: SELECT Datenbankanbindung U_ID, U_FULLNAME Dafür wird ein neues Projekt gestartet. Es erhält den Namen testlogin und in der Tabellenansicht wird eine neue Tabelle erzeugt. Sie erhält die Felder von Tabelle 4. Als Programmiersprache soll Object Pascal dienen. Die Felder der Tabelle werden im Tabelleneditor genauso wie in OpenOffice.org Base oder Access definiert. Das Interface ist den Vorbildern sehr ähnlich. Der Primärschlüssel der Tabelle wird auf U_ID gesetzt und ein einzigartiger Bild 4: Das Hallo-Welt-Programm 10 TOOLBOX | 5/2006 FROM USERS WHERE (U_LOGIN = :Login) AND (U_PASSWORD = :PWD) Die Syntax dieser einfachen Abfrage sollte klar sein, ein Delphi-Programmierer sieht sofort, daß Login und Password Parameter für diese Query sind. Das stellt auch die Morfik-IDE so fest und fragt nach den Voreinstellungen dafür. Um mit der Query in der IDE arbeiten zu können, müssen einige Werte eingetragen sein. Feld Funktion U_ID U_LOGIN U_PASSWORD U_FULLNAME Eine einzigartige User-ID, ein Autonumber-Feld. Der Login-Name des Users. Das Paßwort des Users. Der vollständige Name des Users. Tabelle 4: Die Felder der Datenbank »User« mit den Benutzerdaten Ajax1-5_06 17.08.2006 9:21 Uhr Seite 11 AJAX Nachdem das Datenbank-Bankend für das Login bereit ist, muß das Programm selbst entwickelt werden. Beim Entwickeln des Hauptformulars wird das Grundprinzip beim Schreiben von Web-Applikationen mit Morfik sichtbar: Es wird ein Form auf ein anderes Form gelegt. Die Stelle, auf der es plaziert ist, wird während des Designs festgelegt. Dazu wird auf das Hauptform ein SubForm abgelegt, das als Platzhalter für das Unterformular agiert. Ein voreingestelltes Form kann im Designer gesetzt werden. Zur Laufzeit zeigt die Morfik-Anwendung das Elternform und setzt das zweite Form an die Stelle des Platzhalters. Das Login-Formular, ein Subform eine Drop-down-Liste, die die Namen der definierten Bildschirme enthält. In diesem Beispiel muß die Eigenschaft auf LoginForm gesetzt sein. Das ist auch schon alles, was im Hauptfenster des Programms eingestellt werden muß. Das Login-Fenster enthält schon mehr Elemente. Es sollte in etwa so wie in Bild 5 aussehen. Die Namen der Buttons und Eingabefelder sind aber ohne Bedeutung. Der Quelltext des OnClick-Handlers des Reset-Buttons ist nicht kompliziert: PROCEDURE LoginForm.Button2Click(Event: TDOMEvent); BEGIN Mit diesem Wissen im Hintergrund kann die Login-Anwendung in drei Forms aufgeteilt werden: – index ist das Hauptfenster des Programms und besitzt ein einziges Subform. – loginform enthält die Kontrollelemente, die für das Login benötigt werden. Dieses Form ist das voreingestellte Form für das SubForm-Kontrollelement auf dem Hauptformular. – MenuForm wird sofort im SubForm angezeigt, wenn der User eingeloggt ist. Es enthält eine Grußbotschaft und kann mit einem Menü oder mit sonst gewünschten Elementen ausgestattet werden. Das index-Form ist sehr einfach gestaltet. Es enthält nur eine subform-Komponente mit dem Namen MainForm. Die Property Form kann auf den Namen des Forms gesetzt werden, das voreingestellt erzeugt werden soll. Es hat dafür ANZEIGE EName.Text:=''; EPassword.Text:=''; END; Der Aufruf entspricht dem in Delphi. Beachtet werden muß nur, daß der delphi-typische Parameter Sender durch einen Parameter Event des Typs TDomEvent ersetzt ist. Wenn der Ok-Button gedrückt ist, sollte das Form dafür sorgen, daß der User authentifiziert wird und sofort das Hauptmenü angezeigt wird. Dafür muß der Server abgefragt und die Datenbank konsultiert werden. Dafür wird ein Web-Service benötigt. Durch die Prüfung des Anwenders muß die Datenbank abgefragt werden. Das geht natürlich nicht im Browser. Nur der Teil des Programms auf dem Server hat Zugriff auf die Ajax1-5_06 17.08.2006 9:21 Uhr Seite 12 AJAX Datenbank. Aus diesem Grund muß der Browser den Server kontaktieren und ihn bitten, die Userangaben zu überprüfen. Die Kontaktaufnahme erfolgt über einen Web-Service, in Morfik Macro genannt. Solche Makros sind sehr einfach zu implementieren. Es steht natürlich wieder ein Wizard in der Macros-Ansicht zur Verfügung. Zuerst erfragt er den Namen des Makros, anschließend können die Parameter für das Makro angegeben werden. Basierend auf den zuvor angefragten Angaben und den festgelegten Parametern generiert die IDE ein leeres Makro-Skelett. Authentifizierung per Web-Service Ein Makro (oder Web-Service) besteht aus je einer clientund serverseitigen Klasse. In beiden Klassen müssen alle Parameter des Web-Services als ihre Felder festgelegt und in beiden muß eine Methode mit der eigentlichen Funktionalität des Web-Services implementiert sein. Für das Login-Form wird ein Web-Service benötigt, der zwei Eingabeparameter erhält: einen Login-Namen und das zugehörigen Paßwort. Zurückgegeben werden sollen ein User-ID und der vollständige Name des Users. Sind der Name und des Paßwort falsch, wird als User-ID der Wert -1 zurückgegeben. Dieser Wert wurde als Default für den Parameter festgelegt. Wie im folgenden von Morfik generierten Quelltext zu sehen ist, braucht die Server-Klasse nur eine einzige Methode. Sie heißt Execute: WSAuthenticate=Class(Macro) Login : String; Password : String; UserID : Integer; FullName : String; Public Procedure Execute; override; End; Die Variablen Login und Password sind die Eingabeparameter des Web-Service. Die Ausgabeparameter sind UserID und FullName. In den aktuellen Betaversionen prüft Morfik nicht, ob der Code tatsächlich die Eingabevariablen schreibt. Auf Sinn und Unsinn ist also selbst zu achten. Der Quelltext für das Login-Beispiel sieht so aus: Bild 5: Das LoginForm-Form RecordSet.Active := FALSE; SoapServer.DestroyrecordSet(RecordSet); END; Der Quelltext im einzelnen: Nach dem Initialisieren der Ausgabevariablen erzeugt die Routine ein RecordSet, das Gegenstück zum TDataSet in Delphi. SoapServer ist ein globales Server-Objekt und für die Behandlung der SOAPAnfragen verantwortlich. Die Methode CreateRecordSet verlangt einen einzigen Parameter, der entweder den Namen einer vordefinierten Query oder eines vollständigen SQL-Befehls enthalten muß. Im Beispiel wird das vorher definierte QAuthenticate angegeben. Mofik erzeugt dann einen neuen RecordSet und kopiert den SQL-Befehl aus QAuthenticate. Nach der Vorbereitung des Statements werden die beiden Parameter gefüllt. Dabei ist zu beachten, daß der Doppelpunkt ein Teil des Parameternamens ist. Morfik folgt an dieser Stelle der Konvention von Microsoft Access, daß unbekannte Bezeichner in Abfragen als Parameter behandelt werden. Dies steht im Gegensatz zur Delphi-Konvention, bei dem Parameter mit einem Doppelpunkt kenntlich gemacht werden. Nach dem Aktivieren der Abfrage und der Prüfung, daß sie nicht leer ist (sie wird grundsätzlich entweder einen einzigen oder gar keinen Record zurückgeben), werden der komplette Name des Users und seine ID zurückgeliefert. Abschließend wird das RecordSet geschlossen und wieder freigegeben. Damit ist der Teil des Web-Service auf dem Webserver fertig. Die Morfik-IDE hat genauso den clientseitigen Teil des Web-Services generiert: PROCEDURE WSAuthenticate.Execute; VAR WSAuthenticate=Class(Macro) RecordSet: TRecordSet; BEGIN UserID Login : String; Password : String; := -1; FullName := ''; RecordSet := SoapServer.CreateRecordSet('QAuthenticate'); RecordSet.Prepare; RecordSet.ParamByName(':Login').AsString := Login; UserID : Integer; FullName : String; Public Procedure HandleResponse; override; End; RecordSet.ParamByName(':PWD').AsString := Password; RecordSet.Active := TRUE; IF NOT RecordSet.EOF THEN BEGIN UserID := RecordSet.FieldByName('U_ID').AsInteger; FullName:=RecordSet.FieldByName('U_FULLNAME').AsString; END; 12 TOOLBOX | 5/2006 Die Methode HandleResponse wird automatisch vom generierten Code aufgerufen, wenn der Web-Services auf dem Server ausgeführt wurde. Die Variablen erhalten die vom Web-Service gemeldeten Werte. Ajax1-5_06 17.08.2006 9:21 Uhr Seite 13 AJAX Nachdem der Web-Service ausgeführt ist, muß der Client die richtigen Arbeiten durchführen. War die Kombination Username/Paßwort falsch, sollte eine Meldung angezeigt werden. Bei einem korrekten Login muß das Menüformular in der Komponente MainForm des Index-Formulars angezeigt werden. Zuständig für dieses Verhalten ist der folgende Quelltext: PROCEDURE WSAuthenticate.HandleResponse; VAR Params : String; BEGIN IF (UserID < 0) THEN ShowMessage('Could not log you in. ' + 'Please check your username and password') ELSE BEGIN Params := '"UserID=' + IntToStr(UserID) + '",'; Params := Params+'"FullName=' + FullName + '"'; OpenForm('MenuForm', 'index:MainForm', Params); Die Parameter bedeuten: – URL beschreibt, welches Form zu öffnen ist. Hier kann entweder ein echter URL oder der Name eines MorfikForms angegeben sein. – Context ist ein String, mit dem festgelegt wird, wo der URL im Browser angezeigt werden soll. Das kann dann beispielsweise ein String im Format form:subform, aber auch eine Angabe wie self:_ sein, mit der das aktuelle Fenster im Browser gewählt wird. Blank öffnet ein neues Browserfenster. Mehr Informationen zu diesem vielseitigen Parameter findet man in der Hilde zu Morfik-IDE. – Parameters übergibt eine Reihe von Parametern an das Fenster. Es handelt sich um einen String der Form "param1=value1","param2=value2", mit dem Parameter an den neu anzuzeigenden Bildschirm übergeben werden können. Er wird noch genauer erläutert. Nachdem auch der Teil des Web-Services auf dem Client fertiggestellt ist, kann der OnClick-Event des Ok-Buttons im Login-Bildschirm implementiert werden. Er muß den Web-Service aufrufen, beispielsweise so: END; END; PROCEDURE LoginForm.BOKClick(Event: TDOMEvent); VAR Der Aufruf ShowMessage stammt aus dem clientbezogenen Morfik-API und ist nicht weiter aufregend. Das wirklich interessante geschieht in OpenForm. Diese Methode ist folgendermaßen deklariert: Params: String; BEGIN Params := '"Login=' + EName.Text + '",'; Params := Params + '"Password=' + EPassword.Text + '"'; XAPP.RunWebService('WSAuthenticate', Params, 0); PROCEDURE OpenForm(CONST URL, Context, Params: String); ANZEIGE END; Ajax1-5_06 17.08.2006 9:21 Uhr Seite 14 AJAX Wie das Beispiel zeigt, ist der Code nicht kompliziert: Der Aufruf von RunWebService, der den Web-Service aufruft, ähnelt der Syntax von OpenForm. Sein erster Parameter ist der Name des Web-Services, der auf dem Server aufgerufen werden soll, der zweite enthält eine Liste von Parametern für den Service im Stil "param1=value1","param2=value2", wie auch schon in OpenForm gesehen. Es brauchen nicht alle Parameter übergeben zu werden. Ist ein Wert nicht angegeben, gilt die Voreinstellung. Der Aufruf kehrt sofort zurück. Das liegt in der Natur von AJAX-Server-Calls begründet, die asynchron sind. Schon aus diesem Grund muß der clientseitige Teil des Web-Service als einzige Methode implementiert werden, die aufgerufen wird, wenn das Ergebnis vom Server an den Client zurückgemeldet wird. Das bedeutet aber auch, daß zusätzliche Statusprüfungen auf dem Client notwendig werden, wenn mehr als ein Aufruf über den selben Web-Service an den Server geschickt werden soll. Form-Parameter und das Menü Ein Form in Morfik kann mit ihm verbundene Parameter besitzen. Wenn eine Abfrage als Dataset für das Form verfügbar ist, sind die Abfrageparameter sofort auch als Formparameter verfügbar. Das ist für das Erzeugen von Master-Detail-Beziehungen und auch bei der Übergabe von Informationen an ein Form bei dessen Öffnen sehr praktisch. Im Beispiel mit dem Login wird diese Möglichkeit genutzt, die User-ID und den Namen im Bildschirm mit dem Hauptmenü anzuzeigen. Im Quelltext einer Form lassen sich die Form-Parameter wie normale Variablen behandeln, im Beispiel wird der Username beim Anzeigen des Forms in die Grußbotschaft eingesetzt. Im OnReady-Handler des Forms wird nur der folgende Quelltext benötigt: PROCEDURE MenuForm.WebFormReady(VAR Ready: BOOLEAN); BEGIN LWelcome.Caption := 'Welcome, ' + FullName; END; Das Ergebnis zeigt Bild 6. Die anderen Labels im Form sind anklickbar und zeigen die Alternativen in der Syntax von OpenForm. Es wurde in der Ausgabe 4'2006 der Toolbox beschrieben, daß inzwischen AJAX-fähige ASP.NET-Anwendungen möglich sind, Delphi bietet Techniken wie IntraWeb. Beide kranken am selben Problem, daß sie zu sehr den Server in den Mittelpunkt stellen. Die Programmierung auf der Clientseite hängt immer noch an der Kenntnis von Javascript. Die Morfik-IDE ändert das drastisch, indem die Webent- 14 TOOLBOX | 5/2006 Bild 6: Das Menü des Login-Beispiels wicklung ohne HTML, SOAP, XML, Javascript oder AJAX erfolgen kann. Um das Knifflige, nämlich die LowLevel-Routinen, kümmert sich der Framework. Programmiert wird wie auch bei einem Client/Server-System in einer Hochsprache mit einer festgelegten Schnittstelle zwischen Client und Server. Schließlich käme auch niemand ernsthaft auf die Idee, von einem Anwendungsentwickler zu erwarten, seine Menüstrukturen in Assembler oder gar Binärcode zu schreiben. Die Morfik-IDE und das Framework befinden sich noch auf dem Reißbrett und viele Funktionen arbeiten noch nicht richtig. Die verfügbaren Testdownloads sollten aber bereits jeden Entwickler von Desktop-Applikationen überzeugen, daß es möglich ist, eine Webapplikation mehr oder minder wie ein Desktop-Programm reagieren zu lassen, und vor allem daß es möglich ist, sie so zu schreiben, wie es bei herkömmlichen Programmen längst Standard ist, nämlich mit einem RAD-Tool. Bedeutet das das Ende der Desktop-Applikationen? Weit gefehlt! Webapplikationen besitzen eine grundlegende Schwäche: Bedingt durch ihre Natur laufen sie in der extrem eingeschränkten Umgebung des Webbrowsers ab. Sie sind damit von den mächtigen APIs des Desktops abgeschnitten. Kein DirectX, keine Office-Software-Integration, kein Low-Level-Zugriff auf Dateien, keine Tastaturkürzel und – keine Überwachung des Schließen des Programms – wenn das Browser-Fenster geschlossen wird, ist die Webapplikation weg. Die Liste der Einschränkungen ist lang, ist aber nicht das einzige Problem. Die Tatsache, daß Webapplikationen längst nicht mit allen Browsern arbeiten, kommt hinzu und stellt ein ernstzunehmendes Hindernis für die allgemeine Akzeptanz dar. Nur als Beispiel: Morfik-Programme laufen nicht im Konqueror. Trotz dieser Bedenken zeigt Morfik, daß mit dem richtigen Werkzeug die Entwicklung von Webapplikationen vorangetrieben werden kann. Die IDE zeigt den Weg auf, den die Entwicklungswerkzeuge für Webapplikationen gehen müssen, und ist auch eine größere Investition wert. ■ Ajax1-5_06 17.08.2006 9:21 Uhr Seite 15 AJAX Anzeigenseite freeX Miniabo 1/1 Seite 1-farbig kommt von Hawa & Nöh TOOLBOX | 5/2006 15