Dieser Abschnitt beschreibt die Funktionalitäten des 4D Web Servers, um Informationen über das Web auszutauschen, z.B. um Werte dynamisch zu senden und zu empfangen. Er ist in folgende Abschnitte gegliedert:
Dynamische Werte senden, die in 4D Variablen gespeichert sind
Sie können in Ihre HTML Seiten Referenzen auf 4D Variablen einfügen und diese Referenzen mit jeder Art von HTML Objekt verbinden. Werden die Web Seiten an den Browser gesendet, ersetzt 4D diese Referenzen durch die aktuellen Werte der Variablen. Die empfangenen Seiten sind demzufolge eine Kombination aus statischen Elementen und Werten auf 4D. Es handelt sich um eine halbdynamische Seite.
Hinweise:
Sie arbeiten mit Prozessvariablen.
Da HTML textorientiert ist, arbeiten Sie normalerweise mit Textvariablen. Sie können aber auch Variablen vom Typ BLOB verwenden. Dazu erstellen Sie das BLOB im Modus Text ohne Länge.
1- Über eine 4D Variable können Sie den Wert des HTML Objekts initialisieren.
2- Der Wert eines HTML Objekts kann nach der Rückübertragung eines Web-Formulars in einer 4D Variablen zurückgegeben werden. Dafür erstellen Sie im Quellcode der HTML Seite ein HTML Objekt, das denselben Namen wie die 4D Prozessvariable hat, die Sie einbinden wollen. Weitere Informationen dazu finden Sie im nachfolgenden Abschnitt “Dynamische Werte empfangen”.
Hinweis: Sie können keine Referenz auf eine 4D Variable vom Typ Bild machen.
Da ein HTML Objekt mit dem Wert einer 4D Variablen initialisiert werden kann, können Sie per Programmierung Standardwerte für HTML Objekte festlegen. Sie setzen dazu <!--#4DTEXT VarName--> in das Feld Wert des HTML Objekts ein. VarName ist der Name der 4D Prozessvariablen, die im Web Verbindungsprozess definiert wurde. Der Name wird zwischen die Standardmarkierung für HTML Kommentare gesetzt <!--#...-->.
Hinweis: Einige HTML Editoren akzeptieren <!--#4DTEXT VarName--> nicht im Feld Wert von HTML Objekten. In diesem Fall müssen Sie den Ausdruck in HTML Code schreiben.
Über das Tag <!--#4DTEXT--> können Sie in die gesendete Seite 4D Ausdrücke, wie Felder, Elemente von Arrays, etc. einfügen. Ein Tag mit dieser Art Daten funktioniert genauso wie das Tag mit Variablen. Weitere Informationen dazu finden Sie im Abschnitt ST FREEZE EXPRESSIONS.
Mit der Syntax <!--#4DTEXT VarName--> können Sie 4D Daten in der HTML Seite an beliebiger Stelle einsetzen. Schreiben Sie zum Beispiel:
<P>Welcome to <!--#4DTEXT vtSiteName-->!</P>
wird der Wert der 4D Variablen vtSiteName in die HTML Seite eingefügt.
Hier ein Beispiel:
// Der folgende Teil des 4D Code weist "4D4D" der Prozessvariable vs4D zu vs4D:="4D4D" // Dann sendet er die HTML Seite "AnyPage.HTM" SEND HTML FILE("AnyPage.HTM")
Der Quellcode der HTML Seite AnyPage.HTM lautet:
<HTML>
<head>
<title>AnyPage</title>
<script language="JavaScript"><!--
function Is4DWebServer(){
return (document.frm.vs4D.value=="4D4D")
}</p>function HandleButton(){
if(Is4DWebServer()){
alert("Sie sind mit 4D Web Server verbunden!")
} else {
alert("Sie sind NICHT mit 4D Web Server verbunden!")
}
//--></script>
</head>
<body>
<form action="/4DACTION/WWW_STD_FORM_POST" method="post" name="frm">
<p><input type="hidden" name="vs4D" value="<!--#4DTEXT vs4D-->"</p>
<p><a href="JavaScript:HandleButton()"><img src="AnyGIF.GIF" border=0 align=bottom></a></p>
<p><input type="submit" name="bOK" value="OK"></p>
</form>
</body>
</html>
Aus Gründen der Optimierung wird das Durchlaufen des HTML Quellcode nicht vom 4D Web Server ausgeführt, wenn HTML Seiten über einfache URLs mit den Endungen .HTML oder .HTM aufgerufen werden. 4D bietet Mechanismen, die das Parsen von Seiten erzwingen, soweit erforderlich. Weitere Informationen dazu finden Sie im Abschnitt 4D HTML Tags.
Sie können HTML Code in 4D Variablen einfügen. Wenn die statische HTML Seite im Web Browser angezeigt wird, wird der Wert der Variablen durch den HTML Code ersetzt und vom Browser interpretiert.
Sie können das spezielle Tag 4DHTML verwenden, um HTML Code über 4D Variablen oder Ausdrücke einzufügen:
Wir verwenden z.B. folgende 4D Variable:
vtHTML:="<b>"+[Client]name+"</b>"
Sie können den HTML Code mit folgendem Kommentar in die HTML Seite einfügen:
<!--#4DHTML vtHTML-->
Sie können eine Variable vom Typ Text oder BLOB verwenden. Das BLOB sollte im Modus "Text without length" generiert sein.
Empfängt der 4D Web Server ein gepostetes Formular, kann 4D die Werte jedes darin enthaltenen Objekts wiederfinden. Dieses Prinzip können Sie bei einem Web Formular verwenden, das z.B. mit WEB SEND FILE oder WEB SEND BLOB gesendet wurde, wo der Benutzer Werte eingibt oder ändern und dann auf die Schaltfläche Bestätigen klickt. In diesem Fall gibt es zwei Möglichkeiten, wie 4D die Werte der HTML Objekte in der Anfrage wiederfinden kann:
Hinweis zur Kompatibilität (4D v13.4): In bisherigen Versionen hat 4D die Werte von Variablen, die über ein gepostetes Web Formular oder eine URL vom Typ GET empfangen wurden, direkt in 4D Prozessvariablen kopiert (Im kompilierten Modus mussten diese Variablen in der Methode COMPILER_WEB deklariert werden). Diese Funktionsweise wurde ab 4D v13.4 entfernt; sie wird zur Wahrung der Kompatitibilität in konvertierten Datenbanken beibehalten, lässt sich aber über die Option Automatische Zuweisung von Variablen auf der Seite Seite Kompatibilität der Datenbank-Eigenschaften deaktivieren. Wir empfehlen, diese Option zu deaktivieren und dafür den Befehl WEB GET VARIABLES oder WEB GET BODY PART zu verwenden.
Betrachten wir folgenden Quellcode für die HTML Seite:
Sendet 4D die Seite zu einem Web Browser, sieht sie so aus:
Die wichtigsten Features dieser Seite sind:
Sie enthält drei Schaltflächen für die Übertragung: vsbLogOn, vsbRegister und vsbInformation.
Klicken Sie auf Log On, wird die Übertragung des Formulars erst von der JavaScript Funktion LogOn bearbeitet. Ist kein Name eingegeben, wird das Formular gar nicht in 4D übertragen. JavaScript zeigt eine Meldung an.
Das Formular hat sowohl eine POST 4D Methode als auch ein Übertragungsskript (GetBrowserInformation), das die Eigenschaften des Navigators in die vier verdeckten Objekte kopiert, deren Namen mit vtNav_App beginnen.
Es enthält auch das Objekt vtUserName.
Prüfen wir die 4D Methode WWW_STD_FORM_POST, die aufgerufen wird, wenn der Benutzer auf eine der Schaltflächen im HTML Formular klickt.
// Die Schaltfläche Log On wurde angeklickt
:(Find in array($arrNames;"vsbLogOn")#-1) $user :=Find in array($arrNames;"vtUserName") QUERY([WWW Users];[WWW Users]UserName=$arrValues{$user}) $0:=(Records in selection([WWW Users])>0) If($0) WWW POST EVENT("Log On";WWW Log information) // Die Methode WWW POST EVENT sichert die Information in einer Tabelle der Datenbank Else
$0:=WWW Register // Die Methode WWW Register lässt einen neuen Web Benutzer sich registrieren End if
// Die Schaltfläche Register wurde angeklickt
:(Find in array($arrNames;"vsbRegister")#-1) $0:=WWW Register
// Die Schaltfläche Information wurde angeklickt
:(Find in array($arrNames;"vsbInformation")#-1) WEB SEND FILE("userinfos.html") End case
Die Features dieser Methode sind:
Die 4D Variablen vtNav_appName, vtNav_appVersion, vtNav_appCodeName und vtNav_userAgent (verbunden mit den gleichnamigen HTML Objekten) werden über den Befehl WEB GET VARIABLES in den HTML Objekten gefunden, die über das JavaScript GetBrowserInformation erstellt wurde.
Die 4D Variablen vsbLogOn, vsbRegister und vsbInformation sind mit den drei Schaltflächen für die Übertragung verbunden. Der Befehl WEB GET VARIABLES findet nur die Variable zur angeklickten Schaltfläche. Wird die Übertragung über eine dieser Schaltflächen ausgeführt, gibt der Browser den Wert der angeklickten Schaltfläche an 4D zurück. Auf diese Weise sehen Sie, welche Schaltfläche angeklickt wurde. Beachten Sie, dass 4D Schaltflächen in einem 4D Formular numerische Variablen sind. In HTML sind dagegen alle Objekte Textobjekte.
Bei <SELECT...SELECT> wird im Befehl WEB GET VARIABLES der Wert des markierten Elements im Objekt zurückgegeben und nicht die Position des Elements im Array wie in 4D.
Empfängt der 4D Web Server ein "posted" Formular, ruft er – sofern vorhanden – automatisch die Projektmethode COMPILER_WEB auf. Diese Methode muss alle Direktiven zum Typisieren bzw. Initialisieren von Variablen enthalten. Das sind die Variablen mit denselben Namen wie die Feldnamen im Formular. Der Compiler verwendet sie beim Kompilieren der Datenbank. Die Projektmethode COMPILER_WEB ist gängig für alle Web Formulare. Sie ist nicht standardmäßig vorhanden. Sie müssen sie explizit erstellen.
Hinweis: Sie können auch den Befehl WEB GET VARIABLES verwenden, der den Wert jeder Variablen in einer übertragenen HTML Seite erhält.
Web Services: Die Projektmethode COMPILER_WEB wird – sofern vorhanden – für jede akzeptierte SOAP Anfrage aufgerufen. Über diese Methode müssen Sie alle 4D Variablen deklarieren, die mit eingehenden SOAP Argumenten verknüpft sind. Bei Verwendung von Prozessvariablen in Methoden mit Web Services müssen diese vor Aufrufen der Methode deklariert werden. Weitere Informationen dazu finden Sie in der Beschreibung zum Befehl SOAP DECLARATION.
4D unterstützt JavaScript Quellcode, sowie JavaScript.js Dateien, die in HTML Dokumente eingebunden sind (z.B. <SCRIPT SRC="...").
Mit dem Befehl WEB SEND FILE oder WEB SEND BLOB senden Sie eine Seite, die Sie im HTML Quelleditor vorbereitet haben oder per 4D Programmierung erstellt und als Dokument auf der Festplatte gesichert haben. In beiden Fällen können Sie die Seite komplett steuern. Sie können im HEAD Bereich des Dokuments Skripte von JavaScript sowie Skripte mit dem FORM Marker verwenden. Im vorigen Beispiel bezieht sich das Skript auf das Formular "frm", da Sie das Formular benennen konnten. Sie können die Übertragung des Formulars in die Ebene FORM Marker auch auslösen, akzeptieren oder verweigern.
Hinweis: 4D unterstützt die Übertragung von Java applets.