Erstellen Sie schnell und einfach Datenbankapplikationen mit Visual Extend

von Andrew Ross McNeill

Erschienen in der Zeitschrift FoxPro Advisor Magazine, Ausgabe März 2004

 

Die Erstellung von mehrsprachigen kaufmännischen Anwendungen wird durch den Mangel an vollständigen Entwicklungsumgebungen bzw. Werkzeugen behindert.

Visual Extend mag vielleicht in Nordamerika nicht das Framework mit der höchsten Verbreitung sein, aber jenseits des Atlantiks ist es weit bekannt und sehr geschätzt. Von Natur aus ist das Framework mehrsprachig mit Dokumentation und Webseiten in Deutsch, Englisch und anderen Sprachen. Es wird derzeit von der deutschsprachigen FoxPro User Group, kurz dFPUG, vertrieben. Als ein Ergebnis werden beim Erstellen von Anwendungen die zusätzliche Sprachen nicht einfach als eine Erweiterung in die Anwendung eingebunden sondern direkt in die Schlussanwendung hineingeneriert.

Visual Extend konzentriert sich darauf, der schnellste Weg für die Erstellung einer kaufmännischen Anwendung im Stil von Microsoft Office zu sein, die nicht nur arbeitet, sondern auch gut aussieht und über eine schnelle Bedienung verfügt. Dies gelingt dem Produkt und es stellt eine große Sammlung von zusätzlichen Funktionalitäten in der erstellten Anwendung zur Verfügung. Das mag manchmal zuviel des Guten sein, aber beantwortet dafür die oft und gerne vom Kunden gestellte Frage „Und kann Ihre Anwendung auch das und das tun?“.

Visual Extend 8.0 (VFX) beinhaltet ein Anwendungsframework komplett mit Assistenten, zusätzlichen Tools und einer VFP 8.0 Task Pane, die das Managen von Projekten vereinfacht (siehe Bild 1). Es hilft allerdings nicht bei der Definition von Datenbanken und Tabellen und stellt auch keine zusätzlichen Metadaten bereit, um das Data Dictionary von VFP zu verbessern. Es setzt voraus, dass die von VFP bereitgestellten Werkzeuge für die Grundbedürfnisse ausreichen. Der Schwerpunkt des Frameworks ist die Maskengestaltung. Berichte werden automatisch erzeugt und individuell erzeugte Berichte werden unterstützt, aber es gibt keine Tools für ihr Design.

 

Bild Nr.1: Erweiterung der Benutzeroberfläche von Visual FoxPro. Visual Extend 8.0 bietet einen Task Pane und einen erweiterten Menüdesigner

 

 

Schnellstart

Sobald VFX installiert ist, wird  VFXMNU im Builderverzeichnis aufgerufen und fügt ein VFX-Menü zur VFP-Umgebung hinzu. Aus der Task Pane oder dem VFX Menü muss man den Anwendungsassistenten auswählen. Der Assistent fordert sowohl einen Pfad und Projektnamen wie auch Informationen über den Autor. Er konfiguriert auch die Grundeinstellungen einschließlich der Standardsprache, einem externen Startprogramm (für einfaches Update aus der laufenden Anwendung) und sogar ein Produktaktivierungs-Feature, um die Lizenzierung für die Endanwendung zu verwalten. Es gibt nur vier Schritte im Assistenten und wenn sie durchgeführt sind, ist der Rahmen der Anwendung komplett erstellt - einschließlich der automatischen Anwendersicherheit, Startseite u.v.a..

VFX bietet keine Funktionen für die Tabellendefinition, deshalb bleibt diese Aufgabe dem Entwickler und den entsprechenden Werkzeugen von Visual FoxPro überlassen. VFX bietet zumindest einige Funktionen für die automatische Schlüsselgeneration an. Die Rahmenanwendung hat über ein Dutzend VFX-interne Tabellen, die Zugriffsrechte verwalten, sowie für ein Verwendungsprotokoll und weitere anwendungsspezifische Features benötigt werden (siehe Tabelle1).

Tabelle 1: Die VFX Tabellen.

Tabellenname

Verwendungszweck

Diese Tabellen werden von VFX benutzt, um Anwendungsoperationen zu protokollieren und zu verwalten.

