Session D-VFXB

Die neue Visual Extend 7 (VFX) Beispielanwendung als Goldgrube für eigene  Entwicklungen

Uwe Habermann
Uwe@Habermann-Leu.de


Einleitung

Visual Extend ist eine Klassen Bibliothek und ein Builder unterstütztes Framework zur hocheffizienten Erstellung von VFP Anwendungen im Fileserver wie im Client/Server Bereich. Die Entwicklung von Visual Extend wurde 1993 gestartet, kam 1994 erstmals auf den Markt und kann heute als eines der etabliertesten Frameworks im VFP Umfeld bezeichnet werden.

In dieser Session wird die VFX 7 Test Application detailliert vorgestellt und alle darin enthaltenen Beispiele werden illustriert. Ziel dieser Session ist es, alle VFX Features zu erkennen und für die eigenen Lösungen den geeignetsten Weg zu finden ohne dabei das Rad neu erfinden zu müssen.

Schwerpunktthemen sind: Active Desktop, Standard-Datenbearbeitungsformulare, OneToMany-Formulare, Mover, Askform, IDX Know How, Gauge, PickDate, Hooks, Linked Child Forms, Multi-Column-Sort im Grid, Resize, Delayed-Instanziierung, Audit-Trail, Office-Integration, Report Selection, Wizard-Klasse, Microsoft Agent, Local View and C/S Basics. VFX Wissen ist von Vorteil, aber nicht Bedingung.

VFX7Test im Detail

Die Beispielanwendung VFX7Test zeigt an zahlreichen Beispielen die Leistungsfähigkeit von VFX 7. Es sind Beispiele für Formulare basierend auf VFP-Tabellen und lokalen Ansichten vorhanden. Für den C/S-Bereich gibt es einige Beispiele mit auf Remote Views basierenden Formularen.

Active Desktop

Der Active Desktop gibt den Anwendungen ein professionelles Startbild. Auf dem sonst leeren Bildschirm werden Bilder und Auswahlmöglichkeiten angeboten. Durch das Bewegen der Maus über die Bilder wird das zugehörige Menü unterhalb der Bilder angezeigt. In den Menüs befinden sich unterstrichene Menüpunkte, die ähnlich Hyperlinks im Internet Explorer, einfach angeklickt werden können und eine Aktion ausführen. In den meisten Fällen wird als Aktion ein Formular gestartet werden.

Die Klasse des Active Desktop befindet sich in der Klassenbibliothek Appl.vcx und kann nach den Wünschen des Entwicklers um beliebige Steuerelemente erweitert werden.

 

Standard-Datenbearbeitungsformulare

Ein VFX-Datenbearbeitungsformular basiert auf einer der Klassen cDataFormPage oder cTableForm. Auf einem cDataFormPage-Formular befindet sich ein Seitenrahmen mit mindestens einer Seite zur Datenbearbeitung. Auf einer weiteren Seite befindet sich ein Grid. Hier ist die inkrementelle Suche nach Werten in allen Spalten möglich.

Solche Standard-Formulare lassen sich mit Hilfe der VFX-Builder ohne Programmierung oder manuelles einstellen von Eigenschaften erstellen. Die Formulare sind nach der Erstellung mit dem VFX-Form-Builder sofort funktionsfähig. Die Formulare können sowohl über den Projekt-Manager als auch über Vfxmain.prg gestartet werden.

Beispiele für Standard-Formulare sind Parent.scx, Item.scx für tabellen-basierte Formulare. Parent2.scx basiert auf einer lokalen Ansicht. Das Formular Xvparent.scx basiert auf einer Remote Ansicht.

OneToMany-Formulare

Ein OneToMany-Formular hat im oberen Teil die gleiche Funktionalität wie ein Formular basierend auf cDataFormPage. Im unteren Teil befindet sich ein Childgrid. Hier werden Child-Daten im Grid angezeigt und können auch gleich im Grid bearbeitet werden. Das Childgrid befindet sich auf einer Seite eines Seitenrahmens. Mit dem VFX - OneToMany Form Builder können auch mehrere Seiten für Childgrids angelegt werden.

Mover

Die Mover-Klasse erlaubt die Auswahl von mehreren Werten mittels Listboxen. In einer Listbox werden die zur Verfügung stehenden Werte angezeigt. Die andere Listbox enthält die ausgewählten Werte.

Ein Beispiel zur Verwendung eines Mover-Dialogs befindet sich im Formular Parent.scx.

Askform

Die Askform entspricht in etwa einer Messagebox, hat jedoch eine erweiterte Funktionalität. Die Beschriftungen der (maximal) drei Schaltflächen können als Parameter übergeben werden. Außerdem ist es möglich ein Timeout für die Messagebox festzulegen. Bei erreichen des Timeouts ohne Benutzeraktion wird ein Rückgabewert geliefert, der dem Drücken der Standard-Schaltfläche entspricht.

 

