Die dFPUG-Internetklassenbibliotheken

von Rainer Becker

Unterstützt werden von Visual FoxPro nur die Client-Betriebssysteme Windows und Windows NT Workstation in den verschiedenen Versionen. Nicht oder nicht mehr unterstützt werden wegen Veralterung oder zu geringer Marktdurchdringung die Client-Betriebssysteme Windows 3.x , OS/2, Unix und Apple MacIntosh. In Bezug auf Unix mag diese Entscheidung von Microsoft wenig verständlich sein, aber der Hersteller konzentriert sich im Bereich Softwareentwicklungsumgebungen nunmal auf sein eigenes Betriebssystem. Andere Betriebssysteme können allerdings über Internet-Browser unterstützt werden. Zu solch einem Schritt haben sich viele Firmen entschlossen - siehe z.B. die Entscheidung von SAP, nur noch Windows- und Windows NT-Frontends zu unterstützen und alle anderen Betriebssysteme über Internet-Browser-Zugriff abzudecken.

Es besteht deshalb immer häufiger die Anforderung an Visual FoxPro-Anwendungen, auch im Internet unter HTML darstellbar zu sein. Dafür ist in einer Netzwerkumgebung auf jeden Fall ein NT-Server ab Version 4.0 mit Internet Information Server Version 3.0 oder höher sowie ein Browser auf den jeweiligen Clients notwendig. Eine entsprechende Klassenbibliothek für die Programmierung einer Internet-Schnittstelle wurde von der dFPUG entwickelt und den Mitgliedern kostenlos zur Verfügung gestellt. Diese Klassenbibliothek wird in diesem Dokument beschrieben. Erhältlich ist die Bibliothek auf der Begleit-CD sowie in den Forumsbibliotheken auf dem dFPUG-Webserver unter http://www.dfpug.de/forum.

Hard- und Softwarevoraussetzungen

Für eine Internetanbindung einer Anwendung bestehen erhöhte Hardware- und Softwareanforderungen, insbesondere an den Internet-Server als Applikationsserver. Wahlweise kann dabei für eine Visual FoxPro-Anwendung eine der nachfolgenden Kombinationen von Betriebssystem, Internet-Information Server sowie Service Packs verwendet werden (IIS steht dabei für Internet Information Server):

  • Windows NT 3.51 mit Service Pack 4 sowie IIS 1.0 mit Service Pack 3
  • Windows NT 4.0 mit Service Pack 3 und IIS 2.0
  • Windows NT 4.0 mit Service Pack 3 und IIS 3.0
Die Internetfähigkeit kann auch auf dem Betriebssystem Windows 95/98 mit dem Personal

WebServer hergestellt werden. Aufgrund der geringeren Stabilität gegenüber Windows NT und der Nichteinschränkbarkeit der Zugriffsrechte wird davon aber abgeraten.

Voraussetzung für den Server ist auf jeden Fall ein höher getackteter Pentium-Prozessor mit ein Hauptspeicher mit mindestens 128 MB RAM. Sofern höhere Last auf dem Webserver erwartet wird oder weitere Prozesse laufen sollen, wird eine massive Hauptspeichererweiterung sowie ggf. ein Dual-Prozessor-System empfohlen.

Auf der Client-Seite sollte mit einem der nachfolgenden Browser gearbeitet werden:

  • Microsoft Internet Explorer 4.0 oder höher
  • Netscape Communicator 4.0 oder höher

Für die dFPUG-Klassenbibliotheken sind keine höheren Versionen von Browsern oder Servern erforderlich, da nur mit Standard-HTML gearbeitet wird.

Konzept der Klassen

Das Konzept der Internetanbindung der dFPUG-Klassenbibliotheken geht davon aus, daß die zu konvertierende Anwendung nicht soweit verändert werden soll, daß sie von vorneherein eigenständig im Internet lauffähig ist, sondern das für die im Internet darzustellenden Module eine eigenständige DLL erzeugt wird, welche die internetspezifische Useranmeldung und -verwaltung sowie die Darstellung von zusätzlichen HTML-Seiten übernimmt und wenn überhaupt dann erst in einer tieferen Ebene die darzustellenden Module aufruft, falls die HTML-Seiten nicht ohnehin individuell neu für das Internet erstellt werden müssen. Für die Erzeugung der oberen Ebenen werden zwei Klassen verwendet: Eine Internet-Maske und ein Internet-Button.

Die Internet-Maske ist der Kern einer eigenständigen Anwendung. Sie lädt Konfigurationsdaten aus eine INI-Datei und stellt eine Ablaufumgebung mit Standardfunktionen für die Internetdarstellung zur Verfügung. Auf diese Maske wiederum werden beliebig viele Objekte der Klasse Internet-Button plaziert, die die eigentliche Funktionalität in einer gekapselten Methode enthalten. Die Internetform übernimmt aus dem Internetaufruf die gewünschte Funktion und leitet den Aufruf mit Weitergabe der verbleibenden Parameter an den jeweils zuständigen Internet-Button weiter. Der Button verarbeitet die Anfrage wahlweise direkt oder indirekt durch Aufruf des zuständigen Moduls mit dem Parameter, die Darstellung unsichtbar vorzunehmen und den Maskenaufbau in Form eines HTML-Sttrings zurückzusenden. Dieser wird ggf. um Kopf- und Fußbereiche ergänzt und vom Button an die Internet-Form zurückgegeben. Die Internet-Form leitet den HTML-String dann weiter an den aufrufenden Internet Server oder startet im Falle eines lokalen Aufrufs (für Testzwecke) einen Browser zwecks Anzeige.

Für jede gewünschte Funktionalität (sprich: Ausgabemaske im Internet) wird ein eigener Internet-Button auf der Internet-Maske plaziert. Zwecks Vereinfachung der HTML-Ausgabe steht eine Textbausteinsammlung mit HTML-Teilkomponenten zur Verfügung, die kombiniert werden können zu der insgesamt auszugebenden HTML-Seite. Zusätzlich stehen Fertigfunktionen zum Einbinden von Rückgabewerten / Funktionsergebnissen in HTML-Texte sowie zur halbautomatischen Übersetzung erzeugter Seiten zur Verfügung.

Aufbau der Klassenbibliothek

Es werden folgende Klassen verwendet:

  • Internet-Form
  • Internet-Button
  • Übersetzungsklasse
  • Registryklasse
  • Benutzerklasse

Zusätzlich werden folgende Hilfsklassen verwendet:

  • Dynazip-Kompression

Desweiteren werden folgende Hilfsprogramme und Hilfsmasken verwendet:

  • Startprogramm <Anwendung>_MAIN
  • Prozedurdatei für CSV-Listen
  • Parametererfassungsmaske GETVARP für interaktive Tests

Im nachfolgenden Abschnitt werden nur die Klassen Internet-Button und Internet-Form beschrieben. Auf Beschreibungen für die Managerklassen "Language", "Registry" und "User" sowie der Wrapper-Klasse für Dynazip wurde verzichtet, da diese Klassen nur sehr wenige Eigenschaften und Methoden haben, die fast selbsterklärend sind.

Klasse Internet-Form