Das Design von Formularen ist ein Prozess in drei Schritten. Zuerst muss man den Formularassistenten laufen lassen, um ein neues Formular zu erzeugen, das auf einer existierenden VFX-Klasse basiert. VFX bietet dafür 11 verschiedene Formularklassen an oder man kann eine eigene Subklasse verwenden. Die Maskenklassen werden für verschiedene Zwecke bereitgestellt wie z.B normale Datenerfassung mit einer oder mit zusätzlich einer abhängigen Tabelle, Lookup-Tabellen oder sogar für Eingabeformulare mit Treeview-Darstellung.

Wenn das Formular erzeugt ist, fügt man die Tabellen zur Datenumgebung der Maske hinzu. Dann wird der passende Power Builder des VFX Menüs aufgerufen. Der Power Builder sieht unterschiedlich aus, abhängig von der ursprünglichen Formularklasse (siehe Bild 2). Man zieht oder bewegt die Felder vom Feldassistenten in die Feldliste. Jedes Formular hat mindestens eine Tabelle. Man erhöht die Zahl der Reiter, um die Information aus der Tabelle auf mehrere Reiter zu verteilen.

 

Bild Nr.2: Erstellen von Formularen. Der Power Builder für VFX Formulare benutzt einen Feldassistenten, um Dateien aus Tabellen oder Ansichten der Datenumgebung auszuwählen.

Die Auswahl für die Basisklasse des Steuerelements stellt eine Liste von mitgelieferten VFX-Klassen einschließlich Auswahllisten und Comboboxen bereit. Auswahllisten sind mit einer Lookuptabelle verbunden, die einen anderen Assistenten nutzt. Standardformulare für die Datenbearbeitung sind automatisch mit einem Grid versehen, dem berechnete Felder direkt hinzugefügt werden können und man außerdem festlegt, welche Spalten die inkrementelle Suche unterstützen.

In den Treeview-Fomularen kontrolliert der Treeview-Reiter, wie die jeweiligen Nodes erscheinen. Man gibt das eindeutige ID Feld und das Parent ID Feld an und im Treeview erfolgt darauf basierend die hierarchische Darstellung. Das Treeview-Formular erfordert eine entsprechende Speicherung der Daten. Wenn z.B. das ID-Feld der Node CLASSID ist, wird das ID-Feld des Parent dem selben Feld zugeordnet.

Man führt die formspezifischen Einstellungen in dem abschließenden Formularoptionsreiter auf. Wenn eine Tabelle bereits einen dafür definierten Bericht besitzt, kann man diesen hier angeben. Während die generierte Grundversion der Anwendung bereits einen definierten Toolbar besitzt, klicken Sie auf Speedbar, um dem Formular eine eigene Toolbar zuzuordnen. Es gibt auch Optionen, um festzulegen, ob das Formular ein Child-Formular hat, ein Child-Fomular ist oder ob es weitere sogenannte „More“-Funktionen gibt, die man später hinzufügen kann (siehe Formdesign weiter unten).

Man klickt OK zur Speicherung des Formulars. Der Formularname wird automatisch der VFXOPEN-Tabelle hinzugefügt und erscheint dann im Öffnen-Dialog im Windows-XP-Stil.

Das Erstellen von Formularen ist offensichtlich die zeitintensivste Aktivität während dieses Prozesses. Nachdem man den Power Builder benutzt hat, muss man das Formular editieren und den Assistenten für spezielle Steuerelemente aufrufen, um weitere Eigenschaften festzulegen und eingebaute Funktionen zu aktivieren.

Leider gibt es keine Werkzeuge zur Berichtsdefinition oder zusätzliche Features dazu beim Erstellen einer VFX-Anwendung, es gibt nur Unterstützung für das Maskendesign. Sogar dann, wenn man das Handbuch oder die Anleitung ‚Schnelleinstieg in VFX’ benutzt, gibt es keine Referenz zu Berichten. Man schließt also die Formulare und bringt das Projekt dazu, die Anwendung laufen zu lassen, um zu sehen, was generiert worden ist.

Und die Ergebnisse sehen folgendermaßen aus....