Ein Beispiel zur Verwendung der Funktion Askform() befindet sich im Formular Parent.scx.

IDX Know How

VFX macht von vorhandenen Indexschlüsseln bestmöglichen Gebrauch. Für die inkrementelle in VFX-Powergrids durchsucht VFX automatisch alle vorhandenen Indexschlüssel der verwendeten Tabelle. Für Zeichenfelder wird ein Indexschlüssel mit UPPER()-Klausel erwartet. Für Datumsfelder wird ein Indexschlüssel mit DTOS()-Klausel erwartet.

Wenn VFX keinen passenden Indexschlüssel findet, wird eine temporäre Indexdatei angelegt. Diese Indexdatei wird gelöscht, sobald das Formular geschlossen wird. Ferner wird die Indexdatei gelöscht, wenn das Formular in den Bearbeitungsmodus oder in den Einfügemodus wechselt sowie beim Löschen von Datensätzen. Das ist sinnvoll weil laufende Transaktionen, wie sie z. B. im RI-Code verwendet werden, zu VFP-Laufzeitfehlern führen würden. VFP erlaubt keine temporären Indexdateien, wenn mit Transaktionen gearbeitet wird.

Wenn in einem Formular Transaktionen verwendet werden, kann auf Wunsch nach der Datenbearbeitung der zuvor gültige Indexschlüssel wieder erstellt werden. Dem Anwender wird vorgetäuscht, dass die gewählte Sortierfolge ständig erhalten bleibt.

    lremakeidxafterclear = .T.&& Index nach der Bearbeitung wieder erstellen.

Wenn in einem Formular und jeglichem daraus aufgerufenen Code keine Transaktionen ausgeführt werden, also in den beteiligten Tabellen auch kein RI-Code hinterlegt ist, können Sie in Vfxmain.prg einstellen, dass temporäre Indexdateien bei der Datenbearbeitung nicht gelöscht werden.

    lnoclearidxonedit = .t.&& Index zum bearbeiten nicht löschen.
    lnoclearidxoninsert = .t.  && Index zum einfügen nicht löschen.
    lnoclearidxondelete = .t.&& Index zum löschen von Datensätzen nicht löschen.

Temporäre Indexdateien werden in jedem Fall beim Schließen eines Formulars gelöscht.

Gauge

VFX bietet 2 Möglichkeiten den Fortschritt von lange andauernden Vorgängen zu verdeutlichen.

Die einfache Variante, realisiert mit der Formularklasse cGaugeWin, zeigt einen Balken zur Anzeige des Fortschritts an.

Mit dem Formular Vfxmtr.scx kann eine Fortschrittsanzeige mit Anzeige der Restzeit dargestellt werden.

 

Beispiele für die Verwendung beider Fortschrittsanzeigen befinden sich im Formular Parent.scx.

PickDate

Dis Klasse cPickDate stellt ein Steuerelement zur Auswahl eines Datums zur Verfügung. Es wird das ActiveX-Control Microsoft Kalender verwendet. Bei der Erstellung eines Setups muss dieses ActiveX-Control mit in das Setup einbezogen werden. Ferner wird dieses ActiveX-Control von verschiedenen Microsoft-Produkten installiert, z. B. dem Office.

 

Hooks

Das Konzept der Hooks wurde in VFX 7 erweitert. Bisher war es möglich durch einen Hook innerhalb einer VFX-Methode einen eigenen Codeblock auszuführen. Über den Rückgabewert des Hooks konnte man steuern, ob der noch folgende VFX-Code in der Methode weiter ausgeführt werden sollte oder nicht. Der Rückgabewert, den die VFX-Methode dabei lieferte, konnte nicht beeinflusst werden und war in VFX fest vorgegeben.

Mit den erweiterten Hooks in VFX 7 kann nun zusätzlich der Rückgabewert der Methode vom Hook gesteuert werden.

Linked Child Forms

Zu den leistungsfähigsten Eigenschaften von VFX gehört die Verbindung von Formularen. Es ist möglich von einem Parent-Formular mehrere Child-Formulare gleichzeitig zu steuern. Auch kann ein Child gleichzeitig Parent für ein anderes Childformular sein.

Multi-Column-Sort im Grid

Durch einen Doppelklick auf einen Gridheader kann in VFX-Grids die entsprechende Spalte sortiert werden. Wenn für die Spalte kein geeigneter Index vorhanden ist, wird von VFX automatisch ein temporärer Index angelegt. Soll die Suche um eine zusätzliche Spalte erweitert werden, drückt man die Taste Strg und klickt gleichzeitig auf einen weiteren Header. Die Rangfolge der Sortierung wird in den Headern durch Zahlen in Klammern dargestellt.

Resize

