Comprendre les événements

23.04.2021

Les événements ont lieu lorsque certaines situations du programme se produisent. Ces événements peuvent être traités dans des procédures d'événements lancées par l'utilisateur.

Utilisation des événements

Dans FlexPro, vous pouvez mettre en œuvre des procédures d'événement au niveau de la base de données, de la classe d'objets(AnyCursorObject et appendice AnyDocObject, AnyFolder, AnyFormula, AnyFpObject, AnyValueObject), de l'objet ou de l'application.

L'événement ObjectOpened, par exemple, se produit au niveau de l'objet et de la classe d'objet, tandis que l' événement DatabaseSaveest disponible au niveau de la base de données et de l'application. L'événement DatabaseSaved pour une base de données se produit après l'enregistrement de cette base de données. Au niveau de l'application, l'événement DatabaseSaved se produit lorsqu'une des bases de données ouvertes a été enregistrée.

Pour obtenir des informations sur la création de procédures d'événements pour les différents objets, vous pouvez consulter l'une des rubriques suivantes :

  Utilisation des événements avec l'objet Application ou Bases de données

  Utilisation des événements avec l'objet base de données

  Utilisation des événements avec les objets FlexPro

  Utilisation d'événements avec des objets de classe

Activation des événements

En utilisant la propriété EnableEvents de l'objet Application, vous pouvez activer ou désactiver les événements.

Par exemple, l'enregistrement d'une base de données avec la méthode Save déclenche l'événement BeforeDatabaseSave. Pour éviter cela, il suffit de définir la propriété EnableEvents sur False avant d'appeler la méthode Save.

Application.EnableEvents = False

ActiveDatabase.Save

Application.EnableEvents = True

Par défaut, les événements dans FlexPro sont désactivés, c'est-à-dire que Application.EnableEvents a la valeur False. Vous pouvez activer les événements en attribuant la valeur True à la propriété EnableEvents ou modifier les paramètres par défaut dans la boîte de dialogue Options du fichier >, dans l'onglet Paramètres du système, et sélectionner Activer les événements de la macro.

Remarque :   Si vous créez pour la première fois une procédure d'événement dans un module d'objet, vous serez averti si l'option d'événements a été désactivée.

Types d'événements

Il existe essentiellement deux types d'événements dans FlexPro. Tout d'abord, il y a les événements qui se produisent lorsqu'une certaine condition se produit. Dans ce cas, le développeur d'applications est uniquement informé du changement de condition (par exemple ValueModified). Le deuxième type comprend les événements qui peuvent être influencés par le développeur de l'application. Ces événements forment des séquences de trois événements au maximum. La séquence apparaît comme suit : Il commence par un événement QueryCancelEventName, qui permet au développeur d'applications de décider si une certaine condition du programme peut se produire. Si cet événement renvoie Vrai, FlexPro interrompt le traitement, déclenchant l'événement EventNameCancelled. Si l'événement QueryCancelEventNamen'est pas traité ou s'il renvoie False, FlexPro poursuivra le traitement, déclenchant l'événement Before juste avant que l'événement ne se produise. Finalement, une fois que la condition du programme a été atteinte, l'événement EventName sera déclenché.

Le code VBA suivant décrit cette logique en utilisant l'événement ObjectOpened comme exemple :

' L'objet oObject est ouvert par un double-clic dans la fenêtre

' Vue en liste.

If QueryCancelOpenObject(Object) Then

    OpenObjectCanceled oObject

Else ...

    BeforeOpenObject oObject

    oObject ... ' L'objet est ouvert ...

    ObjetOpened oObject

End If

Transférer des événements

Dans FlexPro, les événements initiés pour un objet ne sont pas seulement signalés avec cet objet, ils sont également transmis aux bases de données de modèles et/ou aux objets parents dans le modèle d'objet. Ainsi, les événements d'objets similaires dans les bases de données de modèles ou dans les objets parents de la base de données du projet peuvent être traités simultanément.

Par exemple, une fois la base de données "Data.fpd" sauvegardée, les procédures événementielles suivantes sont exécutées les unes après les autres, selon qu'elles existent ou non :

Procédure d'événementDatabaseSaved de ThisDatabase de la base de données "Data.FPD"

Procédure événementielleDatabaseSaved de ThisDatabase de la base de données du modèle personnel

Procédure d'événementDatabaseSaved de la collection Databases de la base de données "Data.FPD"

Procédure de l'événementDatabaseSaved de l'objet Application

Le premier argument d'un événement est toujours l'objet concerné. Par conséquent, une procédure d'événement à laquelle l'événement a été transmis saura pour quel objet l'événement qui vient d'être traité s'est produit.

La documentation sur les objets dans la section Référence vous indiquera à quels objets les événements sont transmis.

Transfert d'événements pour les objets FlexPro

Le transfert des événements est particulièrement important pour les objets FlexPro. Étant donné qu'une base de données FlexPro peut inclure de nombreux objets FlexPro pour lesquels il n'existe pas de module d'objet correspondant dans l'explorateur de projet Visual Basic, la meilleure pratique consiste à compléter les procédures d'événement pour un, plusieurs ou tous les objets FlexPro dans les modules d'objet de classe AnyCursorObject, AnyDocObject, AnyFolder, AnyFormula, AnyFpObject et AnyValueObject.

Par exemple, si l'événement ObjectModified de l'objet FpObject se produit, les procédures d'événement suivantes sont exécutées l'une après l'autre, selon qu'elles existent ou non :

Procédure de l'événementObjectModified de l'objet concerné

Procédure d'événementObjectModified de AnyFpObject dans la base de données contenant l'objet

Procédure d'événementObjectModified de AnyFpObject dans la base de données des modèles personnels

La cascade d'événements décrite s'applique à tous les objets FlexPro.

Partager l’article ou envoyer par mail :

Vous serez probablement intéressé par les articles suivants :