Die daraus resultierende Anwendung aus dem Schnellstart beginnt mit einer Startmaske mit einem Fisch (das Logo von VFX) und einer Benutzeranmeldung. Das Look & Feel der Anwendung passt zu Windows XP komplett mit einer Task Pane auf der linken Seiten, die den direkten Zugang zu Formularen ermöglicht, einem Menüs „Favoriten“ usw..

 

Bild Nr.3: Eine “Fishy Looking Application”. Der VFX Rahmen bietet eine sehr coole Benutzeroberfläche, die Windows XP Themes unterstützt - allerdings mit einem wirklich unverwechselbaren Logo.

Der XP-Öffnen-Dialog auf der linken Seite kann sehr einfach angepasst werden. Man ändert das ObjectID-Feld in der VFXFOpen- Tabelle einfach auf die Überschrift, die man anzeigen will. Die Liste ist auf Alphabetische Sortierung voreingestellt.

Obwohl während der Anwendungsgenerierung keine Berichte erzeugt werden, besitzt jedes Formular einen eingebauten Bericht, der alle im Formular verfügbaren Daten anzeigt. Ein Bericht ist nicht nur lediglich eine schnelle Vorschau, sondern kann auch als PDF via eMail verschickt, als PDF exportiert, mit Filtern eingeschränkt sowie individuell angepasst werden.

Die Beachtung der Benutzerrechte ist bei der Anwendung automatisch eingeschaltet. Anwender können in einer entsprechenden Maske hinzugefügt werden. Die Sicherheit wird durch einen User Level mit Administratoren auf Ebene 1 kontrolliert. Man wählt Benutzerrechte aus, um den Zugang zu den Levels in den individuellen Formularen zu kontrollieren. Man gibt für jedes Formular einen unterschiedlichen Sicherheitslevel an. Verschiedene Levels werden beim Anzeigen, Anlegen, Bearbeiten und Löschen der Eingänge gesetzt. Klassen können z.B. einen Ansichtswert von 99 besitzen, der es allen Benutzern erlaubt, sie zu sehen, aber einen Bearbeitungswert von 3, sodass Benutzern mit einem Sicherheitslevel größer als drei nicht erlaubt ist, den Eintrag zu bearbeiten.

Das Menü „Werkzeuge“ bietet nicht nur den Zugang zu den Zugriffsrechten, sondern auch zu anderen praktischen Funktionen. Man wählt aus dem Menü den Punkt „Datenbank“, um einige oder alle Tabellen der Anwendung wieder mit einem Index zu versehen oder zu komprimieren?. Man wählt „Systemfehler“, um alle aufgetretenen Fehler zu sehen. Das Fehlerformular basiert auf der gleichen VFX-Klasse für Datenmasken und daher können die Fehler je nach Bedarf auch ausgedruckt, gemailt oder gelöscht werden. Wenn man das kleine Kamera-Bild anklickt oder Hardcopy im Menü auswählt, wird die aktuelle Bildschirmansicht sofort ausgedruckt - eine ebenfalls sehr praktische Funktion. Menüpunkte zur Datensicherung sowie zur Datenwiederherstellung sind ebenfalls direkt verfügbar.

Beim Wählen von „Optionen“ aus dem Werkzeugmenü wird ein leerer Dialog für Systemeinstellungen angezeigt. Hier erscheinen nach Eingabe automatisch alle Einträge aus der mitgelieferten VFXSYS-Tabelle.

Der Aufbau der Anwendung

Der Anwendungsassistent kopiert alle notwendigen Klassenbibliotheken in ein LIB-Verzeichnis für das Projekt und zwingt damit jede Anwendung zum Arbeiten mit einer gesonderten Kopie der Bibliotheken.

Das Hauptprogramm VFXMAIN.PRG bereitet die Umgebung vor und deklariert eine Anzahl von öffentlichen Variablen, die zum Teil Objektreferenzen beinhalten. Die Hauptanwendungsklasse cApplication ist eine Subklasse von cFoxApp und im Hauptprogramm enthalten. Der Code in VFXMAIN ist gut auf Englisch kommentiert, so dass man kleinere Einstellungen direkt selbst ändern kann. Unter anderem auch die im Anwendungsassistenten ursprünglich eingestellten, wie zum Beispiel die Verwendung von Hooks oder von Aktivierungsschlüsseln.