Die Internet-Form ist die Basis der Internetanbindung. Pro zu erstellender Anwendung gibt es eine Instanz dieser Maske, auf der die entsprechenden Funktionsbuttons plaziert werden. Die Internet-Maske enthält von vorneherein jeweils eine Instanz der Managerklassen Language, Registry und User sowie ein Anzeigefeld für das aktuell eingestellte Cookie und den Usernamen (falls eingeloggt). Die Internet-Form-Klasse besitzt folgende Eigenschaften:

Eigenschaft

Beschreibung

aCmd[1,0]

Array mit aufrufbaren Internet-Buttons

aInit[1,0]

Array mit initialisierten Internet-Buttons

cAactivecolor

HTML-Farbe aktive Links aus INI-Datei

cAuthor

Autorenname für Tags, Default: <NO AUTHOR>

cBackcolor

Hintergrundfarbe für HTML-Seite aus INI-Datei

cbrowser 

Browsername aus INI-Datei

cbrowserdir

Browserverzeichnis aus INI-Datei

ccookiename

Name des Cookie-Feldes in HTML-Seiten, Default: cookie

cdatadir 

Verzeichnis Datendateien aus INI-Datei

cErrorpage

HTML-Textbaustein für Fehleranzeige aus INI-Datei

cfontface

Schriftart aus INI-Datei

chtmlback

Textbaustein für „Zurück“-Button aus INI-Datei

chtmldoscmd

Textbaustein für DOS-Command aus INI-Datei

chtmlerror

Textbaustein für Fehlermeldungsseite aus INI-Datei

chtmlfooter

Textbaustein für Seitenfuß aus INI-Datei

chtmlfoxcmd

Textbaustein für FoxPro-Command aus INI-Datei

chtmlheader

Textbaustein Seitenkopf aus INI-Datei

chtmlnocmd

Textbaustein für Meldung „Befehl nicht verfügbar“

chtmlreset

HTML-Resetbaustein, Default RESET

ckeywords

Keywords für Tags, Default: <NO KEYWORDS>

clinkcolor

HTML-Farbe für Links aus INI-Datei

clocaldir

lokales Verzeichnis aus INI-Datei

clocaldrive

lokales Laufwerk aus INI-Datei

clogfile

Name der Protokolldatei aus INI-Datei

cmaininifile

hardcodierter Pfad zur INI-Datei (Änderung!)

colddir

Vermerk Startverzeichnis

Cookie

Aktives Cookie für aktuellen Anwender

cpictdir

Bilderverzeichnis aus INI-Datei

creturn

Rückgabewert, ggf. verwendet für Fehlermeldung

crootdir

Rootverzeichnis für Webserver aus INI-Datei

cscriptdir

Verzeichnis für Skripte aus INI-Datei

csitehref

URL der Site aus INI-Datei, wichtig!

csprache

Defaultsprache für Anzeige, Default: d

csubtitle

Untertitel für HTML-Seite aus INI-Datei

csysdatadir

Verzeichnis Systemdateien aus INI-Datei

ctempdir

Temporäres Arbeitsverzeichnis aus INI-Datei

ctextcolor

HTML-Textfarbe aus INI-Datei

ctitle

Titel für HTML-Seite aus INI-Datei

ctrenn

Parametertrennzeichen aus INI-Datei, Default: ***

cvisitedcolor

HTML-Farbe für besuchte Links aus INI-Datei

DataSession

Einstellung „private Datasession (2)“ für Mehrfachaufruf

Dbfalias

Alias der Haupttabelle

Dbfname

Name der Haupttabelle

dbforder

Sortierung der Haupttabelle

Inifile

Hilfseigenschaft für Pfad zusätzliche INI-Datei

Ldebug

Flag für Testmodus

lentwicklung

Flag für Entwicklungsmodus

llog

Flag für Mitschreiben eines Aufrufprotokolls

llogini

Schalter für Protokollieren der Initialisierung

lnodll

Flag für lokalen Aufruf der Anwendung

ltest

Doppeltes Flag für Testmodus

nfontsize

Fontgröße für HTML-Seiten aus INI-Datei

nlifetime

User-Lifetime gemäß INI-Datei, Default: 3600

npwdlen

Minimale Passwortlänge aus INI-Datei

ShowWindow

Einstellung „Top-Level-Form (2)“

Die Internet-Form-Klasse besitzt folgende Methoden:

Methode

Beschreibung

Addtoinit

Addieren eines Buttons zum Init-Array

Cleanup

Aufräumen der Umgebung

Cmd

Eigentliche Ausführungsmethode

Dobrowser

Aufruf des Browsers im interaktiven Modus

Docmd

Aufrufen einer Cmd-Methode eines Buttons

Dosave

Speichern von Änderungen

Doskip

Ausführen einer Datensatzbewegung

Fixurl

Entfernen ungültiger Zeichen aus Parametern

Genhtml

HTML-Seite generieren

Getcmd

Laden eines einzelnen Parameters

Getcookie

Extrahieren des Cookies aus Parametern

Getval

Parsen von Parametern

Initcmd

Initialisieren vorhandener Internet-Buttons

Log

Eintragen eines Aufrufs in Logdatei

Logini

Startvorgang in Logdatei protokollieren

Makecookie

Neues Cookie erzeugen

Noamper

Entfernen von Ampersand aus Strings

Setcolor

Setzen der globalen Farbeinstellungen aus INI-Datei

Setcookie

Setzen des aktuellen Cookies

Setdbf

Setzen einer Tabelle

Setdir

Setzen der Directories aus INI-Datei

Setenv

Setzen von Umgebungseinstellungen

Setini

Setzen der zu verwendenden INI-Datei

Setinstance

Setzen eines Instanzenlevels in DLL

Setkey

Setzen eines Keys

Setprop

Setzen einer Eigenschaft

Skipit

Skippen in Tabelle

Startup

Called from HTML Browser to start HTML 

Writecookieinfo

Cookie in COOKIE.DBF wegschreiben

Writefile

Schreiben einer Low-Level-Datei

Notwendig ist leider für jede Installation die Anpassung des Pfades der INI-Datei an den aktuellen Webserver.

Klasse Internet-Button

Die Klasse Internet-Button wird für jede Funktion einmal auf der Internet-Form plaziert in Form einer projektspezifischen Subklasse. Aus dem Internet kann die jeweilige Funktion aufgerufen werden und liefert dann eine generierte HTML-Seite zurück. In der generierten Seite sind dann wieder Aufrufmöglichkeiten für weitere Funktionen. Die Buttons können auf der Maske optisch ähnlich der gewünschten Aufruf-Hierarchie plaziert werden. Die Internet-Button-Klasse besitzt folgende Eigenschaften, die von der Internet-Form-Klasse übernommen werden. Beschreibung siehe dort:

Eigenschaft

Eigenschaft

Chtmlfooter

Chtmlheader

Chtmlerror

Chtmlback

Chtmldoscmd

Chtmlfoxcmd

Ctextcolor

Clinkcolor

Cvisitedcolor

Cactivecolor

Cbackcolor

Cpictdir

Cfontface

Nfontsize

Ldebug

Llog

Lentwicklung

Ctitle

Csubtitle

Cauthor

Ckeywords

Cdatadir

Ctempdir

Csysdatadir

Crootdir

Ctrenn

 

