Version 2004.2 (Geändert)
Der 4D Web Server bietet verschiedene 4D spezifische HTML Tags, um Referenzen auf 4D Variablen oder Ausdrücke in vom 4D Web Server gesendete statische HTML Seiten einzufügen.
Diese Ausdrücke werden als HTML Kommentare (<!-- --> in HTML Code) eingefügt. Diese Seiten werden halbdynamisch bezeichnet. Die meisten HTML Editoren bieten Funktionalitäten zum Einfügen von Kommentaren.
Es gibt folgende 4D HTML Ausdrücke:
4DVAR, um 4D Variablen und Ausdrücke einzufügen,
4DHTMLVAR, analog zu 4DVAR, fügt jedoch HTML Code ein,
4DSCRIPT, um eine 4D Methode auszuführen,
4DINCLUDE, um eine Seite in eine andere einzufügen,
4DIF, 4DELSE und 4DENDIF, um logische Bedingungen in den HTML Code einzufügen,
4DLOOP und 4DENDLOOP, um Schleifen in den HTML Code einzufügen.
Hinweis zur Kompatibilität: In 4D Version 6.0.x wurden 4D Variablen in statische Seiten in eckigen Klammern eingesetzt [VarName]. Damit Sie in einer konvertierten Datenbank die standardmäßige HTML Syntax (<!--4DVAR MEINEVAR-->) verwenden können, achten Sie darauf, dass im Dialogfenster Einstellungen der Datenbank die Option "Verwende 4DVAR Kommentare anstatt Klammern" markiert ist. Weitere Informationen dazu finden Sie im Abschnitt Einstellungen des Web Server.
4D HTML Ausdrücke
Der Inhalt von 4D gesendeten halbdynamischen Seiten wird analysiert, wenn die Befehle SEND HTML FILE (.htm, .html, .shtm, .shtml) oder SEND HTML BLOB (text/html vom Typ BLOB) oder gesendete Seiten über URL aufgerufen werden.
Im nicht-kontextuellen Modus werden aus Optimierungsgründen Seiten mit den Endungen .htm und .html NICHT analysiert. Um hier das Analysieren der HTML Seiten zu erzwingen, müssen Sie die Endung .shtm oder shtml anfügen, z.B, http://www.server.com/dir/page.shtm.
Ein Beispiel dazu finden Sie in der Beschreibung zum Befehl WEB CACHE STATISTICS.
Nachfolgend die Fälle, in denen 4D die Ausdrücke in den HTML Seiten analysiert, die an Web Browser gesendet werden:
Sendebedingungen | Analyse des Inhalts der gesendeten Seiten | |
Kontextueller Modus | Nicht kontextueller Modus |
Endungen der Seiten (allgemein):
.htm, .html, .shtm, .shtml (HTML Seiten) | X | X |
.xml, .xsl (XML Seiten) | X | X |
.wml (WML Seiten) | X | X |
Über URLs aufgerufene Seiten | X | X, ausser Seiten mit der |
Endung .htm" oder .html | ||
Aufruf des Befehls SEND HTML FILE | X | X |
Aufruf des Befehls SEND HTML BLOB | X | X |
(wenn BLOB vom Typ "text/html" ist)
Einfügen über <!--4DINCLUDE--> | X | X |
Einfügen über Textobjekt in 4D Formular | X | - |
{meineseite.htm} |
Damit 4D einen HTML Kommentar verwerten kann, muss er immer die Form <!--4D...--> haben. Beachten Sie jedoch, dass bestimmte HTML Editoren automatisch auch andere Informationen in einen Kommentar einbauen, was beim Analysieren zu Fehlern führen kann.
Dagegen sind andere HTML Ausdrücke in jedem Fall möglich, wie z.B. Start list-->
Endet ein Kommentar <!--4D... nicht mit , wird ein Text in Form von "<!--4D... : --> wird erwartet" eingefügt, die Analyse wird an dieser Stelle unterbrochen. Die Seite wird aber trotzdem gesendet, um den Fehler zu melden.
Es lassen sich auch verschiedene Arten von Ausdrücken ineinander verschachteln.
Hier ein Beispiel für eine mögliche HTML Struktur:
<HTML>
...
<BODY>
<!--4DSCRIPT/PRE_PROCESS--> | (Aufruf der Methode) |
<!--4DIF (meinevar=1)--> | (Wenn Bedingung) |
<!--4DINCLUDE banner1.html--> | (Einfügen einer Unterseite) |
<!--4DENDIF--> | (Ende wenn) |
<!--4DIF (meinevar=2)-->
<!--4DINCLUDE banner2.html-->
<!--4DENDIF-->
<!--4DLOOP [TABLE]--> | (Schleife auf die aktuelle Auswahl) |
<!--4DIF ([TABLE]ValNum>10)--> | (Wenn [TABELLE]WertNr>10) |
<!--4DINCLUDE subpage.html--> | (Unterseite einfügen) |
<!--4DELSE--> | (Sonst) |
<B>Wert: <!--4DVAR [TABLE]ValNum--></B><BR> | |
<!--4DENDIF--> | (Feld anzeigen) |
<!--4DENDLOOP--> | (Ende Schleife) |
</BODY>
</HTML>
4DVAR
Syntax: <!--4DVAR VarName--> oder <!--4DVAR 4DExpression-->
Über <!--4DVAR VarName--> können Sie eine Referenz auf die 4D Variable oder den Ausdruck VarName beliebig auf einer HTML Seite einfügen. Schreiben Sie zum Beispiel:
<P>Welcome to <!--4DVAR vtSiteName-->!</P>,
wird der Wert der 4D Variablen vtSiteName in die HTML Seite eingefügt.
Sie können auch eine 4D Variable vom Typ Text in HTML Code einfügen, wenn das erste Zeichen ASCII Code 1 ist (z.B., vtHTML:=Char(1)+"...HTML code..."). Sie können auch den Ausdruck 4DHTMLVAR verwenden.
Über 4DVAR können Sie auch einen 4D Ausdruck (nicht nur Variablen) in 4D HTML Kommentare einfügen. So können Sie den Inhalt eines Feldes, z.B. <!--4DVAR [Tabellenname]Feldname-->) oder ein Tabellenelement z.B. <!--4DVAR arr{1}-->) oder eine Methode, die einen Wert zurückgibt (<!--#4DVAR mymethod-->) direkt einfügen. Ein Ausdruck wird nach denselben Regeln konvertiert wie eine Variable. Ein 4D Ausdruck muss darüberhinaus auch die Syntaxregeln von 4D berücksichtigen.
Hinweis: Die Ausführung einer 4D Methode mit 4DVAR richtet sich nach dem Wert des Attributs, das in den Methodeneigenschaften unter "Zugang per 4DACTION, 4DMETHOD und 4DSCRIPT" eingestellt wurde. Weitere Informationen dazu finden Sie im Abschnitt Sicherheit der Verbindung.
Ein Ausdruck kann zwar direkt den Aufruf von 4D Funktionen enthalten, aus Gründen der Lokalisierung ist jedoch davon abzuraten. So interpretiert ein französisches 4D den Kommentar <!--4DVAR Date du jour--> korrekt, ein englisches 4D bearbeitet diesen Kommentar jedoch nicht. Dasselbe gilt für die Bearbeitung von Zahlen, da der Dezimaltrenner je nach Land variieren kann. In beiden Fällen ist es besser, über Programmierung eine Variable zuzuweisen.
Bei einem Bewertungsfehler erscheint der eingefügte Text in Form von "<!--4DVAR meinevar--> : ## Fehler # Fehlercode".
Hinweise:
Sie können den Inhalt eines Feldes vom Typ Bild anzeigen. Ausserdem lässt sich der Inhalt einer Variablen vom Typ Bild anzeigen, jedoch ausschliesslich im kontextuellen Modus. Dagegen lässt sich der Inhalt eines Array-Elements vom Typ Bild weder im kontextuellen noch im nicht kontextuellen Modus anzeigen.
Da HTML eine textorientierte Anwendung ist, arbeiten Sie normalerweise mit Textvariablen. Sie können aber auch Variablen vom Typ BLOB einsetzen und so die Begrenzung auf 32 000 Zeichen umgehen, die für Textvariablen gilt. Dazu genügt es, das BLOB im Modus Text without length zu generieren.
Beispiele zur Verwendung von 4DVAR finden Sie im Abschnitt 4D Objekte und HTML Objekte verbinden.
4DHTMLVAR
Syntax: <!--4DHTMLVAR MeineVar-->
Mit 4DHTMLVAR können Sie eine Variable oder einen 4D Ausdruck bewerten und als HTML Ausdruck in eine Seite einfügen. Diese Marke erzeugt dieselbe Wirkung wie <!--4DVAR meine var-->, wenn meinevar mit dem ASCII Code 1 beginnt (siehe oben).
Beispiel: Nachfolgend sehen Sie, wie sich das Einfügen der 4D Textvariablen meinevar mit den verfügbaren 4D Ausdrücken auswirkt:
Wert von meinevar | 4D Ausdruck | Einfügen in die Web Seite |
meinevar:="<B>" | <!--4DVAR meinevar--> | <B> |
meinevar:=Char(1)+"<B>" | <!--4DVAR meinevar--> | <B> |
meinevar:="<B>" | <!--4DHTMLVAR meinevar--> | <B> |
Bei einem Bewertungsfehler erscheint der eingefügte Text in Form von "<!--4DHTMLVAR meinevar--> : ## Fehler # Fehlercode".
Hinweise:
Die Ausführung einer 4D Methode mit 4DVAR richtet sich nach dem Wert des Attributs, das in den Methodeneigenschaften unter "Zugang per 4DACTION, 4DMETHOD und 4DSCRIPT" eingestellt wurde. Weitere Informationen dazu finden Sie im Abschnitt Sicherheit der Verbindung.
Die Variable vom Typ Text sollte den Zeichensatz ISO Latin-1 verwenden. Weitere Informationen dazu finden Sie unter der Funktion Mac to ISO.
4DSCRIPT/
Syntax: <!--4DSCRIPT/MeineMeth/MeinParam-->
Mit 4DSCRIPT können Sie beim Senden von statischen HTML Seiten 4D Methoden ausführen. Gibt es in einer statischen Seite <!--4DSCRIPT/MeineMeth/MeinParam--> als HTML Kommentar, wird die Methode MeineMeth mit dem Parameter MeinParam als ein String in $1 ausgeführt. Beim Laden der HTML Seite ruft 4D sofern vorhanden die Datenbankmethode On Web Authentication auf. Gibt diese Wahr zurück, führt 4D die Methode aus.
Die Methode gibt in $0 Text zurück. Beginnt der String mit dem ASCII Code 1, wird er als HTML betrachtet. Dasselbe Prinzip gilt auch für Variablen.Hinweis: Die Ausführung einer Methode mit 4DSCRIPT hängt nicht von der Option "Benutze 4DVAR Kommentare anstatt Klammern" ab, die im Dialogfenster Methodeneigenschaften definiert wird. Weitere Informationen dazu finden Sie im Abschnitt Sicherheit der Verbindung.
Der Inhalt der Seite wird analysiert, wenn der Befehl SEND HTML FILE (.htm, .html, .shtm, .shtml) oder SEND HTML BLOB (blob vom Typ Text/html) aufgerufen wird.
Beachten Sie, dass die Analyse im nicht kontextuellen Modus auch erfolgt, wenn eine URL auf eine Datei mit der Endung ".shtm" oder ".shtml" zeigt, zum Beispiel http://www.server.com/dir/page.shtm).
Hinweis: Im kontextuellen Modus wird die Methode im Kontext ausgeführt.
Fügen Sie zum Beispiel den Kommentar "heute ist der <!--4DSCRIPT/MYMETH/MYPARAM-->" in eine statische Seite ein. Beim Laden der Seite ruft 4D sofern vorhanden die Datenbankmethode On Web Authentication auf, dann die Methode MeineMeth und übergibt den String "/MeinParam" als Parameter $1.
Die Methode gibt in $0 Text zurück, zum Beispiel "31.12.99", der Ausdruck "heute ist der <!--4DSCRIPT/MeineMeth/MeinParam>" also zu "Heute ist der 31.12.99".
Die Methode MeineMeth lautet:
C_TEXT($0) `Dieser Parameter muss immer angegeben sein C_TEXT($1) `Dieser Parameter muss immer angegeben sein $0:=String(Current date)
Wichtig: Sie müssen in der aufgerufenen Methode immer die Parameter $0 und $1 angeben.
Hinweis: Eine Methode, die über 4DSCRIPT aufgerufen wird, darf keine Elemente der Oberfläche aufrufen, wie DIALOG, ALERT... .
Da 4D Methoden in ihrer eigenen Reihenfolge erscheinen, lässt sich unabhängig vom Modus eine Methode aufrufen, die den Wert von vielen Variablen setzt, auf die später im Dokument verwiesen wird.
Hinweis: Sie können in eine statische Seite beliebig viele <!--4DSCRIPT...--> Kommentare einfügen.
Hinweis zur Kompatibilität: In früheren 4D Versionen liess sich derselbe 4D Ausdruck, nämlich 4DACTION als URL, z.B. http://meinserver/4DACTION/meth), und als HTML Kommentar (<!--4DACTION/meth-->) in eine statische Seite einfügen. Da das zu Verwechslungen führen konnte, enthält 4D ab Version 6.7 den neuen 4D Ausdruck 4DSCRIPT für Kommentare. Das macht die Verwendung eindeutig. 4DSCRIPT wird ausschliesslich als HTML Kommentar eingesetzt (<!--4DSCRIPT/meth-->). Er hat dieselbe Auswirkung wie <!--4DACTIONmeth. Die Anweisung 4DACTION gilt nun nur noch für den Einsatz in der URL.
4DINCLUDE
Syntax: <!--4DINCLUDE Pfad-->
Mit 4DINCLUDE können Sie in eine HTML Seite den Hauptteil einer anderen HTML Seite einfügen, die mit dem Parameter Pfad bezeichnet ist. Der Hauptteil einer HTML Seite bezeichnet alles, was innerhalb der Ausdrücke <BODY> und </BODY> steht.
Der Kommentar <!--4DINCLUDE--> ist besonders hilfreich in Verbindung mit dem Test (<!--4DIF-->) oder den Schleifen (<!--4DLOOP-->). Er ist auch praktisch, um Banner nach einem bestimmten Kriterium oder zufällig einzufügen.
4D analysiert die aufgerufene Seite im Moment des Einfügens, unabhängig vom Modus und der Endung des Dateinamens, und fügt dann den evtl. geänderten Inhalt in die Seite ein, von der der Aufruf 4DINCLUDE ausgeht.
Eine Seite, die über den Kommentar <!--4DINCLUDE--> eingefügt wurde, wird im Web Cache genauso platziert wie die Seiten, die über eine URL angefordert oder über den Befehl SEND HTML FILE gesendet wurden.
Übergeben Sie in Pfad den Zugriffspfad des einzufügenden Dokuments. Beachten Sie, dass sich bei Aufrufen mit 4DINCLUDE der Pfad nach dem Dokument richtet, das gerade analysiert wird, d.h. nach dem Hauptdokument. Verwenden Sie den Schrägstrich (/) als Trenner zwischen den Dokumenten und die zwei Punkte (..), um in der Hierarchie eine Ebene höher zu gehen (HTML Syntax).
Sie können <!--4DINCLUDE Pfad--> innerhalb einer Seite unbegrenzt verwenden. Die Aufrufe von <!--4DINCLUDE Pfad--> sind jedoch nur auf einer Ebene möglich. Sie können also nicht den Kommentar <!--4DINCLUDE meindok3.html--> in den Hauptteil der Seite meindok2.html einfügen, die wiederum von <!--4DINCLUDE meindok2--> aufgerufen wird, welches in meindok1.html eingefügt ist. 4D prüft außerdem, dass die Einfügungen nicht rekursiv sind.
Bei einem Fehler erscheint der eingefügte Text in Form von
"<!--4DINCLUDE Pfad--> :Dokument kann nicht geöffnet werden".
Hinweis: Wird im kontextuellen Modus eine Seite über einen 4D Ausdruck {meineSeite.html} aus einem Bereich mit statischem Text eingefügt, werden evtl. darin enthaltene Kommentare 4DINCLUDE ignoriert.
Beispiele
<!--4DINCLUDE Unterseite.html-->
<!--4DINCLUDE Ordner/Unterseite.html-->
<!--4DINCLUDE ../Ordner/Unterseite.html-->
4DIF, 4DELSE und 4DENDIF
Syntax: <!--4DIF expression--> <!--4DELSE--> <!--4DENDIF-->
Der Kommentar <!--4DIF expression ermöglicht in Verbindung mit den Kommentaren <!--4DELSE--> (optional) und <!--4DENDIF-->, HTML Code auf bedingte Weise auszuführen.
Der Parameter expression kann jeden gültigen 4D Ausdruck enthalten, der einen booleschen Wert zurückgibt. Er muss in Klammern stehen und die Syntaxregeln von 4D berücksichtigen.
Die Blöcke <!--4DIF expression> ... <!--4DENDIF--> können ineinander verschachtelt sein. Analog zu 4D muss jeder mit <!--4DIF expression geöffnete Kommentar mit <!--4DENDIF--> geschlossen werden.
Bei einem Interpretationsfehler wird zwischen <!--4DIF --> und <!--4DENDIF--> anstelle des Inhalts der Text "<!--4DIF expression-->: Ein boolescher Ausdruck wurde erwartet" eingefügt.
Entspricht nicht jedem <!--4DENDIF--> ein <!--4DIF -->, wird anstelle des Inhalts der Text "<!--4DIF expression-->: 4DENDIF wurde erwartet" eingefügt.
Beispiel
Nachfolgendes Beispiel zeigt Code aus einer statischen HTML Seite, die je nach Ergebnis des Ausdrucks vname#"" eine andere Bezeichnung zeigt:
<BODY>
...
<!--4DIF (vname#"")-->
Namen, die mit <!--4DVAR vname--> beginnen.
<!--4DELSE-->
Es wurde kein Name gefunden.
<!--4DENDIF-->
...
</BODY>
4DLOOP und 4DENDLOOP
Syntax: <!--4DLOOP Bedingung--> <!--4DENDLOOP-->
Mit diesem Kommentar können Sie den Teil eines HTML Codes so oft wiederholen wie die Bedingung erfüllt ist. Der Teil wird begrenzt durch <!--4DLOOP--> und <!--4DENDLOOP-->. Sie können ineinander verschachtelt sein. Analog zu 4D muss jeder mit <!--4DLOOP Bedingung--> geöffnete Kommentar mit <!--4DENDLOOP--> geschlossen werden.
Es gibt drei Bedingungstypen:
<!--4DLOOP [Tabelle]-->
Diese Syntax führt für jeden Datensatz der aktuellen Auswahl von Tabelle eine Schleife im laufenden Prozess aus. Der Teil des HTML Codes zwischen den beiden Kommentaren wird für jeden Datensatz der aktuellen Auswahl wiederholt.
Der HTML Code:
<!--4DLOOP [Personen]-->
<!--4DVAR [Personen]Name--> <!--4DVAR [Personen]Vorname--><BR>
<!--4DENDLOOP-->
... lässt sich folgendermaßen in 4D Code übersetzen:
FIRST RECORD([Personen]) While(Not(End selection([Personen]))) ... NEXT RECORD([Personen]) End while
Hinweis: Verwenden Sie 4DLOOP mit einer Tabelle, werden die Datensätze nur im Lesemodus geladen
<!--4DLOOP array-->
Diese Syntax führt für jedes Element des Array eine Schleife aus. Der laufende Zähler des Array erhöht sich mit jeder Wiederholung dieses Teils des HTML Codes.
Hinweis: Diese Syntax ist für zweidimensionale Arrays nicht verwendbar. Die Lösung: eine Methode mit verschachtelten Schleifen kombinieren.
Der HTML Code:
<!--4DLOOP arr_names-->
<!--4DVAR arr_names{arr_names}--><BR>
<!--4DENDLOOP-->
... lässt sich folgendermaßen in 4D Code übersetzen:
For ($Elem;1;Size of array(arr_names)) arr_names:=$Elem ... End for
<!--4DLOOP Methode-->
Diese Syntax führt eine Schleife aus, solange die Methode Wahr zurückgibt. Sie lässt einen Parameter vom Typ Lange Ganzzahl zu. Sie wird das erste Mal mit dem Wert 0 (Null) aufgerufen, damit evtl. eine Initialisierung durchgeführt werden kann. Dann wird sie sukzessiv mit den Werten 1, 2, 3... aufgerufen, solange sie Wahr zurückgibt.
Aus Sicherheitsgründen kann die Datenbankmethode On Web Authentication einmal direkt vor der Initialisierung aufgerufen werden. Wird die Authentifizierung bestätigt, findet die Initialisierungsphase statt.
Warnung: Damit die Datenbank kompilierbar ist, müssen innerhalb der Methode unbedingt die Compilerbefehle C_BOOLEAN($0) und C_LONGINT($1) deklariert sein.
Beispiel
Der HTML Code:
<!--4DLOOP meine_methode-->
<!--4DVAR var--> <BR>
<!--4DENDLOOP-->
... lässt sich folgendermaßen in 4D Code übersetzen:
If(AuthenticationWebOK) If(meine_methode(0)) $counter:=1 While(meine_methode($counter)) ... $counter:=$counter+1 End while End if End if
Die Methode meine_methode lautet:
C_LONGINT($1) C_BOOLEAN($0) If($1=0) `Initialisierung $0:=True Else If($1<50) ... var:= ... $0:=True Else $0:=False `Schleife wird beendet End if End if
Bei einem Interpretationsfehler wird zwischen <!--4DLOOP--> und <!--4DENDLOOP--> der Text "<!--4DLOOP expression-->:Beschreibung" eingefügt.
Folgende Fehlerbeschreibungen sind möglich:
- Ein derartiger Ausdruck wurde nicht erwartet (generischer Fehler);
- Ungültiger Tabellenname (Fehler im Tabellennamen);
- Es wurde ein Array erwartet (die Variable ist kein Array bzw. ein zweidimensionales Array).
- Die Methode existiert nicht;
- Syntaxfehler (beim Ausführen der Methode);
- Zugriffsfehler (Rechte nicht ausreichend für Zugriff auf Tabelle oder Methode).
- 4DENDLOOP wird erwartet (die Anzahl von <!--4DENDLOOP--> ist nicht gleich der Anzahl von <!--4DLOOP-->).
Referenz
4D Objekte mit HTML Objekten verbinden, Kontextueller Modus, URLs und Form Actions.