VFXMain referenziert einen Standard-Toolbar mit dem Namen govfptoolbar. Dieses Objekt ist eine Custom-Klasse, die auch die Standard-Toolbar von Visual FoxPro mit verwaltet und die Standardfeatures verbirgt, wenn die Anwendung innerhalb der Entwicklungsumgebung von VFP läuft. Die tatsächliche Anwendungstoolbar für die Laufzeitumgebung ist in einer eigenen Klassenbibliothek mit dem Namen APPL.VCX enthalten.

Wie bei den meisten Frameworks ist der Großteil des Quellcodes in den mitgelieferten Klassen versteckt. Änderungen nimmt man durch Setzen von Eigenschaften oder durch Überschreiben des Codes vor.

Include-Dateien werden benutzt, um einige der anwendungsweit gültigen Einstellungen zu anzupassen. Man ändert den Anwendungsnamen, Autor und die Copyright Informationen in der Datei USERTXT.H. Man ändert Namen der Datenbank und Pfade auf Tabellen in der Datei USERDEF.H.

VFX benutzt auch freie Tabellen, um Variablen zu managen (siehe Tabelle 1). Die VFXSys-Tabelle enthält ursprünglich vier Einträge. Man fügt dieser Tabelle Felder hinzu, um eigene systemweite Optionen zu definieren. Nach dem Start der Anwendung, sind diese neuen Felder als Variablen mit der Vorsilbe gs_ verfügbar. Wenn man zum Beispiel ein Feld „Maxusers“ in die VFXSys-Tabelle hinzufügt, ist automatisch eine öffentliche Variable namens gs_maxusers definiert.

Ebenso definiert die VFXUser-Tabelle benutzerbezogene Variablen mit einem gu-Präfix. Man fügt der VFXUser# Tabelle Felder hinzu, um weitere Benutzereinstellungen verwalten zu können.

Sich durch das VFX Projekt und die Dokumentation durchzuarbeiten, kann etwas frustrierend sein. Es gibt keine Assistenten für viele Features oder Eigenschaften und die Erklärungen zu finden, wie man sie benutzen soll, ist manchmal etwas trickreich. Gott sei Dank zeigt die Beispielanwendung, wie man eine Menge der großartigen Features verwenden kann. Auch auf den Webseiten finden sich eine Menge nützlicher Tipps und Tricks.

Der VFX-Menüdesigner ist eines der coolesten Features des Frameworks. Er benutzt eine erweiterte Struktur der Standard FoxPro MNX-Datei. Im Projektmanager erscheint auch die erweiterte Definitionsdatei als Menü, aber wenn das Menü geöffnet wird, wird der VFX-Menüdesigner (siehe Bild 1) statt dem normalen Menüdesigner angezeigt. Der VFX-Menüdesigner bietet eine wesentlich erweiterte Benutzeroberfläche verglichen zum Menüdesigner von Visual FoxPro. Unter anderem kann man sehr viel einfacher die Menüeinträge verschieben. Die MPR-Datei wird beim Speichern des Menüs automatisch generiert. Das ist praktisch, weil trotz gleicher MNX-Dateistruktur die VFX-Menüdefinitionen mit den Endungen VMX, VMT und VMR versehen werden.

Datenzugang und Geschäftsregeln

VFX Datenklassen benutzen die normale Datenumgebung für den direkten Datenzugriff. Die cApplication-Klasse öffnet automatisch die Hauptdatenbank, die durch den Anwendungsassistenten festgelegt wurde. Alles weitere wird im Prinzip den eingebauten Funktionen von Visual FoxPro überlassen. Sobald allerdings die Tabellen geöffnet sind, benutzt man den cDataTableMgr zur Navigation und zur Bearbeitung von Daten:

USE classes
1o=NEWOBJECT („cDataTableMgr“, „vfxctrls.vcx“)
1o.Next()
1o.Insert()

** Benutzen Sie Replace oder andere Funktionen hier

1o.Save()

Es gibt keinen Zwang, speziellen Code im cDataTableMgr auszuprogrammieren. Wenn Sie also eigene Funktionen für Datenabfragen oder andere Aufgaben benötigen, schreiben Sie ganz normalen FoxPro-Code in die entsprechenden Formularmethoden.

