Ereignisse verstehen

07.02.2018
 Automatisierung von Abläufen > Automatisierung mit FlexPro Visual Basic > Erste Schritte mit FlexPro Visual Basic > Ereignisse verstehen

Ereignisse verstehen

<< Klicken, um Inhaltsverzeichnis anzuzeigen >>

  Automatisierung von Abläufen > Automatisierung mit FlexPro Visual Basic > Erste Schritte mit FlexPro Visual Basic >

Ereignisse verstehen

Ereignisse werden ausgelöst, wenn bestimmte Programmsituationen eintreten. Diese Ereignisse können in vom Anwender realisierten Ereignisprozeduren verarbeitet werden.

Verwenden von Ereignissen

In FlexPro können Sie Ereignisprozeduren auf der Ebene von Datenbanken, Objektklassen (AnyCursorObject, AnyDocObject, AnyFolder, AnyFormula, AnyFpObject, AnyValueObject), Objekten oder der Anwendung implementieren.

Das ObjectOpened-Ereignis tritt beispielsweise auf der Objekt- und der Objektklassenebene ein, dagegen ist das DatabaseSaved-Ereignis sowohl auf der Datenbank- wie auch auf der Anwendungsebene verfügbar. Das DatabaseSaved-Ereignis für eine Datenbank tritt ein, wenn diese Datenbank gespeichert wurde. Auf der Anwendungsebene tritt das DatabaseSaved-Ereignis ein, wenn eine der geöffneten Datenbanken gespeichert wurde.

Hinweise, wie Sie Ereignisprozeduren für die verschiedenen Objekte erstellen, finden Sie in den folgenden Themen:

  Verwenden von Ereignissen mit dem Application- oder Databases-Objekt

  Verwenden von Ereignissen mit dem Database-Objekt

  Verwenden von Ereignissen mit den FlexPro-Objekten

  Verwenden von Ereignissen mit den Klassenobjekten

Aktivieren der Ereignisse

Mit Hilfe der EnableEvents-Eigenschaft des Application-Objekts können Sie die Ereignisse aktivieren oder deaktivieren.

Beispielsweise führt das Speichern einer Datenbank mit der Save-Methode zum Auftreten des BeforeDatabaseSave-Ereignisses. Dies kann verhindert werden, indem Sie die EnableEvents-Eigenschaft auf False setzen, bevor Sie die Save-Methode aufrufen.

Application.EnableEvents = False

ActiveDatabase.Save

Application.EnableEvents = True

Ereignisse sind in FlexPro standardmäßig deaktiviert, d. h. Application.EnableEvents ist False. Sie können die Ereignisse aktivieren, indem Sie die EnableEvents-Eigenschaft auf True setzen oder im Dialogfeld Datei > Optionen auf der Registerkarte Systemeinstellungen die Voreinstellung ändern und das Kontrollkästchen Ereignismittelung an Makros aktivieren markieren.

Hinweis   Wenn Sie zum ersten Mal eine Ereignisprozedur in einem Objektmodul erstellen, erhalten Sie einen Hinweis, falls die Ereignisse abgeschaltet sind.

Arten von Ereignissen

Es gibt grundsätzlich zwei Arten von Ereignissen in FlexPro. Zum einen gibt es Ereignisse, die ausgelöst werden, nachdem ein bestimmter Zustand eingetreten ist. Der Anwendungsentwickler wird hier lediglich von der Zustandsänderung informiert (z. B. ValueModified). Andererseits gibt es aber auch Ereignisse, die einen Eingriff des Anwendungsentwicklers erlauben. Diese Ereignisse bilden Folgen aus bis zu drei Ereignissen. Der Ablauf sieht folgendermaßen aus: Zuerst kommt ein QueryCancelEventName-Ereignis, in dem der Anwendungsentwickler entscheiden kann, ob ein Programmzustand eintreten darf. Gibt dieses Ereignis True zurück, wird die Bearbeitung in FlexPro abgebrochen und das Ereignis EventNameCancelled wird ausgelöst. Wird das QueryCancelEventName-Ereignis nicht behandelt oder gibt es False zurück, so wird die Bearbeitung in FlexPro fortgesetzt und unmittelbar bevor das Ereignis eintritt, wird das Before-Ereignis ausgelöst. Nachdem der Programmzustand eingetreten ist, wird schließlich noch das Ereignis EventName ausgelöst.

Folgender VBA-Code beschreibt noch einmal die Logik am Beispiel des ObjectOpened-Ereignisses:

' Objekt oObject soll durch Doppelklick des Anwenders

' in der Listenansicht geöffnet werden

If QueryCancelOpenObject(Object) Then

    OpenObjectCanceled oObject

Else ...

    BeforeOpenObject oObject

    oObject ... ' Objekt wird geöffnet ...

    ObjectOpened oObject

End If

Weiterleitung von Ereignissen

In FlexPro werden für ein Objekt ausgelöste Ereignisse nicht nur bei diesem Objekt signalisiert, sondern anschließend noch an die Vorlagendatenbanken und/oder übergeordnete Objekte im Objektmodell weitergeleitet. Auf diese Weise besteht die Möglichkeit, die Verarbeitung von Ereignissen gleichartiger Objekte in den Vorlagendatenbanken oder in übergeordneten Objekten der Projektdatenbank zu bündeln.

So werden z. B. nach dem Speichern der Datenbank "Data.FPD" die folgenden Ereignisprozeduren - sofern sie existieren - der Reihe nach ausgeführt:

DatabaseSaved-Ereignisprozedur von ThisDatabase der Datenbank "Data.FPD"

DatabaseSaved-Ereignisprozedur von ThisDatabase der persönlichen Vorlagendatenbank

DatabaseSaved-Ereignisprozedur der Databases-Auflistung der Datenbank "Data.FPD"

DatabaseSaved-Ereignisprozedur des Application-Objekts

Als erstes Argument eines Ereignisses wird immer das betroffene Objekt selbst mitgegeben, so dass einer Ereignisprozedur, an die das Ereignis weitergeleitet wurde, bekannt ist, für welches Objekt das gerade verarbeitete Ereignis eingetreten ist.

An welche Objekte Ereignisse weitergeleitet werden, können Sie der Objekt-Dokumentation der Referenz entnehmen.

Weiterleitung von Ereignissen für FlexPro-Objekte

Das Weiterleiten der Ereignisse hat für die FlexPro-Objekte eine besondere Bedeutung. Aufgrund der Tatsache, dass in einer FlexPro-Datenbank sehr viele FlexPro-Objekte existieren können, für die es aber kein korrespondierendes Objekt-Modul im Visual Basic Projekt-Explorer gibt, ist es am einfachsten die Ereignisprozeduren für ein, mehrere oder alle FlexPro-Objekte in den Klassen-Objektmodulen AnyCursorObject, AnyDocObject, AnyFolder, AnyFormula, AnyFpObject und AnyValueObject zu realisieren.

Tritt z. B. das ObjectModified-Ereignis des FpObject-Objekts ein, werden die folgenden Ereignisprozeduren - sofern sie existieren - der Reihe nach ausgeführt:

ObjectModified-Ereignisprozedur des betroffenen Objektes

ObjectModified-Ereignisprozedur von AnyFpObject in der Datenbank in der sich das Objekt befindet

ObjectModified-Ereignisprozedur von AnyFpObject in der persönlichen Vorlagendatenbank

Die beschriebene Ereignis-Kaskadierung ist für alle FlexPro-Objekte gleich.

Share article or send as email:

You might be interested in these articles