[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5

Html:

Die Hilfsklasse Html enthält alle Methoden und Eigenschaften zur Bearbeitung und Ausgabe von HTML-Code. 
Eigenschaft Bedeutung
cHtml In dieser Eigenschaft wird der zurückzugebende HTML-Code abgespeichert
cTemplatePath Pfad zu den HTML-Templates 
cHttpHeade Der Header, der vor dem eigentlichen HTML-Output zurückgesendet wird

Methoden Beschreibung
getTemplateFile Gibt das HTML-Template mit dem als Parameter angegebenen Namen als String zurück
reset Setzt cHtml aufLeerstringzurück und füllt cHttpHeader mit dem Standardwert
merge Ersetzt alle <%= VFPAusdruck %> im übergebenen Text durch die evaluierten Werte und gibt das Ergebnis als Stringzurück
mergetable Ersetzt eine HTML-Tabelle mit Kopfzeile und einer Datenzeile mit Platzhaltern (siehe Merge) durch HTML-Tabelle mit Kopfzeile und allen Datenzeilen des aktuellen ALIAS mit Ihren richtigen Werten
appendhtml Addiert den übergebenen Text an cHtml, wenn in der vorherigen Verarbeitung kein Fehler aufgetreten ist
writehtml Erzeugt aus cHttpHeaderund cHtml den endgültigen Output

Snapin:

Die Hilfsklasse Snapin dient als Basisklasse für benutzerspezifische Module. In Ihren Ableitungen wird der individuelle Programmcode der jeweiligen Anwendungsmodule (hier: Veranstaltungskalender) untergebracht. 

Eigenschaft Bedeutung
cDataPath Modulspezifischer Datenpfad. Wird im Postinit gefüllt

Methoden Beschreibung
CheckTables Überprüft das Vorhandensein der für das Modul benötigten Tabellen. Sind diese nicht vorhanden, wird „CreateTables“ aufgerufen (In dieser Basisklass ist diese Funktion leer; sie wird erst in der Ableitung gefüllt)
CreateTables Legt die für das Modul benötigten Tabellen an

Die Process-Methode

Die zentrale Einsprungmethode ist, wie bereits oben erwähnt, die Methode Process aus der Klasse ismain. Diese wollen wir jetzt einmal etwas näher betrachten:

    LPARAMETERS tcBEFEHL, tcINIDATEI, tnDISPATCHER
    LOCAL lcRetHtml,lcOldSafety,lcMethod,lcSnapIn,lcSnapInObj
      lcPageName, lcMethodCall
    *-- Anwendung soll im Speicher bleiben
    tnDispatcher=0

Hier werden die oben erwähnten drei Parameter in Empfang genommen. tcBefehl enthält den kompletten URL-Encodierten String ab dem „?“ , tcIniDatei enthält den Namen der temporären INI-Datei und tnDispatcher ist die Steuervariable, deren Wert entscheidet, ob die Anwendung nach Abarbeitung im Speicher bleiben soll.

Jetzt werden die Werte aus der INI-Datei ausgelesen und in die Eigenschaften von oServerVars geschrieben , sowie der URL-Encoded Parameterstring aufgesplittet und als Name/Wert-Paare in das Array aFormVars geschrieben


    this.lError = .F.
    this.cIni= alltrim(tcINIDATEI)

    THIS.oServerVars.GetVars()
    this.makeFormVars(tcBEFEHL)

Als nächstes holen wir uns den Parameter “METHOD” aus dem Array aFormVars und splitten ihn in „Snapin“ und „Methoden“-Bereich auf.

    lcMethodCall = THIS.GetFormVar("METHOD")
    IF EMPTY(lcMethodCall)
      ERROR "Fehlender Parameter METHOD"
    ENDIF
    IF ATC("~",lcMethodCall) <= 1
      ERROR "Keine Methode zum Snapin" + lcAppString + "angegeben"
    ENDIF
    lcSnapIn = LEFT(lcMethodCall,ATC("~",lcMethodCall)-1)
    lcMethod = SUBSTR(lcMethodCall,ATC("~",lcMethodCall)+1)
    THIS.oHtml.reset()
    lcSnapInObj= "THIS.o"+lcSnapIn

Nun überprüfen wir, ob das Snapin vorhanden ist und eine Methode wie als Parameter übergeben enthält. Wenn ja, wird diese ausgeführt.

    IF TYPE(lcSnapInObj)="O" AND !ISNULL (lcSnapInObj)
      loSnapIn = &lcSnapInObj
      *--Gibt es die Methode ?
      IF PEMSTATUS(loSnapIn,lcMethod,5)
        EVAL("loSnapIn."+lcMethod+"()")
      ELSE
        ERROR "Methode " + lcMethod + " existiert nicht in " + lcSnapI
        ENDIF
      ELSE
        ERROR "SnapIn " + lcSnapIn + " existiert nicht!"
    ENDIF

In der Methode lcMethod wurde die HTML-Ausgabe erstellt. Wir schließen die Tabellen und geben das Ergebnis aus.

    CLOSE TABLES ALL
    RETURN THIS.oHtml.writeHtml()

Durch diese Methodik können beliebige “Snapins” angehängt werden. Es genügt, eine Klasse vom Typ „Snapin“ in die Applikationsklasse zu ziehen. Diese hängt sich dann automatisch an oWebApp an und kann sofort über die Process-Methode angesprochen werden.

Was wir bauen wollen...

Der Veranstaltungskalender soll folgende Funktionalität haben: Auf der Startseite sieht der Aufrufer zunächst einen Kalender mit Buttons für jeden Tag sowie für die jeweiligen Wochen. Weitere Buttons sind für das monatsweise Vorwärts-undRückwartsblättern vorhanden. 

 

Unter dem Kalender werden die Veranstaltungen des aktuellen Monats als Tabelle ausgegeben.

 

Darunter lässt sich eine „Benutzerid“ eingeben.

 

Durch klicken auf den „Browse“ –Button wird eine neue Seite angezeigt, in der nur die Veranstaltungen als Tabelle aufgeführt werden, bei denen die BenutzerID (Veranstalter) gleich der eingegebenen ist.

 

Hinten in der Tabelle gibt es einen Link „Bearbeiten“. Wird dieser gewählt, soll eine Seite mit einem HTML-Formular aufgehen, in der der Datensatz angezeigt und editiert werden kann:

 

[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5