Sofern diese Eigenschaften nicht mit einem Wert gefüllt / überschrieben wurden, wird in der Initialisierung der Wert aus der Internet-Form übernommen. Im Normalfall braucht man also keine dieser Eigenschaften anzufassen - außer man möchte ein bestimmtes abweichendes Verhalten für einen bestimmten Fall realisieren. Die Internet-Button-Klasse besitzt darüberhinaus folgende zusätzliche eigene Eigenschaften:

Eigenschaft

Beschreibung

aresults[1,2]

Ergebnisarray mit Platzhaltern und Rückgabewerten

caddfiles

Liste der anzuhängenden Dateien bei Download

ccmd

Befehlswort des Buttons

ccmdtype

Type des Befehls

cdefaultpage

Default-HTML-Seite für diesen Button

cpardiv

CSV-Liste mit Parameterbezeichnungen

ctablelist

Liste der benötigten Tabellen für Funktion

liscmd

Flag für aktiven Internet-Button

nparmax

Maximalanzahl übergebener Parameter

nparmin

Mindestanzahl übergebener Parameter

Diese Eigenschaften wiederum sollten für jeden Internet-Button gefüllt oder zumindest betrachtet werden.

Die Internet-Button-Klasse besitzt folgende Methoden, die zum Teil allerdings einfach nur eine entsprechende Methode der Internet-Form aufrufen:

Methode

Beschreibung

addresults

Einfügen Ergebnis in Webseite

cmd

Hauptbefehlsmethode

convpath

Konvertierung Pfad aus Sicht Webserver

docmd

Ausführen der eigentlichen Seitenfunktion

docmdwrap

Wrapper-Methode für interaktiven Aufruf

dologin

Login-Maske aufrufen

Getaddfilelist

Dateiliste aus ADD.DBF laden

getcmdpar

Parameter laden

Gethtml

Laden Textbaustein aus HTML.DBF

getpage

Laden aller Textbausteine einer Seite

getparsedpar

Geparste Parameter laden

getuser

User von Userobjekt holen

Getval

Wert laden

Log

Eintrag in Logdatei

noamper

Entfernen Ampersand aus Parameter

opentables

Öffnen benötigter Tabellen

preparepage

Vorbereitung einer Webseite

setcolor

Setzen Farbeinstellungen aus INI-Datei

setdir

Setzen der Verzeichnisse aus INI-Datei

sethtml

Setzen HTML-Parameter aus INI-Datei

Setprop

Eigenschaft setzen

translatepage 

Übersetzung einer Webseite

zipit

Aufruf Komprimiermethode

Nur in der Methode "cmd" muß man tatsächlich programmieren. Diese Methode wird aufgerufen, wenn die Buttonfunktion aus dem Internet angefordert wurde. Über GetParsedPar holt man sich dann die benötigten Parameter

Beispiele Internet-Button

Von den Internet-Buttons stehen folgende fertige Varianten als Beispiel zur Verfügung:

Button

Bezeichnung

Name

Textbausteine

Changed

Meldung „geändert“

EXPW

NODATA

DOSCmd

Ausführung DOS-Befehl

DOSCMD

DOSCMD

Fehlerform

Rückmeldemaske

FEHL

FEHL

FOXCmd

Ausführung eines FoxPro-Befehls

FOXCMD

FOXCMD

Haupmenue

Hauptmenü

MENU

MENU,MAIL,INF

Ini-File

Anzeige INI-Datei

INI

INI

Login

Login-Maske

LOGIN

LOGIN

Parameter

Parameteranzeige

PARA

PARA

Passwort

Passwort ändern

CHPW

CHPW

Reset

Server beenden

RESET

RESET

Programmablauf

Aufruf einer Defaultseite aus dem Internet Im Internet Information Server wird eine Defaultseite eingerichtet. Diese Defaultseite startet über einen Button den OLE-Server mit der Startmaske mit folgender URL:

  • http://
  • <<Name des Webservers>>/
  • scripts/foxisapi.dll/
  • oleserver
  • .oleklasse
  • .Methode
  • ?Parameter1=Wert
  • $Parameter2=Wert

Im Internet-Browser wird zusätzlich zu der URL der Aufruf auf die FOXISAPI.DLL übergeben. Diese wiederum erhält als Parameter den Namen, das Objekt und die Methode des OLE-Servers übergeben. Diesem wiederum können weitere Parameter übergeben werden. Die Größe des Parameterbuffers ist dabei allerdings beschränkt und von der jeweiligen Version der FOXISAPI.DLL abhängig..

Testmöglichkeiten und lokaler Aufruf

Erstellte Anwendungen lassen sich auf zwei Arten testen. Zum einen interaktiv aus der Entwicklungsumgebung mit Eingabe der zu übergebenden Parameter für die aktuell zu testende Funktion über eine Parametererfassungsmaske und den Aufruf des lokalen Browsers zur Anzeige der Ausgabe der erzeugten HTML-Seiten. Zum anderen über den Internet Information Server in der Form, wie die Anwendung letztendlich auch beim Anwender auf einem Webserver laufen würde. Die letztere Vorgehensweise erfordert bei Auftreten eines Fehlers aber das Beenden des IIS-Tasks (mit Hilfe von KILL.EXE) und das Neustarten des Internet-Servers. Da für jeden Testlauf die DLLs aus dem Speicher entfernt und dann wiederim Script- Verzeichnis des Webservers installiert werden müssen, ist für die ersten Tests der direkte Aufruf wahrscheinlich effizienter.

Beim lokalen Aufruf ohne das Durchschleifen des Aufrufs durch den Internet Information Server kann allerdings immer nur eine einzelne Aktion aufgerufen und deren Rückgabe im lokalen Browser angezeigt werden. Weiterführende Funktionsaufrufe können nur wieder in der in diesem Fall sichtbaren Internet-Form durch Klicken auf den jeweiligen Button ausgelöst werden. Sofern die gewünschte Funktion Parameter erwartet, wird eine entsprechende Eingabemaske für Parameter geöffnet. Der Aufruf wird von der Internet-Maske an die normale Befehlsfunktion des Buttons weitergeleitet. Der Rückgabestring wird von der Maske aber als temporäre HTML-Datei auf der Festplatte gespeichert und der Pfad auf diese neu kreierte Datei an den lokalen Browser zur Anzeige übergeben. Bei Progammende werden alle erzeugten temporären Dateien gelöscht.

Unterstützt wird das Testen der Anwendung ansonsten durch eine Aufrufprotokolldatei sowie eine Initialisierungslogdatei. Desweiteren lassen sich zur Laufzeit die INI-Daten und Parameter der Anwendung anzeigen.

Datenzugriff/Datenhaltung

Folgende Tabellen werden zur Datenhaltung verwendet:

  • Textbausteine
  • Benutzerverwaltung
  • Cookieverwaltung
  • Übersetzungstabelle
  • Parametertabelle
  • Zusatzdateientabelle

Die Namen der Tabellen lauten wie folgt:

Tabelle

Beschreibung

ADD.DBF

Zusätzlich einzupackende Dateien je nach Anwendung

COOKIES.DBF

Cookie-Zähler für aktive User

HTML.DBF

HTML-Fertigseiten oder Bausteine

