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