[ 1 ] [
2 ] [ 3 ] [ 4 ]
[ 5 ]
Die Methode Showkalender
Variable, die in den Templates später angezeigt werden sollen, müssen als PUBLIC definiert sein! Wir definieren ein Array paMonth, welches entsprechend der Anzeige 6 Wochen a 7
Tage beinhaltet (paMonth[6,7]). Dieses Array wird dann programmatisch entweder mit einem Leerzeichen oder mit dem HTML-Code des Tages-Buttons gefüllt. Desgleichen geschieht mit den Wochenbuttons im Array paWoche
PRIVATE pcDatString,pcNewMonJahr, pcMonJahrLabel
PRIVATE ARRAY paMonth, paWoche
LOCAL lcButton, lcMonJahr,lnMonth,lnYear,lcRetHtml,;
ldDatum, ldStart, ldEnd, lcTag, lnWochNr, ldMonStart
*-- Arrays löschen
DIMENSION paMonth[1]
paMonth = .F.
DIMENSION paWochw[1]
paWoche = .F.
*-- Und Dimensionen einstellen
DIMENSION paMonth[7,6]
DIMENSION paWoche[6]
Wir lesen die übergebenen Parameter:
lcButton = oWebApp.GetFormVar("Button")
lcMonJahr = oWebApp.GetFormVar("MonJahr")
lnMonth = VAL(SUBSTR(lcMonJahr,1,2))
lnYear = VAL(SUBSTR(lcMonJahr,3,4))
und Bestimmung von Start- und Endedatum für die Anzeige der Veranstaltungen je nach gewähltem Button sowie der Festlegung des PUBLIC-Strings pcDatString für die Anzeige auf der
HTML-Seite
DO CASE
CASE ALLTRIM(lcButton) = '<'
*--Rückwärts-Button wurde geklickt
lnAktMonth = lnMonth - 1
lnAktYear = lnYear
IF lnAktMonth = 0
lnAktMonth = 1
lnAktYear = lnYear - 1
ENDIF
ldDatum = DATE(lnAktYear,lnAktMonth,1)
ldStart = ldDatum
ldEnd = ldDatum + (GOMONTH(ldDatum,1) - ldDatum) -1
pcDatString = CMONTH(ldDatum) + ' ' + ALLTRIM(STR(YEAR(ldDatum)))
CASE ALLTRIM(lcButton) = '>'
*--Vorwärts-Button wurde geklickt
lnAktMonth = lnMonth + 1
lnAktYear = lnYear
IF lnAktMonth = 13
lnAktMonth = 1 lnAktYear = lnYear
+ 1
ENDIF
ldDatum = DATE(lnAktYear,lnAktMonth,1)
ldStart = ldDatum
ldEnd = ldDatum + (GOMONTH(ldDatum,1) - ldDatum) -1
pcDatString = CMONTH(ldDatum) + ' ' + ALLTRIM(STR(YEAR(ldDatum)))
CASE ISDIGIT(lcButton)
*--Ein Tages-Button wurde gewählt
lcTag = STRTRAN(lcButton,' ','0')
ldDatum = DATE(lnYear,lnMonth,VAL(lcTag))
ldStart = ldDatum
ldEnd = ldDatum
pcDatString = ALLTRIM(STR(DAY(ldDatum)))+'.
' + CMONTH(ldDatum) + ' ' + ALLTRIM(STR(YEAR(ldDatum)))
CASE 'Woche' $ lcButton
*-- Ein Wochen-Button wurde gewählt
lnWochnr = VAL(SUBSTR(lcButton,7,1))
ldMonStart = DATE(lnYear,lnMonth,1)
ldDatum = ldMonStart - DOW(ldMonStart) + 1 + 7*(lnWochNr - 1)
ldStart = lddatum
ldEnd = ldDatum + 6
pcDatString = DTOC(ldStart) + "
bis " + DTOC(ldEnd)
OTHERWISE
*-- Kein Button wurde gewählt (1. Aufruf)
IF EMPTY(lcMonJahr)
ldDatum = DATE(YEAR(Date()),MONTH(Date()),1)
ELSE
ldDatum = DATE(lnYear,lnMonth,1)
ENDIF
*-- Alle Veranstaltungen des Monats anzeigen
ldStart = ldDatum
ldEnd = ldDatum + (GOMONTH(ldDatum,1) - ldDatum)
pcDatString = CMONTH(ldDatum) + ' ' + ALLTRIM(STR(YEAR(ldDatum)))
ENDCASE
Selektion der im oben gewählten Zeitraum liegenden Veranstaltungenin den temporären Cursor tmpVeranst
lcVeranstTabelle = ADDBS(THIS.cDataPath)+"veranstaltungen.dbf"
SELECT veranstaltungen.idveranst,;
veranstaltungen.datum,;
veranstaltungen.Uhrzeit,;
veranstaltungen.veranst,;
veranstaltungen.Ort,;
veranstaltungen.Kosten;
FROM &lcVeranstTabelle ;
WHERE BETWEEN(Datum,ldStart,ldEnd);
ORDER BY DATUM;
INTO CURSOR tmpVeranst
Wir initialisieren die HTML-Ausgabe ...
oWebApp.oHtml.reset()
...lesen das Templatefiles für die Veranstaltungsseite ein...:
lcRetHtml = oWebApp.oHtml.GetTemplateFile("veranstaltungen.htm")
… und ersetzten die HTML-Tabelle (ID=Veranstaltungen) im Template durch die Werte aus dem Cursor
SELECT tmpVeranst
lcRetHtml = oWebApp.oHtml.MergeTable(lcRetHtml,"Veranstaltungen")
USE IN tmpVeranst
Jetzt füllen wir entsprechend dem gewählten Monat die Arrays paMonth und paWoche...
*-- Bestimmung der Kalenderbuttons
lnSpalte = 1
lnZeile = 1
lnStartPos = DOW(DATE(YEAR(ldDatum),MONTH(ldDatum),1))
lnAnzTage = GOMONTH(ldDatum,1) - ldDatum
*-- Die ersten Buttons sind leer (SPACE(1))
DO WHILE lnSpalte < lnStartPos
paMonth[lnSpalte,1] = " "
lnSpalte = lnSpalte + 1
ENDDO
*-- Jetzt kommen die Buttons
FOR lnCnt = 1 TO lnAnzTage
IF lnSpalte = 8
lnSpalte = 1
lnZeile = lnZeile + 1
ENDIF
paMonth[lnSpalte,lnZeile] = [<input type="submit" name="Button" value="] + STRTRAN(STR(lnCnt,2),' ','0')+[">]
lnSpalte = lnSpalte + 1
ENDFOR
*-- Den Rest ebenfalls auf SPACE(1) setzen
DO WHILE lnSpalte < 9 AND lnZeile < 7
IF lnSpalte = 8
lnSpalte = 1
lnZeile = lnZeile + 1
IF lnZeile = 7
EXIT
ENDIF
ENDIF
paMonth[lnSpalte,lnZeile] = " "
lnSpalte = lnSpalte + 1
ENDDO
*-- Und die WochenButtons
FOR lnCnt = 1 TO 6
paWoche[lnCnt] = [<input type="submit" name="Button" ]+;
[value="Woche ]+ALLTRIM(STR(lnCNt))+[">]
ENDFOR
Jetzt erstellen wir noch PUBLIC-Variablen für den neuen (nun aktuellen) Monat sowie für die Anzeige des gewählten Zeitraums
pcNewMonJahr = STRTRAN(STR(MONTH(ldDatum),2),' ','0') +;
ALLTRIM(STR(YEAR(ldDatum)))
pcMonJahrLabel = CMONTH(ldDatum) + ' ' + ALLTRIM(STR(YEAR(ldDatum)))
Über die Merge-Funktion werden die Platzhalter im HTML-Template durch die realen Werte ausgetauscht
lcRetHtml = oWebApp.oHtml.Merge(lcRetHtml)
Und der resultierende HTML-Code wird an die Ausgabe angehängt
oWebApp.oHtml.AppendHtml(lcRethtml)
Die Methode Browse
Hier wird die gewünschte UserID gelesen, der entsprechende SQL-Befehl ausgeführt, das Templatefile eingelesen und über Mergetable und Merge die Platzhalter durch die aktuellen
Werte ersetzt. Anschließend wird das Ergebnis zurückgegeben.
LOCAL lcUser,lcPassword,lcVeranstTabelle,lcIDUser,lnIDUser
lcVeranstTabelle = ADDBS(THIS.cDataPath)+"veranstaltungen.dbf"
lcIDUser = oWebApp.GetFormVar("UserID")
lnIDUser = IIF(EMPTY(lcIDUser),0,VAL(lcIDUser))
WITH oWebApp
.oHtml.reset()
IF lnIDUser # 0
lcSelect = "SELECT * FROM "+lcVeranstTabelle + ;
"
WHERE iduser = " + ALLTRIM(STR(lnIDUser)) +;
" INTO CURSOR tmpVeranst"
ELSE
lcSelect = "SELECT * FROM "+lcVeranstTabelle +;
" INTO CURSOR tmpVeranst"
ENDIF
&lcSelect
lcRetHtml = .oHtml.getTemplateFile("BrowseVeranstaltungen.htm")
lcRetHtml = .oHtml.MergeTable(lcRetHtml,"Veranstaltungen")
lcRetHtml = .oHtml.Merge(lcRetHtml)
.oHtml.AppendHtml(lcRetHtml)
ENDWITH
Die Methode Edit
Der Datensatz mit der übergebenen ID wird gesucht, das Templatefile für die Edit-Seite geladen und die Platzhalter durch die Feldinhalte ersetzt (VALUES der Elemente des
Formulars)
LOCAL lnIDVeranst, llError, lcRetHtml, lcVeranstTabelle
lnIDVeranst = VAL(oWebApp.GetFormVar("VeranstID"))
lcVeranstTabelle = ADDBS(THIS.cDataPath)+"veranstaltungen.dbf"
SELECT *;
FROM &lcVeranstTabelle;
WHERE idVeranst = lnIDVeranst;
INTO CURSOR tmpVeranst
llError = .F.
IF _TALLY > 0
WITH oWebApp.oHtml
.reset()
lcRetHtml = .getTemplateFile("EditVeranstaltung.htm")
lcRetHtml = .Merge(lcRetHtml)
.AppendHtml(lcRetHtml)
ENDWITH
ELSE
ERROR "Zu bearbeitender Datensatz wurde nicht gefunden"
llError = .T.
ENDIF
Die Methode Save
In der Methode Save werden die Werte der Formularfelder ausgelesen und per SQL-Update in die Tabelle geschrieben. Anschließend wird die Methode Browse erneut aufgerufen.
LOCAL lcVeranst, lnIDVeranst,ldDatum, lcUhrzeit, lcOrt,lcKostem,lcButton, lcVeranstTabelle
lnIDVeranst = VAL(oWebApp.GetFormVar("VeranstID"))
ldDatum = CTOD(oWebApp.GetFormVar("Datum"))
IF EMPTY(ldDatum)
ERROR "Das Datum bitte wie folgt eingeben: TT.MM.JJJJ"
RETURN
ENDIF
lcUhrzeit = ALLTRIM(oWebApp.GetFormVar("Uhrzeit"))
lcVeranst = ALLTRIM(oWebApp.GetFormVar("Veranst"))
lcOrt = ALLTRIM(oWebApp.GetFormVar("Ort"))
lcKosten = ALLTRIM(oWebApp.GetFormVar("Kosten"))
lcButton = UPPER(ALLTRIM(oWebApp.GetFormVar("Button")))
lcVeranstTabelle = ADDBS(THIS.cDataPath)+"veranstaltungen.dbf"
IF lcButton = "SPEICHERN"
UPDATE &lcVeranstTabelle ;
SET Datum = ldDatum,;
Uhrzeit = lcUhrzeit,;
Veranst = lcVeranst,;
Ort = lcOrt,;
Kosten = lcKosten;
WHERE idVeranst = lnIDVeranst
ENDIF
oWebApp.oVeranstaltungen.browse()
Die letzten Vorbereitungen vor dem ersten Start...
Damit unser Webserver auch seine Informationen über Applikation - Pfade usw. erhält, müssen wir noch ein paar Einträge in die Registry machen.
Und ab !!!
..aber erst einmal ohne Browser. Da wir in einer COM-Applikation nur schwierig debuggen können, starten wir zunächst unser MAIN-Programm, in dem wir die Browser-Aufrufe
simulieren. So lassen sich die meisten Fehler hervorragend finden TIP: Setzten Sie einen Haltepunkt auf oWebApp.lError. So hält der Debugger gleich an, wenn
irgendwo ein Fehler auftritt.
PUBLIC oWebApp
CLEAR
CD C:\INETPUB\SCRIPTS\DEVCON
IF TYPE('oWebApp')='O' AND !ISNULL(oWebApp)
*Objekt schon da
ELSE
oWebApp = NEWOBJECT('DEVCON','KLASSEN\WEBAPP')
ENDIF
IF VART(oWebApp) = 'O'
lcHtml = oWebApp.process("Method=Veranstaltungen~Showkalender","",0)
*!* lcHtml = oWebApp.process("Method=Veranstaltungen~browse"+;
"&Userid=2","",0)
*!* lcHtml = oWebApp.process("Method=Veranstaltungen~edit"+;
"&Veranstid=5","",0)
*!* lcHtml = oWebApp.process("Method=Veranstaltungen~save&veranstid=5"+;
"C:\Temp\webini.ini",0)
*!* lcHtml = oWebApp.process("Method=Veranstaltungen~browse"+;
"&Userid=2","",0)
? lcHtml
ELSE
= MESSAGEBOX('Kein oWebApp vorhanden')
ENDIF
clear all
close tables all
Wenn alles fehlerfrei läuft, erstellen Sie eine EXE-Datei, starten den Browser und geben folgendes ein:
http://localhost/scripts/inetpub/devcon.dll/devcon.devcon.process?veranstaltungen~showkalender
[ 1 ] [
2 ] [ 3 ] [
4 ] [ 5 ]
|