Session D-HTML

Generierung von HTML-Seiten aus VFP 6.0

Detlef Nottbohm
INDISOFT GmbH - Hannover


Einleitung

Electronic Commerce, Web-Shops, Online einkaufen – Dieses alles sind Begriffe die heutzutage immer bekannter werden.

Um zum Beispiel einen Shop im Internet zu realisieren reicht es nicht mit statischen HTML-Seiten zu arbeiten. Ein solcher Webshop ist nicht flexibel genug um schnell neue Produkte in sein Angebot aufzunehmen. Er hat auch einen hohen Administrationaufwand.

Eine sinnvolle Realisierung ist die Generierung vom HTML-Seiten, die durch eine Interaktion des “Surfers” ausgelöst wird. Lösungsansätze, wie man HTML-Seiten mit Visual FoxPro 6.0 zu Verfügung stellt, sollen in dieser Session gezeigt werden.

Voraussetzungen

Damit Visual FoxPro 6.0 mit einem Webserver zusammen arbeitet benötigt man:

        ISAPI fähigen Webserver (z.B. Internet Information Server, Apache NT 1.3.x)

        FOXISAPI.DLL

        ComServer mit Visual FoxPro 6.0 geschrieben

Webserver und Foxisapi einrichten

Konfigurieren der FoxISAPI-Komponenten

Zur Installation der Hauptkomponenten von FoxISAPI gehen Sie folgendermaßen vor:

Kopieren Sie die Dateien Foxisapi.dll und Foxisapi.ini in den Skriptordner Ihres Webservers, beispielsweise C:\InetPub\scripts\.

Um den mit Visual FoxPro 6.0 erstellten COM-Server zu debuggen kopieren Sie die Programmdatei Odebug.prg in Ihr Visual FoxPro-Wurzelverzeichnis (das von der HOME( )-Funktion zurückgegebene Verzeichnis), beispielsweise C:\Programme\Microsoft Visual Studio\VFP98\.

Einsatz der Foxisapi.dll

Da die Foxisapi.dll free-threaded ist, kann es mehrere Visual FoxPro ISAPI-Automatisierungsserver zusammenfassen, um verbesserte Skalierbarkeit für Webanwendungen zu erreichen. Zusammengefaßte ISAPI-Automatisierungsserver ermöglichen einem freien ISAPI-Automatisierungsserver, eine Anfrage zu beantworten, wenn andere ISAPI-Automatisierungsserver beschäftigt sind. Um die Vorteile der Zusammenfassung von ISAPI-Automatisierungsservern zu nutzen, sollten die Instanzen der ISAPI-Automatisierungsserver persistent gehalten werden.

Die Anzahl der ISAPI-Automatisierungsserver, die zur Beantwortung von Anfragen zur Verfügung stehen, wird durch Einstellungen in der Foxisapi.ini-Datei angegeben. Zur Erzeugung eines Pools aus mehreren ISAPI-Automatisierungsservern, gibt man zusammen mit dem Namen des ISAPI-Automatisierungsservers, für den ein Pool erzeugt wird, einen Eintrag in eckigen Klammern an. Diesem Eintrag folgt eine Liste der ISAPI-Automatisierungsserver, aus denen der Pool besteht, mit einem Zahlenwert, der die maximale Anzahl von Instanzen angibt, die für jeden ISAPI-Automatisierungsserver erzeugt werden kann.

Die folgenden Zeilen in Foxisapi.ini erzeugen beispielsweise einen Pool von vier ISAPI-Automatisierungsservern zur Bearbeitung von Anfragen an Foxis.employee.

[foxis.employee]

foxis.employee=4

Der folgende URL zeigt wie ein Aufruf in einer HTML-Seite eingesetzt wird:

http://<ServerName>/Scripts/Foxisapi.dll/foxis.employee.startup

Generieren der HTML-Seiten

Klickt man die zuvor genannte URL an schickt der Webserver die erste HTML-Seite an den Browser.

Damit auch mehrere “Surfer” unabhängig voneinander die Inhalte geschickt bekommen, muß der “Surfer” eindeutig zugeordnet werden können. Dies geschieht indem er ein Cookie bekommt. Dieses Cookie kann man den Browser setzen lassen. Nachteil hierbei ist das man Cookies im Browser abschalten kann. Setzt man den Cookie mit in die URL kann man diesen Nachteil umgehen.

Dieses Cookie in der URL wird zufällig generiert und ist nur für die Dauer eines Besuches auf der Website gültig.

Die an den Browser geschickte HTML-Seite muß nun mit Hilfe des Visual FoxPro COM Servers zusammengebaut werden. Es erfordert also genaue Kenntnisse über den Aufbau einer HTML-Seite