HTMLERRO.DBF

HTML-Fehlerseite zum Includen in Projektdatei

SPRACHE.DBF

Übersetzungstabelle

SYSDB.DBF

Systemparameter

USERS.DBF

Benuzterverwaltung

Die Struktur der Tabellen wird in den nachfolgenden Abschnitten erläutert.

Dateistruktur SPRACHE.DBF

Die Tabelle wird zur Übersetzung von HTML-Textbausteinen verwendet. Die Tabelle hat folgende Struktur:

Feld

Feld Name

Inhalt

Typ

Breite

1

D

Kurztext Deutsch

Character

50

2

E

Kurztext Englisch

Character

50

3

F

Kurztext Franz.

Character

50

4

S

Kurztext Spanisch

Character

50

5

P

Kurztext Port.

Character

50

6

D_MEMO

Langtext Deutsch

Memo

4

7

E_MEMO

Langtext Englisch

Memo

4

8

F_MEMO

Langtext Franz.

Memo

4

9

S_MEMO

Langtext Spanisch

Memo

4

10

P_MEMO

Langtext Port.

Memo

4

11

DATUM

Datum Änderung

DateTime

8

Die Struktur der Tabelle kann auf die gewünschten Sprachkombinationen angepaßt werden. Allerdings ist dann auch gleichzeitig die Klasse "Language" anzupassen, die die übersetzten Strings zurückliefert.

Dateistruktur COOKIES.DBF

Für jeden Anwender wird beim ersten Einloggen in den Webserver eine Zufallskennung erzeugt und in einer Tabelle verwaltet. Dabei wird jeweils Datum/Uhrzeit der letzten Aktivität vermerkt sowie eine Aufräumliste geführt, welche Vorgänge nach dem Ausloggen des Users auszuführen sind, damit das System wieder sauber ist. Die Tabelle hat folgende Struktur:

Feld

Feld Name

Inhalt

Typ

1

COOKIE

Eindeutige Kennung

Character

2

RNU

Satznummer Datei

Integer

3

USER

Benutzername

Character

4

PASSWORT

Benutzerpasswort

Character

5

DATUM

Datum Aktivität

DateTime

6

SPRACHE

Sprachkennzeichen

Character

7

ACTIONS

Aufräummerkfeld

Memo

Ganz besonders wichtig sind bei dieser Tabelle die Felder DATUM und ACTIONS. Gemäß Eintrag in der INI-Konfigurationsdatei wird ein Anwender nach einer längerer Periode der Inaktivität automatisch ausgeloggt. Diese Zeitspanne wird ab DATUM berechnet. Bei jedem neuen Zugriff eines Anwenders wird die Tabelle gescannt und alle veralteten Anwender aus dem System ausgeloggt. Dabei wird das Memofeld ACTIONS abgearbeitet. Dieses enthält für jede Aktion eine Zeile, die als Makro abgearbeitet wird. Wenn z.B. Downloaddateien im TEMP-Verzeichnis für den User zum Download bereitgestellt wurden, wird in diesem

Memofeld gleichzeit ein Eintrag "DELETE FILE TEMP\<Dateiname.TMP>" angelegt und beim Ausloggen dann abgearbeitet.

Dateistruktur ADD.DBF

Bei Downloadangeboten sollen häufig weitere Dateien gleich miteingepackt werden, z.B. allgemeine Informationen. Alle in dieser Tabelle aufgeführten Dateien werden bei einem Einpackvorgang für das Angebot "APP" mit komprimiert. Die Tabelle hat folgende Struktur:

Feld

Feld Name

Inhalt

Typ

Breite

1

APP

Name des Moduls

Character

10

2

DATEI

Name der Datei

Character

12

3

AKTIV

Flag Eintrag Gültig

Character

1

4

PFAD

Pfad der Datei

Memo

4

5

NOTIZ

Notiz zur Datei

Character

40

 

Die Dynazip-Klasse zum Komprimieren von Downloadangeboten ist separat dokumentiert. Ohne die Installation der Dynazip-Klassenbibliotheken ist das Öffnen der entsprechenden Klasse/Maske leider nicht möglich.

Dateistruktur SYSDB.DBF

Die SYSDBF enthält Schalter und Defaultwerte. Diese sind derzeit allerdings noch alle in der INI-Datei gespeichert. Die Tabelle hat folgende Struktur:

Feld

Feld Name

Inhalt

Typ

Breite

1

Language

Sprachkennzeichen

Character

1

 

 

Bisher wird hier also nur die Defaultsprache der Anwendung verwaltet.

Dateistruktur USERS.DBF

Die Tabelle dient zur Verwaltung des Zugriffsschutzes auf ggf. sensitive Bereiche des Webserver, z.B. für den Zugriff auf private Download-Bereiche. Die Tabelle hat folgende Struktur:

Feld

Feld Name

Inhalt

Typ

Breite

1

NUMMER

Benutzernummer

Character

12

2

AKTIV

Aktiv-Flag

Logisch

1

3

USER

Benutzername

Character

15

4

PASSWORT

Passwort

Character

8

5

STAND

Datum Stand

Datum

8

 

 

 


Dateistruktur HTMLERRO.DBF

Die Tabelle enthält einen einzigen HTML-Textbaustein mit einer Fehlermeldung. Die Tabelle hat folgende Struktur:

Feld

Feld Name

Inhalt

Typ

Breite

1

TYPE

Code Textbaustein

Character

20

2

HTML

HTML-Seite

Memo

4

3

APP

Applikation

Character

10

 

 

 

Diese Tabelle wird in die Projektdatei integriert und ausgegeben, sofern ein HTML-Textbaustein nicht gefunden werden kann.

Dateistruktur HTML.DBF

Die Tabelle enthält HTML-Textbausteine zwecks vereinfachtem Zusammenbau von Webseiten. Die Tabelle hat folgende Struktur:

Feld

Feld Name

Inhalt

Typ

Breite

1

TYPE

Code Textbaustein

Character

20

2

HTML

HTML-Seite

Memo

4

3

APP

Applikation

Character

10

4

COUNTER

Anzahl Aufruf

Double

8

5

COMMAND

Funktionsbereich

Character

10

6

FROMDATE

Aufrufe seit Datum

DateTime

8

7

TODATE

Aufrufe bis Datum

DateTime

8

8

NOTIZ

Anmerkungen

Memo

4

Textbausteine in HTML.DBF

Folgende Textbausteine stehen derzeit in der Tabelle HTML zur Verfügung:

Textbaustein

Inhalt

BACK

Zurück-Button 

CHPW

Standardmaske Passwortänderung 

COOKIE

Interner Baustein für Cookie

DOSCMD

Meldung: Ergebnis DOS-Befehlsaufruf

ERROR

Meldung: Fehlermeldung

EXCL

Meldung: Dateien nicht exklusiv verfügbar

FEHL

Standardmaske User-Feeback

FOOT

Seitenfuß 

FOXCMD

Meldung: Ergebnis FoxPro-Befehlsaufru

HEAD

Seitenkopf

INFO

Vorschlag Untermenü INI/Parameter

INI

Standardmaske INI-Datei-Anzeige

LOAD

Meldung: Downloadbutton

MAIL

Standardmaske Mailversand 