In VFX 7 wurde der Resizer um eine weitere Eigenschaft erweitert. Für jedes Formular kann eingestellt werden, ob die Schriftgrößen proportional vergrößert werden sollen oder nicht. Wenn die Schriftgrößen nicht proportional vergrößert werden, erhält der Benutzer die Möglichkeit in einem Datenfeld mehr Text eingeben zu können, wenn das Formular vergrößert wird.  Die Formulareinstellung kann in Vfxmain global überschrieben werden.

Delayed Instantiation

Wie wir wissen dauert die Instanziierung von Steuerelementen in VFP relativ lange. Ein Formular mit zahlreichen Steuerelementen zu instanziieren kann einige Zeit in Anspruch nehmen. Da die Steuerelemente auf mehreren Seiten von Seitenrahmen platziert sind, genügt es eigentlich nur die Steuerelemente zu instanziieren, die auf der zunächst sichtbaren Seite liegen. Die Steuerelemente anderer Seiten müssen erst instanziiert werden, wenn die entsprechende Seite aktiviert wird. Diese Idee können wir uns zu Nutze machen um die Initialisierung von Formularen zu optimieren.

Die Steuerelemente einer Seite markieren wir und speichern sie als Klasse in der Klassenbibliothek Appl.vcx. So verfahren wir mit allen Seiten des Seitenrahmens. Die Steuerelemente können nun vom Seitenrahmen gelöscht werden. Um die Steuerelemente zu instanziieren fügen wir folgenden Code in das Activate-Event der einzelnen Seiten ein:

    =AddPageDelay(thisform, this, 'x', 'delayed_p1')

“x” ist dabei der Name des Containers, der auf dieser Seite instanziiert wird und die einzelnen Steuerelemente enthält. „delayed_p1“ ist der Name der Klasse, in der wir die Steuerelemente dieser Seite gespeichert haben.

Ein Beispiel für Delayed Instantiation ist das Formular Delayed.scx in VFX7Test.

Audit-Trail

Das Audit-Trail protokolliert Änderungen von Daten. VFX verwendet Trigger um die Änderung von Daten zu ermitteln. Die Trigger-Funktionen werden bei allen zu überwachenden Tabellen eingetragen.

  • _audit_insert() protokolliert die Erfassung neuer Datensätze
  • _audit_update() protokolliert alle Änderungen
  • _audit_delete() protokolliert das löschen von Datensätzen

Ein Audit-Trigger kann mit einem RI-Trigger mit einem logischen „und“ verknüpft werden:

  • __ri_delete_parent() AND _audit_delete()

Ein Beispiel für die Verwendung des Audit-Trails findet sich in der Tabelle Parent.dbf.

Über eine Schaltfläche in der Standard-Symbolleiste kann zum aktuell angezeigten Datensatz das Änderungsprotokoll angesehen werden.

Office Integration

VFX enthält Klassen zur OLE-Ansteuerung der Office-Anwendungen Excel, Outlook und Word.

Ein Beispiel zur Ansteuerung von Outlook befindet sich im Formular Address.scx in VFX7Test. Hier können Kontakte von Outlook ausgelesen, in der VFX-Anwendung bearbeitet und anschließend an Outlook zurückgegeben werden.

Report Selection

Wenn zu einem Formular verschiedene Berichte gedruckt werden sollen, bietet die Klasse cRSelection einen geeigneten Auswahldialog. Die zur Verfügung stehenden Berichte werden aus Tabellen gelesen. Es kann zwischen Berichten unterschieden werden, die für alle Benutzer sichtbar sind und Berichten, die nur für einzelne Benutzer sichtbar sind.

Eine detaillierte Beschreibung zur Klasse cRSelection befindet sich in den Update and Release Notes. Ein Beispiel zur Anwendung findet sich im Formular Reports.scx.

Die cWizard-Klasse

Die Klasse cWizard ermöglicht die Erstellung von Assistenten. Der Anwender wird Schritt für Schritt durch die Bearbeitung geführt. Ein gutes Beispiel für die Verwendung der Klasse cWizard ist in den VFX-Wizards selbst enthalten. Der VFX – Application Wizard basiert auf der Klasse cWizard.

Die Microsoft Agents

Die Agents sind nette Charaktere, die die Benutzung von VFX-Anwendungen auflockern.

In VFX7Test zeigt das Formular Agent.scx einfache Beispiele für die Verwendungsmöglichkeiten.

vorheriger Vortrag D-VFXA

zur Übersicht der Gruppe FWK

nächster Vortrag E-MERE

 

dFPUG c/o ISYS GmbH

Frankfurter Str. 21 b

 

D-61476 Kronberg

per Fax an:

+49-6173-950903

oder per e-Mail an:

konferenz@dfpug.de

© Texte, Grafiken und Inhalt: ISYS GmbH