VFX erwartet, dass Regeln und Validierungen, die direkt mit den Tabellen verbunden sind, direkt im FoxPro Datenbankcontainer designt werden und nicht in der Anwendung. Formularspezifische Validierungen können beim jeweiligen Formular in der OnSave-Methode oder durch den Gebrauch von Hooks (sieh weiter unten) hinzugefügt werden.

 

Formulare und Berichte

Man benutzt den VFX-Formularassistenten, um die Grundversion einer Maske zu erstellen. Der Vorgang ist wie beim Schnellstart beschrieben: a) den Assistenten laufen lassen oder eine Maske basierend auf der Klassenbibliotek erzeugen; b) Eintrag der Tabellen in der Datenumgebung der Formulare und c) Aufrufen der VFX-Powerbuilder, um alle Eigenschaften entsprechend einzustellen. Von da ab kann man manuell ggf.  weitere Funktionen in den jeweiligen Methoden ausprogrammieren.

 

Bild Nr.4: Das Setzen der Formularoptionen. Wenn man die Power Builder benutzt,  konfigurieren die Formularoptionen, wie das Formular ausschauen wird, ohne dass man viele Eigenschaften im Eigenschaftsfenster oder Methodencode setzen müsste.

 

Setzen Sie entsprechende Haken bei den Formularoptionen, um weitere Funktionalitäten oder Masken für abhängige Tabellen zu aktivieren. Passen Sie den Quellcode an, um darüber hinaus weitere Funktionen oder Masken aufzurufen. Setzen Sie den OnMore-Schalter woraufhin in der Standard-Toolbar ein neuer Button eingeblendet wird, der die OnMore Methode des Formulars aufruft. Der Assistent erstellt automatisch Beispielcode, der ein weitere Formular aufruft.

Wie oben bereits erwähnt, bietet das VFX Framework keinerlei Werkzeuge oder Assistenten, um mit Berichten zu arbeiten. Das Handbuch erwähnt Berichte überhaupt nicht, obwohl diese in der Anwendung automatisch unterstützt werden. Die automatisch generierten Berichte sind ausgesprochen hilfreich, aber müssen nicht immer ausreichend sein. Man benutzt den Formularassistenten oder setzt die cReportName-Eigenschaft der Formularklasse, um stattdessen eine selbst erstellte FRX-Datei zu verwenden. Wenn ein selbstdefinierter Bericht verwendet wird, ist die gleiche PDF- und eMail-Funktionalität verfügbar, wie auch in den automatisch generierten Berichten.

Erweiterung des Framework

Der Anwendungsassistent besitzt eine Checkbox zum Einschalten sogenannter Hooks#. Setzen Sie die Eigenschaft nEnableHook auf 1, um dieses Feature innerhalb VFXMAIN in Betrieb zu nehmen. Wenn es einmal gesetzt ist, führt jede Aktion, die auf einem VFX-Formular aufgerufen wird, zu einem zusätzlichen Aufruf einer Hook-Methode. Man fügt den Code für die entsprechenden Hooks in ein CASE-Konstrukt im VFXHOOK-Programm ein, welches ein anfänglich leerer Rahmen ist, der das Ereignis, das Objekt und das Form als Parameter gesendet bekommt.

Verwenden Sie das integrierte Verfahren mit Aktivierungsschlüsseln, um die nicht genehmigte Verwendung einer Anwendung auf unregistrierten Computern oder den Zugriff auf spezielle Funktionen oder ganze Modulen zu verhindern. Jede Anwendung kann bis zu 32 verschiedenen Zugangscodes haben. Die Kombination der Installationsschlüssel mit dem Aktivierungsschlüssel definiert, was ein Anwender tun darf. Man setzt die lUseActivation- Eigenschaft in der cApplication-Klasse auf .T., um sie einzuschalten. Das Aktivierungsfeature fügt dem Hilfemenü eine Registermenüoption hinzu. Wenn der Anwender diese Option auswählt, generiert die Anwendung einen eindeutigen Registrationsschlüssel für den Computer des Users und der User wird nach dem Aktivierungsschlüssel gefragt. Dieser kann dem Anwender über eMail oder Telephon mitgeteilt werden, um die Anwendung oder Funktion freizuschalten.