TEXTMERGE-Befehl

Man kann die Seite in einem String zusammenbauen und an den Webserver zurückgeben. In der Abbildung oben wird in der Methode employee.skipit() die HTML-Seite zusammengebaut. Der Returnwert der Methode ist die generierte HTML-Seite.

Ein Codeauschnitt läßt erkennen, wie eine Seite aufgebaut werden kann:

SET TEXTMERGE TO (m.tmp)

SET TEXTMERGE ON NOSHOW

\\HTTP/1.0 200 OK

\Content-Type: text/html

\Expires: Sunday 15-May-94 14:00:01 GMT

\

\<HTML>

\

\<!--This HTML Page was generated by Visual Foxpro -->

\

<META HTTP-EQUIV="Refresh" CONTENT=20>

.

.

.

\</html>

SET TEXTMERGE OFF

SET TEXTMERGE TO

CREATE CURSOR temp (mm memo)

APPEND BLANK

APPEND MEMO mm FROM (m.tmp)

erase (m.tmp)  && erase the temp file

rv = temp.mm

USE IN temp

RETURN m.rv

In diesem Beispiel wurde der TEXTMERGE-Befehl benutzt.

GENHTML und _HTML.VCX

Mit Visual FoxPro 6.0 gibt es auch andere Möglichkeiten, indem man das Programm GENTHML.PRG verwendet. GENHTML benutzt die Foundationclass  _HTML.VCX.

Die Syntax des Programms GENHTML ist leider in der deutschen Hilfe falsch beschrieben.

Richtig ist:

HTML generator using classes in _HTML.VCX.

 

Parameter list:

cOutFile:         Specifies the name of the output .HTM file.  If a file name             

                 without an extention is specified, .HTM is used.

vSource:       Specifies the source file name, alias or object.

nShow:         0/.F./Empty = Generate output file only.

               1 = Create output file and view generated file.

               2 = Create output file and show generated file

                     in Internet Explorer.

            3 = Create output file and show based on Save As HTML dialog

                     selection.

               4 = Create PUBLIC _oHTML object and generate file.

               5 = Create PUBLIC _oHTML object without generating file.

vIELink:       Specifies a link to Internet Explorer object or Web

               Browser control.

               .F./Empty = No link is created.

               .T. = Automatically create instance of Internet Explorer.

               Object = Reference to Internet Explorer or Web Browser control.

cStyle:        Specifies Style ID reference in GenHTML.dbf.

cScope:        Specifies the scope of scan by setting .cScope.

cHTMLClass:    Specifies the Class, and optionally, the class library

               and module, that is instantiated for HTML object.

               Syntax: Class[,ClassLibrary[,Module]]

Im Beispiel unten wird eine einfache Ausgabe in Tabellenform gezeigt

HTML-Ausgabe mit GENHTML

PUBLIC _oHTML

LOCAL lnShow,oIE,lnLastSelect

 

lnLastSelect=SELECT()

lnShow=2

SELECT Company, Contact, Title, Address, Phone, Fax FROM ;

      (HOME(2)+"data\customer.dbf") ;

      WHERE Country="Deutschland" ORDER BY Contact INTO CURSOR ;

      German_Contacts

DO (_GENHTML) WITH SYS(2023)+"\html1.htm",ALIAS() ;   

     +",Name@contact,Adresse@address,Titel@title",lnShow,oIE,"ListTable"

 

USE

IF USED("customer")

   USE IN customer

ENDIF

SELECT (lnLastSelect)

RETURN

Das Ergebnis im Browser sieht dann so aus: 

Nutzt man die in der in der Tabelle GENHTML.DBF (im Visual FoxPro 6.0 Verzeichnis) vorhandenen Style-Definitionen läßt sich die Ausgabe auch noch etwas farbiger gestalten. Der Definition eigener Styles sind hier sicherlich keine Grenzen gesetzt.

Zusammenfassung

Es konnten hier nur Lösungsansätze gezeigt weden. Die entgültige Realisierung eines solches Webprojektes erfordert neben der reinen Programmiertätigkeit unter Visual FoxPro natürlich auch einiges an gestalterischen Aufgaben, die es zu lösen gilt. Ein Kunde möchte ja schließlich auch seine Firma und seine Produkte in einer ansprechenden Weise im Internet dargestellt wissen.

Für Fragen stehe ich Ihnen jederzeit unter Nottbohm@indisoft-gmbh.de zur Verfügung. Sie erreichen mich auch auf unserer Website www.indisoft-gmbh.de.