MENU

Vorschlag Hauptmenü

META

Baustein Meta-Tags in Seitenkopf

NOCMD

Meldung: Funktion nicht verfügbar

NODATA

Meldung: Keine Daten vorhanden

NOLOGI

Meldung: Login fehlgeschlagen 

NOPWD

Meldung: Kein Passwort eingegeben 

NOUSER

Meldung: Kein Username eingegeben

NOUSPW

Meldung: Weder User noch Passwort eingegeben

PARA

Standardmaske Parameteranzeige

POPUP

Meldung: Auswahlpopup

PWDIDE

Meldung: Passwort nicht geändert

PWDLEN

Meldung: Passwortlänge falsch

PWDSUC

Meldung: Passwortänderung erfolgreich 

PWDUNE

Meldung: Passwort alt/neu identisch

REINDEX

Meldung: Datenbanken reindiziert

RESET

Meldung: Server wird heruntergefahren

RESULT

Platzhalter Abfrageergebnis

Konfigurationsdatei

Die Klassenbibliotheken werden über eine INI-Datei konfiguriert. Folgende Schalter stehen zur Verfügung:

  • Allgemeine Schalter
  • Schalter für Entwickler
  • Farbeinstellungen
  • Schrifteinstellungen
  • Lokale Konfiguration
  • Serverkonfiguration

Die Abschnitte der INI-Datei werden in den nachfolgenden Absätzen erläutert.

Allgemeine Schalter

Sektionsbezeichnung: [MAIN]

Eintrag

Inhalt

Beschreibung

Author=

Name des Autors

Autor der Anwendung

Keywords=

VFP

Stichworte

SiteHREF=

http://ISYS _DC1/

URL

Subtitle=

<Untertitel>

Untertitel

Title=

<Titel>

Seitentitel

PwdLen=

6

Passwortlänge

Separator=

***

Parametertrennzeichen

Language=

D

Defaultsprache

Lifetime=

7200

Lebensdauer Cookie in Sekunden

Schalter für Entwickler

Sektionsbezeichnung: [DEVELOP]

Eintrag

Inhalt

Beschreibung

Debug=

0

1=Debug-Modus

Development=

0

1=Entwicklermodus

Test=

0

1=Testmodus

DLL=

1

muß auf 1 für DLL gesetzt sein

Log=

0

auf 1 stellen, wenn Log gewünscht ist

LogFile=

<>.LOG

Name Protokolldatei

LogINI=

0

auf 1 stellen bei Startproblemen

 

 

 

 

Farbeinstellungen

Sektionsbezeichnung: [COLORS]

Eintrag

Inhalt

Beschreibung

BackColor=

#C0C0C0

ggf. ändern für optischen Eindruck

ActiveColor=

#FF0000

ggf. ändern für optischen Eindruck

LinkColor=

#0000FF

ggf. ändern für optischen Eindruck

TextColor=

#000000

ändern für optischen Eindruck

VisitedColor=

#800080

ggf. ändern für optischen Eindruck

Schrifteinstellungen

Sektionsbezeichnung: [FONTS]

Eintrag

Inhalt

Beschreibung

FontFace=

Arial

ggf. ändern für optischen Eindruck

FontSize=

6

ggf. ändern für optischen Eindruck

 

 

Lokale Konfiguration

Sektionsbezeichnung: [LOCAL]

Eintrag

Inhalt

Beschreibung

Browser=

Iexplore.EXE

Default browser für interaktives Testen

BrowserDir=

C:\inetpub\ browser\

Browser-Verzeichnis

LocalDrive=

C:

Lokales Laufwerk

LocalDir=

\inetpub

Lokales Serververzeichnis

ScriptDir=

Scripts

Lokales Skriptverzeichnis

DataDir=

Scripts\data

Lokales Datenverzeichnis

SysDataDir=

Scripts\data

Lokales Systemdatenverzeichnis

TempDir=

c:\inetpub\temp

Temporäres Verzeichnis

PictDir=

..\scripts\bilder

Bilderverzeichnis

RootDir=

wwwroot

Lokales Rootverzeichnis

Server-Konfiguration

Sektionsbezeichnung: [SERVER]
Eintrag Inhalt Beschreibung

LocalDrive=

c:

Laufwerksbezeichnung

LocalDir=

\inetpub

Serververzeichnis

ScriptDir=

scripts

Scriptsverzeichnis

DataDir=

scripts\data

Datenverzeichnis

SysDataDir=

scripts\data

Systemdatenverzeichnis

TempDir=

c:\inetpub\tem

Temporäres Verzeichnis

PictDir=

\scripts\bilde

Bilder  verzeichnis 

RootDir=

..\wwwroot

Root-Verzeichnis

Hinweis: Bitte die SITEHREF unbedingt auf den Namen 

des Servers anpassen. Die Pfadeinträge und sonstigen Einträge möglichst vorsichtig und schrittweise ändern, da fehlerhafte Einträge zu definitiv fehlerhaftem Verhalten führen.

Einbindung der Anwendung

Abschließend noch ein paar Bemerkungen zu der Art der Einbindung bestehender Anwendungen. Die bisher dargestellten Klassen gehen nämlich nur davon aus, daß man Textbausteine in HTML selbst erstellt und diese dann zusammensetzt und die Anwendungslogik in den jeweiligen Buttons implementiert. Interessant wäre es jetzt natürlich, eine bestehende Anwendung bzw. bestehende Masken weiterverwenden zu können. Dafür wäre es notwendig, seiner eigenen Maskenklasse eine Methode hinzuzufügen, die in der Lage ist, die Maske selbst als HTML-String abzubilden. Das ist natürlich von vorneherein auf verhältnismäßig einfache Maskenlayouts beschränkt. Sämtliche Basisklassen könnte man dann mit einer eigenen Methode GENHTML versehen, und die Maskenklasse selbst könnte durch diese Methoden der Subobjekte kaskadieren (mit weiterer Kaskadierung innerhalb anderer Container-Klassen wir Container, Pageframe und Grid) und aus den zurückgelieferten Teilstrings die Gesamtdarstellung der Maske in HTML erzeugen.

Die Einbindung der eigenen Anwendung könnte dann grob wie folgt erfolgen:

  • Für jede Maske wird ein entsprechender Aufrufbutton angelegt
  • Die Maskenklassen werden mit einem Befehls-Parameter und Datenfeldern aufgerufen
  • Bei einem Anzeigeparameter wird über GENHTML die Maske generiert und der HTML-String zurückgeliefert.
  • Bei einem Skip- oder Move-Parameter wird auf den entsprechenden Satz gesprungen und ein Anzeige-String wie oben zurückgeliefert
  • Bei einem Löschbefehl oder einer Neuanlage wird eine leere Maske angezeigt und als String zurückgeliefert.
  • Bei einem Speicherbefehl werden alle übergebenen Daten in die jeweiligen Datenfelder generisch gespeichert. Bei Validierungsfehlern wird das entsprechende Feld farblich unterlegt und eine Informationszeile am Seitenende ausgegeben. Andernfalls wird die Maske wieder als normaler Anzeige-String zurückgeliefert.

Die Masken werden nach dem Aufruf des jeweiligen Internet-Buttons unsichtbar instanziiert. Alle in der Maske zur Verfügung stehenden Datenfelder werden über

