Grundlagen für DFML Formulare

  • Teil 1 - Grundlagen und Datenspeicherung mit DFML


    Grundlagen


    Prinzipiell sind DFML Formulare nichts anderes als HTML Seiten, mit ein bisschen Tobit-DFML Code. HTML Kenntnisse erleichtern das Erstellen solcher Formulare ungemein. ;)


    Grundsätzlich gibt es 2 verschiedene Arten von DFML Formularen. Solche die versendet werden und solche, die Daten speichern sollen.


    Den Unterschied erkennt man ganz leicht, wenn man sich diese Formulare mal im Bearbeiten Modus anschaut. Bei denen die versendet werden, wird der gesamte HTML Code mitgesendet. Bei denen die Daten speichern, besteht das eigentliche Formular nur aus den Textvariablen und -werten. Wo aber kommt die Form her, die Schaltflächen und Eingabefelder?


    Die Formulare die versendet werden, können einfach als solche erstellt und ins Ressourcen->Formulare Verzeichnis abgelegt werden.


    Formulare die Daten speichern sollen werden anders aufgebaut. Hier erstellt man im ARchive Ressource->Formulare->Applikationen entsprechende Dokumente.


    Wenn man ein neues DFML Formular erstellt, sollte man eine neue Nachricht / ein neues Dokument öffnen, einen Namen vergeben und dieses gleich Speichern. Anschließend wieder öffnen und nun mit dem Programmieren starten. Der Hintergrund ist, dass eingebettete @@-Befehle beim ersten Speichern ausgeführt werden, aber nicht beim wiederholten Speichervorgang.


    Gehen wir ein Beispiel an; ein Formular, welches Daten speichern soll.
    Wir öffnen eine neue, leere Nachricht und stellen bei dieser den Textmodus ein. Als Namen setzen wir "DFML-TEST" (bitte diesen verwenden, ist im weiteren Verlauf wichtig).


    Wir öffnen es wieder und fügen "ein bisschen" HTML Code ein, auf den ich an dieser Stelle nicht weiter eingehen werde (ich sagte ja, HTML Kenntnisse sind von Vorteil ;) ).


    Auch die Details der @@-Befehle werden hier nicht weiter erläutert, diese kann man aus der InfoCenter Hilfe (F1->David Befehle) entnehmen.


    Folgend der gesamte Code des DFML-Test Formulars, diesen bitte kopieren und einfügen. Unterhalb des Codes mache ich weiter mit der Beschreibung und dem generellen Ablauf.



    So, ne ganze Menge Stuff hier, aber das meiste ist wie gesagt HTML Code. Schauen wir uns mal die David-spezifischen Dinge an.


    Zunächst fallen natürlich diese doppelten #-Zeichen auf. Und genau dabei handelt es sich immer um David-Variablen, entweder Formulardaten oder vordefinierte Variablen und Includes aus dem Ressourcen->Formulare->Include Verzeichnis.



    Auch bei DFML Formularen hat man die Möglichkeit, mit Fallunterscheidungen zu arbeiten. Die erste Abfrage (If Form=Formular1) fragt ab, wie der Name des Formulars ist, welches aufgerufen wurde.
    So kann man sich eine einzige Datei im Archive Applikationen anlegen, darüber aber beliebig viele Formulare steuern!


    Der Code "If Startup=New" prüft, ob das Formular neu aufgerufen wurde oder ein bereits gespeichertes Formular ist. So kann man auch an dieser Stelle sehr gute Unterscheiden. An dieser Stelle könnte man z.B. die größe des Formulares anpassen, wenn auf dem bereits gespeicherten Formular mehr Felder erscheinen sollen, als auf einem neu anzulegenden.


    Auch kurz vor dem DFML Teil kann man soetwas wieder sehen. Hier werden verschiedene Buttons angezeigt, die entweder die folgend beschriebene "Erstellen-Funktion" oder die "Speichern-Funktion" aufrufen.



    Erstellen (erstes Speichern) von Formularen


    Gut, schauen wir uns nun den wirklich wichtigen Teil an, den DFML-Teil. Zunächst die besagte "Erstellen-Funktion".



    Wie man sieht, wird auch eine DFML-Anweisung mit einem HTML-ähnlichen Tag eingeleitet. Der vergebene Name muss dabei auch dem Namen (Attribut name="" des input-Fields) des Submit-Buttons entsprechen, der die Funktion aufrufen soll (in diesem Beispiel der Erstellen Button).
    Darauf folgen einige @@-Befehle (Datentyp,Zielarchiv,Betreff,Darstellung als DFML Formular).
    Unter dem letzten @@-Befehl (@@DFML) folgt der Text, der in die eigentliche Textdatei, also in das Formular geschrieben werden soll.


    Hier wird in eckigen Klammern der Name des Dokumentes im Applikationen Archive angelegt, gefolgt vom Befehl "FORM" und dem Namen des Bereichs in der Vorlage, welcher für das betreffenden Formular gelten soll (siehe oben, If Form=Formular1).


    Im Anschluss geben wir hier nur die Namen der Textvariablen an (name, mitarbeiter) und übergeben an diese die Werte der INPUT-Felder aus dem Formular (##feld_name##, ##feld_mitarbeiter##).


    Man könnte hier auch gleiche Namen benutzen, z.B. feld_name=##feld_name##. Ich habe es hier nur zur besseren Unterscheidung unterschiedlich definiert. Denn die Variablennamen (name, mitarbeiter) brauche ich, um die Vorbelegung der INPUT-Felder zu steuern.


    Darauf folgt nun noch ein Javascript Code, der zum Erstellen und Speichern von solchen Datenformularen notwendig ist. Diesen kann man immer 1:1 kopieren.


    Das Erstellen eines Formulares sollte damit schon funktionieren.



    Öffnen und erneutes Speichern von bereits erstellten Formularen


    Nun schauen wir uns an, wie man die gespeicherten Daten beim öffnen auch angezeigt bekommt, und wie man veränderte Daten wieder speichern kann.
    Das ganze ist eigentlich recht simpel. Zunächst ein Ausschnitt aus dem gesamten Code:


    Code
    ##IF STARTUP="NEW"##
      	Dieser Abschnitt wird nur beim erstellen/öffnen eines neuen Formulars angezeigt<br />
      	Name: <input name="feld_name" type="text" /><br />
    	##ELSE##
       	Dieser Abschnitt wird beim ändern eines Formulares angezeigt<br />
       	Name: <input name="feld_name" type="text" value="##name##" /><br />
       	Mitarbeiter: <input name="feld_mitarbeiter" type="text" value="##mitarbeiter##" /><br />
    ##ENDIF##


    Hier haben wir wieder eine Fallunterscheidung ob ein Formular neu erzeugt wird, oder ob es bereits gespeichert und aufgerufen wurde. Schauen wir uns das Input-Field "name=feld_name" einmal genauer an, das gibt es für beide Fälle:


    Code
    Erstellen:
    <input name="feld_name" type="text" />
    
    
    Speichern:
    <input name="feld_name" type="text" value="##name##" />


    Hier fällt auf, dass beim Speichern-Fall das Attribut "value=##name##" angegeben wurde. Damit wird ein Input-Field vorbelegt. Als Wert wird der Name der Textvariablen aus dem gespeicherten Formular übergeben (s.o., name=##feld_name##) und diese hat beim Speichern ja einen bestimmten Wert erhalten (sofern angegeben).
    Beim öffnen des Formulares wird also ganz einfach der Inhalt dieser Variablen im entsprechenden Input-Field angezeigt.


    Soweit zum öffnen und anzeigen, aber wie sieht es mit dem Speichern aus? Auch ganz einfach. Schauen wir uns dazu den Zweiten Part aus dem DFML-Teil an:


    Code
    <DFML name=SPEICHERN option=nosend> 
    	##SCRIPT language=JavaScript##
        	var DvDFML;
        	DvDFML=document.parentWindow.external;
        	DvDFML.forms[0].save();
        	DvDFML.close();
    	##/SCRIPT##
      </DFML>


    Wie man sieht, müssen wir hier lediglich ein Javascript angeben, auch dieses ist immer gleich und kann 1:1 kopiert werden. Es weist das Formular an, die Formulardaten zu speichern und das Formular dann zu schließen.
    Wichtig ist auch die DFML Option "option=nosend". Diese dient dazu, das senden des Formulares zu verhindern - denn wir wollen es ja nicht erneut verschicken, sonst würde ein weiteres Formular erzeugt werden.



    Hier noch ganz kurz der Code zum Abbrechen eines Formulares. Auch hier einfach die Option "option=nosend" angeben, dann wird das Formular nicht "versendet". Und da kein sonstiger Code angegeben wurde, passiert auch sonst nichts weiter.


    Code
    <DFML name=ABBRECHEN option=nosend>
      </DFML>


    Standardmäßig werden die DFML Formulare immer geschlossen, sobald ein DFML-Teil ausgeführt wird. Dieses kann man mit der Option "option=noclose" verhindern.



    Startformular anlegen
    Was jetzt natürlich noch fehlt ist die Möglichkeit, das ein solches Datenformular überhaupt erst einmal aufzurufen, wir haben ja lediglich den Code im Applikationen Archive.


    Auch das ist ganz einfach. Hierzu erzeugen wir wieder ein neues, leeres Dokument, diesmal im Archive "Ressourcen->Formulare" oder aber auch direkt im Zielverzeichnis, wo die erstellten Formulare gespeichert werden sollen.
    Ich persönlich mache es bei größeren Applikationen mit DFML immer so, dass ich einen Eintrag "Formularname Neu..." mit roten Betreff im Speicherarchive der Applikation erstelle und davon eine Verknüpfung ins "Ressourcen->Formulare" Archive lege. So kann man es direkt aus dem Datenverzeichnis starten (und hat dort auch das Original liegen), aber auch über die Schaltfläche "Formulare" im InfoCenter.


    Die Nachricht selbst bekommt lediglich die Startparameter als Inhalt, nämlich die Infos in den eckigen Klammern:


    Code
    [DFML-TEST, FORM="FORMULAR1", STARTUP="NEW"]


    Hier also auch wieder der Name des Dokuments im Applikationen Archive, der Name des Bereiches in dieser Datei und der Befehl, dass ein neues Formular erzeugt werden soll.


    Anmerkung
    Den Bereich ##IF FORM="FORMULAR1"## braucht man natürlich nur, wenn man mehrere Forms in einem Dokument steuern will. Willl man nur ein einfaches Daten-Formular erstellen, so läßt man die Fallunterscheidung einfach weg und gibt man im Dokument im Formulararchive statt dem vorstehenden Code einfach nur den Namen des Applikationsformulars an:


    Code
    [DFML-TEST]


    Schluß
    So, damit sollte jeder in der Lage sein, ein wenig mit DFML Datenformularen zu experimentieren.
    Da dies hier eine kleine Sammlung werden soll, hier bitte nur sinnvolle Tips und erweiterungen oder eigene Beiträge zum Thema verfassen. Fragen zum Thema in einem eigenen Thread erstellen und auf diesen Bezug nehmen.

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

    Einmal editiert, zuletzt von Teardrop ()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!