Die Lösung bezüglich der mehrsprachigen Benutzeroberflächen der mit VFX erstellten Anwendungen basiert auf der Verwendung von Include-Dasteien. Das Include-Verzeichnis enthält Unterverzeichnisse für jede unterstützte Sprache. Man benutzt den MessageEditor, um den Inhalt der Tabelle VFXMSG zu bearbeiten. Man klickt „Build“ im Editortool an und das im USERMSG.H enthaltene Verzeichnis wird in der gewählten Sprache neu generiert. Für das Ausliefern der Anwendung kopiert man die USERMSG.H Datei aus dem Verzeichnis mit der gewünschten Sprache und die Anwendung wird in dieser Sprache laufen. Alle angezeigten Texte im Code und in den Menüs werden dieser Include-Datei entnommen.

VFX unterstützt die erweiterte Anbindung an das Microsoft Office-Paket. Indem man ein paar Eigenschaften setzt, kann eine Anwendung Serienbriefe mit Microsoft Word erzeugen oder Daten aus Microsoft Outlook importieren.

Die Benutzeroberfläche ist generell leicht anpassbar. Darüberhinaus enthält das Framework einen Rahmen für eine „ActiveDesktop“’-Oberfläche, welche die typische Office-Oberfläche durch eine interaktivere Hintergrundseite erweitert. Das VFX-Framework unterstützt außerdem Microsoft Agents, wenn Sie denn eine dieser bunten Figuren mitten in Ihrer Anwendung rumgeistern haben möchten.

Benötigt man eine Hilfedatei für die Anwendung? Dann benutzt man den Hilfeassistenten des VFX 8.0 Menüs. Man wählt den Punkt „Generate Context Ids“, um IDs für eine kontextsensitive Hilfe in einer Tabelle namens VFXHELP zu erzeugen. Danach ändert man den Inhalt in der VFXHELP Tabelle direkt oder klickt F1, wenn sich der Cursor in einem Objekt befindet. Eine Maske zur Bearbeitung des Hilfetextes erscheint mit mehreren Feldern für die Zuordnung zu Hilfedatei, Kapitel, Titel und natürlich dem aktuellem Inhalt des Hilfetextes. Wenn die Änderung eingegeben sind, wählt man die Funktion „Generate Help Project“ des Hilfeassistenten und VFX erzeugt automatisch ein Projekt für eine HTML-Hilfedatei, die Sie nur noch kompilieren müssen. Mein einziger Wunsch in diesem Bereich wäre, dass es für die Hilfedatei bereits Standardtexte für Standardfunktionen gäbe, damit man nicht alles selbst schreiben muss.

Visual Extend eignet sich hauptsächlich für die Erstellung von Desktopanwendungen und hat keine direkte Unterstützung für COM oder auf dem Web basierende Schnittstellen. In der nachfolgenden Übersicht eine Zusammenfassung der wesentlichen Stärken und Schwächen des Frameworks:

Tabelle 2: Zusammenfassung der Stärken und Schwächen des Frameworks Visual Extend.

 

Stärken

Schwächen

 

Schlussfolgerung

Visual Extend ist ein großartiges Framework, um schnell und einfach Datenbankanwendungen zu erstellen. Es benötigt weder weitergehende Kenntnisse von objektorientierter Programmierung oder Mehrschichtenarchitektur noch behauptet es, ein Werkzeug für Theorie-Profis zu sein. Stattdessen konzentriert es sich darauf, die Entwickler Microsoft Office kompatible, mehrsprachige Benutzeroberflächen mit geringstmöglichem Aufwand bauen zu lassen. Man kann seine erste VFX Anwendung mit geringem Zeitaufwand mit den Assistenten zusammenstellen. Danach passt man die Anwendung individuell an, indem man entsprechende Einträge in Tabellen ändern oder neu anlegt und die angebotenen Tools benutzt. Die Dokumentation und die Beispielanwendungen zeigen, was möglich ist, und der Code ist relativ einfach zu verstehen. Was in dieser Version noch fehlt, sind die Werkzeuge und die Assistenten, die für Berichte und Tabellen das tun, was VFX bereits im Bereich Maskendesign bereitstellt.

Visual Extend: Was der Hersteller dazu sagt

Hier einige allgemeine Angaben rund um das Produkt gemäß Antworten des Herstellers auf unsere Fragen:

Tabelle 3: Allgemeine Angaben und Informationen rund um das Produkt Visual Extend.