GENHTML ausgegeben. Alle zur Verfügung stehenden Buttons werden über GENHTML ausgegeben und außerdem mit einer entsprechenden URL versehen, die bei einem Aufrufen des Buttons interpretiert werden muß.

Menüpunkte eines allgemeinen Menüs, von Toolbars sowie eines Kontextmenüs sind ebenfalls als Buttons darzustellen. Die Darstellungsmöglichkeiten von Menüs und Toolbars im Internet erfordern entsprechende Vorbereitungen. Eine GENHTML-Methode ist in den dFPUG-Framework-Basisklassen enthalten, aber bisher nur rudimentär gefüllt. Hier werden noch freiwillige Mithelfer benötigt.

Installation des Webservers

Auf den nachfolgenden Seiten wird die Installation der mit den dFPUG-Internetklassenbibliotheken erstellen Beispielanwendung auf einem Webserver beschrieben. Dafür sind leider einige Schritte notwendig - nach einige Zeit bekommt man darin aber glücklicherweise etwas Übung <g>.

Benötigte Verzeichnisse

Folgende Verzeichnisse sollten auf dem Server angelegt sein für einen reibungslosen Programmablauf:

Verzeichnis

Beschreibung

C:\TEMP

Ablage temporärer Dateien

INETSRV\TEMP

Interne Ablage von erzeugten HTML-Seiten

INETSRV\TEMP\TRANS

Interne Ablage für gezippte Download dateien

INETSRV\SCRIPTS\BILDER oder \BMPS

Ablage für Bitmaps/Bilder

INETSRV\SCRIPTS\DATA

Ablage für Datenbestände

INETSRV\SCRIPTS\SYSTOOLS

Verzeichnis für Hilfswerkzeuge

Benötigte Dateien

Folgende Anwendungsdateien werden in das Verzeichnis INETSRV\SCRIPTS kopiert:

Datei

Beschreibung

CONFIG.FPW

Konfigurationsdatei VFP

<Anwendung>.DLL

Eigentliche Anwendung als OLE.DLL

<Anwendung>.TLB

Type-Library

<Anwendung>.VBR

Registry-Einträge

<Abwendung>.INI

Konfigurationsdatei DLL

FOXISAPI.DLL

ISAPI-Schnittstelle für Visual FoxPro

FOXISAPI.CPP

C-Quellcode (nicht benötigt)

FOXISAPI.DEF

C-DEF-Datei (nicht benötigt)

FOXISAPI.MAK

C-Makefile (nicht benötigt)

FOXISAPI.RC

C-RC-Datei (nicht benötigt)

FOXTOOLS.FLL

(falls für eigene Zwecke benötigt)

Die FOXISAPI-Dateien kann man auch aus dem VFP-Verzeichnis \VFP \SAMPLES\ SERVERS\ FOXISAPI kopieren. Die dortigen Dateien sind aber möglicherweise veraltet. Besser ist deshalb vielleicht der Download von der Microsoft-Webseite.

Folgende Bitmpas von den Beispiel-Textbausteinen verwendet und müssen deshalb nach INETSRV\SCRIPTS\BILDER oder \BMPS kopiert werden:

Datei

Beschreibung

blue.gif

Blauer Bullet

red.gif

Roter Bullet

world.gif

Bild mit Internet-Weltkugel

warning.gif 

Bild für Warnhinweis

spanien.gif 

Flagge Spanien für Sprachauswahl

deutschl.gif 

Flagge Deutschland für Sprachauswahl

england.gif 

Flagge England für Sprachauswahl

frankrei.gif 

Flagge Frankreich für Sprachauswahl

italien.gif 

Flagge Italien für Sprachauswahl

portugal.gif

Flagge Portugal für Sprachauswahl

*.bmp

zusätzliche Bitmaps der Anwendung

Die Datendateien werden nach INETSRV\SCRIPTS\DATA kopiert ("*" steht dabei für die Datei-Endungen .DBF, .FPT und .CDX):

Datei

Beschreibung

COOKIES.*

Eindeutige Benutzerkennungen

HTML.*

HTML-Textbausteine für Seitengenerierung

HTMLERRO.*

Fehlerseite (einkompiliert)

SPRACHE.*

Übersetzungstabelle für dt.,eng.,fr.,spa.,port.

ZULASSUN.*

Benutzerverwaltung mit Feldern für Name, Passwort und Rechte

SYSDB.DBF

Systemparameter (Sprache u.ä.)

WEB.*

Datenbankcontainer

Mitgeliefert bei den Klassenbibliotheken werden außerdem in einem separaten Verzeichnis einige Entwicklertools, die sich bei der Arbeit mit dem Internet Information Server in der Praxis massiv bewährt haben. Es wird deshalb empfohlen, sich folgende Entwicklertools nach INETSRV\SCRIPTS\SYSTOOLS zu kopieren:

Datei

Beschreibung

KILL.EXE

DOS-Prozess-Terminator (Killt wirklich alles)

TLIST.EXE

DOS-Prozess-Lister

PVIEWER.EXE

Prozess-Viewer (killt nicht alles <g>)

OLE2VIEW.*

OLE2-Registry-Viewer (übersichtlicher)

 

 

 

Die Beispielanwendung arbeite mit einem ActiveX-Control bzw. der DLL-Variante davon für das Komprimieren von Dateien. Eingesetzt wurde dabei das Tool DYNAZIP, welches aber leider nicht für Entwickler mitgeliefert werden darf. Sofern Sie ebenfalls DYNAZIP einsetzen, müssen in das SYSTEM32-Verzeichnis von Windows NT Server folgenden Dateien installiert werden:

Datei

Beschreibung

DZIP32.DLL

Dynazip-Komprimierungs-DLL

DZOCX32.LIC

Dynazip-Lizenzdatei

DZOCX32.OCX

Dynazip-OCX-Datei

DUZIP32.DLL

Dynazip-DeKomprimierungs-DLL (für Beispielwebserver nicht benötigt)

DUZOCX32.LIC

Dynazip-Lizenzdatei (nicht benötigt)

DUZOCX32.OCX

Dynazip-OCX-Datei (nicht benötigt)

MFCANS32.DLL

benötigte Windows NT-Systemdatei

OC30.DLL

benötigte Windows NT-Systemdatei

Die Startseite der Anwendung muß man abschließend nach INETSRV\WWWROOT kopieren:

  • INETSRV\WWWROOT\DEFAULT.HTM

Die Startseite muß man immer gleich testen. Prüfen Sie, ob die Seite geöffnet werden kann und die Bilder (Länderflaggen) erscheinen bevor irgendetwas anderes installiert wird (wenn die Seite samt Bilder nicht erscheint, muß man zuerst die Benutzerrechte und die IIS-Konfiguration prüfen, siehe unten).

Hinweis: Unter IIS 1.0 wurde eine fehlerhafte DEFAULT.HTM mitgeliefert, die bei zugreifenden Anwender die völlig irreführende Fehlermeldung "Netzwerkverbindung überprüfen" auslöst. Diese fehlerhafte Seite unbedingt löschen, falls sie sich noch auf dem System befinden sollte.

Installation der DLLs

Die Webserver-Anwendung wird als DLL erstellt. Diese DLL-Hauptdatei wird zusammen mit der INI-Konfigurationsdatei in das INETSRV\SCRIPTS-Verzeichnis kopiert:

  • INETSRV\SCRIPTS\<Anwendung>.DLL
  • INETSRV\SCRIPTS\<Anwendung>.INI

Wichtig: Der Pfad für die INI-Datei ist dabei HARDCODIERT in der DLL. Es gibt dabei üblicherweise verschiedene mögliche Pfade je nach NT-Installation:

  • C:\WINNT\SYSTEM32\INETSRV\SCRIPTS\
  • C:\NTSERVER\INETSRV\SCRIPTS\
  • C:\INETPUB\SCRIPTS\
Hinweis: In diesem Falle muß der Betriebssystempfad verwendet werden. Innerhalb von HTML-Seiten und -Textbausteinen hingegen ist der relative Pfad aus Sicht des Internet Information Servers zu verwenden. D.h. alle Pfadangaben müssen von dem Verzeichnis SCRIPTS ausgehen und Dateien auf der gleichen Ebene wie SCRIPTS muß man über "..\<Verzeichnis>\<Datei.Endung>" ansprechen.

Abschließend muß man die nachfolgenden DLLs auf REGSRV32.EXE fallen lassen zwecks Registrierung (sofern man die Anwendung mit .DLL als Endung verknüpft hat; andernfalls REGSRV32.EXE mit nachfolgendem Pfad+Dateiname aufrufen).

  • alle Dynazip-DLL/OCX-Dateien in SYSTEM32
  • sowie INETSRV\SCRIPTS\<Anwendung>.DLL

Dabei muß die Systemmeldung erfolgreich sein, sonst konnten die Bibliotheken nicht in der Registry eingetragen werden und stehen somit nicht zur Verfügung. Falls Windows NT 4.0 sich über die Type-Library (<Anwendung>.TLB) beschwert, diese löschen und die Erstellung und Registrierung einfach nochmals durchführen. Falls die TLB- und/oder die VBR-Datei fehlen oder Probleme bereiten, notfalls einfach die gleich-endigen FOXIS.*-Dateien aus dem VFP-Verzeichnis \VFP\ SAMPLES\ SERVERS\ FOXISAPI kopieren, umbennenen und es erneut probieren.

Internetserver kontrollieren

Damit bei Fehlermeldungen und Abstürzen der selbst erstellten .DLL bzw. von VFP eine optische Rückmeldung erfolgen kann, muß man zuallererst unter "Dienste" den Service "WWW-Publishing-Service" anwählen und die Box "Interaktive Beziehung mit dem Desktop erlauben" ankreuzen. Im Fehlerfalle ist es jetzt möglich, daß eine Messagebox auf dem Server erscheint. Diese poppt aber nicht automatisch nach vorne sondern man muß mit dem Taskbar dahin wechseln. Sofern diese Checkbox nicht markiert wird, führt eine Fehlermeldung oder Messagebox zu einem echten Problem. Diese werden nämlich unsichtbar angezeigt - der Server hält aber dennoch an, bis man den OK-Button mit Tastatur oder Maus anwählt, was technisch leider völlig unmöglich ist. In einem solchen Falle muß man dann auf das Tool KILL.EXE zurückgreifen.

Nach dieser vorbereitenden Maßnahme muß man dann in der Administrationsanwendung INETSRV.EXE die Konfiguration des Webservers auf folgende Punkte hin kontrollieren:

  • DEFAULT.HTM sollte als Default-Seite eingetragen sein und die Verwendung einer Default-Seite enabled sein.
  • READ/EXECUTE-Rechte müssen auf das Scripts-Verzeichnis und READ-Rechte müssen auf das WWWROOT-Verzeichnis bestehen.
  • READ-Rechte auf das INETSRV\TEMP-Verzeichnis sind nur eventuell notwendig.
  • Directory-Browsing sollte nicht erlaubt sein.
  • Alle anderen Voreinstellungen sollten so übernommen werden können. Man sollte erstmal keine TCP/IP-Adressen vom Zugriff aussperren.

Hinweis: Bei Performance-Problemen sollte man in der Registry den Eintrag HKEY_LOCAL_MACHINE /SYSTEM /CURRENTCONTROLSET /SERVICES /W3SVC /PARAMETER und dort CacheEnabled auf 1 setzen. Dadurch wird die eigene Webserver-.DLL samt VFP nicht bei jedem Aufruf über das Internet neu in den Hauptspeicher geladen, sondern verbleibt nach dem ersten (langsameren) Start im Speicher für den nächsten Aufruf. Jetzt kann man den Webserver allerdings nur noch mit dem KILL-Utility beenden, wenn man die Webserver-Applikation nicht vorher mit dem Parameter "RESET" zum Abdanken gezwungen hat.

Benutzerrechte kontrollieren

Den Username und das Passwort des auf der ersten Seite bei INETSRV.EXE genannten anonymen Users sollte man unbedingt mit der Benutzerverwaltung von NT abgleichen! Vorsichtshalber sollte man das Passwort an beiden Stellen neu eingeben, da man keine Erfolgsrückmeldung bekommt und bei INETSRV.EXE das Passwort auch nicht zur Kontrolle doppelt eingeben kann. Das Benutzerkonto sollte man auf jeden Fall daraufhin überprüfen, ob es deaktiviert oder zeitlich eingeschränkt ist. Der Benutzer benötigt außerdem Zugriffsrechte unter NT auf nachfolgende Dateien bzw.Verzeichnisse:

Datei/Verz.

Beschreibung

SYSTEM32\VFP*.DLL

Visual FoxPro Bibliothek

SYSTEM32\DY*.DLL/OCX

Dynazip DLL/OCX für Komprimierung

SCRIPTS\*.*

Für Ausführung der DLLs

INETSRV\TEMP\*.*

für Datendownload

C:\TEMP\*.*

für temporäre Arbeitsdateien

 

 

 

 

Bei Problemen mit dem User ggf. diesem zumindest für Testzwecke Administrator-Rechte sowie Rechte zur lokalen Anmeldung und zur Anmeldung als Service geben.

DCOMCNFG kontrollieren

Unter Windows NT 4.0 muß DCOM korrekt konfiguriert werden, d.h. der Internet-User (siehe oben) muß im dritten Reiter der Maske bei allen drei Buttons eingetragen werden (jeweils Benutzer hinzufügen und das richtige von den beiden möglichen Rechten erteilen). Desweiteren im zweiten Reiter die beiden Popups für die Authorisierung auf den niedrigstmöglichen Level setzen.

Hinweis: DCOMCNFG hat unter NT4.0 desöfteren kleinere Probleme (zumindest bis zum Service Pack 3), dies ist eine auch MS bekannte Tatsache. Dadurch kann es möglich sein, daß statt mit den korrekten Einstellungen wahlweise mit dem Modus "Pauschal alle Rechte für alle" oder "Pauschal keine Rechte für niemanden" hochgefahren wird, obwohl in DCOMCNFG alles richtig eingegeben wurde. Falls man also an Zugriffsrechten auf die DLL scheitert, obwohl alle Benutzerrechte korrekt definiert sind, muß man einfach DCOMCNFG starten und wieder schließen (hilft meistens). Falls dies auch nicht hilft, kann man den Rechner nur noch neu booten. Wegen diesem Verhalten muß man vor jeder Vorführung/Test erstmal kontrollieren, ob OLE-DLLs aller Art überhaupt geladen werden können. Diese Probleme sollten mit dem neuesten Service Pack für NT behoben sein.

Verknüpfungen

Zur Beschleunigung der Arbeit empfehle ich, folgende Verknüpfungen auf den Desktop zu legen:

Datei

Beschreibung

SYSTOOLS\ KILL.EXE inetinfo.exe

Beendet bei Anklicken den Webserver zwecks Neustart

INETSRV.EXE

Steuerung des Webservers (für ggf. Neustart)

REGSRV32.EXE

Zum Anmelden diverser DLLs und OCXce.

IEXPLORE.EXE

Internet Explorer 4.0 (nicht 1.5 oder 2.0!)

DCOMCNFG.EXE

Auf NT 4.0 für Rechtekontrolle (ggf. mehrfach anstoßen, siehe Erläuterung)

SCRIPTS

Verknüpfung auf das SCRIPTS-Verzeicnis

WWWROOT

Verknüpfung auf das WWWROOT-Verzeichnis

Anhang: Installation des VFP-Beispiels

Bevor man einen eigenen Webserver programmiert und installiert, sollte man das Verfahren vorab an dem kleinen Beispiel-Webserver ausprobieren, der bei Visual FoxPro im Unterverzeichnis \SAMPLES\ SERVERS\ FOXISAPI mitgeliefert wird. Deshalb nachfolgend einige Erläuterungen zur Installation und zum Testen des bei VFP mitgelieferten Webservers.

Im Beispiel sollte man zuerst ein paar Eigenschaften kontrollieren bzw. anpassen. Dafür muß man die Projektdatei FOXIS.PJX im Servers\Foxisapi-Verzeichnis öffnen und den Reiter Klassen anwählen. Von dort aus dann die Klasse ISAPI öffnen und die Eigenschaft SCRIPTDIR ändern auf: C:\VFP\ SAMPLES \SERVERS \FOXISAPI, damit der Server direkt aus seinem Beispielverzeichnis gestartet werden kann. Desweiteren die Klasse EMPLOYEE öffnen und die Eigenschaft DBFNAME ändern von EMPLOYEE.DBF auf EMPLOYEE, um eine Fehlermeldung betreffs des Öffnen der Dateien zu vermeiden. Außerdem die Eigenschaft DBCNAME neu eintragen mit der vollen Pfadangabe C:\VFP \SAMPLES \DATA \TESTDATA.

Die Installation der VFP-Beispielanwendung erfolgt in folgenden Schritten:

  • "Build Projekt" anwählen und eine DLL erstellen und diese in das SCRIPTS-Verzeichnis des Webservers abspeichern.
  • die erstellte FOXIS.DLL mit REGSRV32.EXE registrieren.
  • die FOXISAPI.DLL (neueste Version) muß sich im SCRIPTS-Verzeichnis befinden, also ggf. dorthin kopieren, falls nicht zuvor geschehen.
  • Dem INETUSR-Anwender Vollzugriff auf die folgenden Verzeichnisse einräumen
  • C:\VFP \SAMPLES \SERVERS \FOXISAPI
  • C:\VFP \SAMPLES \DATA \TESTDATA

Ggf. muß man DCOMCNFG noch mal anstoßen (siehe Abschnitt Installation) und bei einem Fehlversuch auf jeden Fall den Webserver mit KILL.EXE beenden und neu starten, damit die Änderungen dort auch registriert werden. Die Testdaten der Anwendung dürfen nicht wie im Readme beschrieben in das Script-Verzeichnis kopiert werden, da leider die Dateinamen HTML und COOKIES auch von anderen Beispielanwendungen verwendet werden (allerdings für Dateien mit anderer Struktur).

Anhang: Test/Vorführung VFP-Beispiel

Zuallererst sollte man einen interaktiven Test der Anwendung mit folgenden Befehlszeilen im Befehlsfenster vornehmen:

    CLEAR ALL
    CLOSE ALL
    SET EXCL OFF
    CD C:\VFP\SAMPLES\SERVERS\FOXISAPI
    SET CLASSLIB TO ISAPI
    OX=CREATE("EMPLOYEE")
    OX.SHOW()

Jetzt müßte die Anwendung sichtbar geworden sein. Als nächstes erfolgt der Test der HTML-Seitenausgabe mit dem Befehl:

    ? OX.STARTUP()

Sofern die Anwendung gestartet werden und ein HTML-String in den VFP-Dektop ausgegeben werden konnte, war die Erstellung und Registrierung des COM-Servers erfolgreich. Nunmehr erfolgt der Test der Anwendung über einen Webbrowser. Dafür startet man den Internet Explorer und gibt folgende Befehlszeile / URL ein:

http://<servername>/scripts/foxisapi.dll/foxis.employee.startup

Diesen Eintrag kann man auch mit der nachfolgenden Zeile in eine Webseite übernehmen:

<A HREF="/scripts/foxisapi.dll/foxis.employee.startup"> <I>Demo</I></A>

Einen möglicherweise vorhandenen Proxy-Server sollte man abschalten, da diese die wechselnden Seiteninhalte bei Datensatzwechsel möglicherweise nicht erkennen, wenn Datum bzw. Uhrzeit beim Client oder beim Server nicht korrekt eingestellt sind. Alternativ (und besser) ist die Einstellung eines Expiration Dates in den generierten Webseiten auf ein bereits abgelaufenes Datum.

Zu dem VFP-Beispiel gibt es eine mitglieferten kurze Dokumentation in der Datei README.TXT im Projektverzeichnis. Ein paar wesentliche Hinweise stehen auch am Anfang des C-Codes in der Datei FOXISAPI.CPP. Weitere Details sind im entsprechenden Vortragsdokument von Calvin Hsia (Microsoft) zu finden. Dieses kann man von http://calvinh3 (Remote Adress 157.55.147.71) unter dem Namen CUSTOLE.DOC downloaden.

Anhang: Abkürzungen

Nachfolgend nochmals eine Übersicht über die wichtigsten im Artikel verwendeten Abkürzungen:

Abkürzung

Beschreibung

DLL

Abk. für Dynamic Link Library

HTML

Abk. für Hypertext Markup Language

INETSRV.EXE

Internet Service Manager (Konfigurationsprogramm)

INETINFO

Internet Information Server-Anwendung

IIS

Abk. für Internet Information Server

IEXPLORE.EXE

Internet Explorer 4.0 (die vorigen Versionen 1.5 und 2.0 nicht verwenden!)

INETSRV\

wird im Text für das Verzeichnis des IIS verwendet, daß wahlweise im Hauptverzeichnis oder im SYSTEM32-Verzeichnis von NT unter den Namen INETSRV oder INETPUB angelegt wird.

SCRIPTS\

Unterverzeichnis von INETSRV\ für ausführbare Programme des IIS

WWWROOT\

Unterverzeichnis von INETSRV\ für einfache HTML-Seiten sowie ggf. die Startseite des Servers