DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / HFSQL / Gestion des triggers
  • Qu'est-ce qu'un trigger ?
  • Définition
  • Types de triggers disponibles
  • Manipuler les triggers par programmation
  • Les fonctions du WLangage
  • Créer un trigger
  • Créer une procédure exécutée par un trigger
  • Tests automatiques et triggers
  • Triggers et alias de fichiers de données
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Qu'est-ce qu'un trigger ?

Définition

Un trigger est une procédure WLangage appelée automatiquement par le moteur HFSQL à chaque modification (ajout, suppression, modification, etc.) d'un enregistrement d'un fichier de données.
Un trigger permet d'associer un traitement WLangage à une ou plusieurs fonctions HFSQL (HAjoute, HModifie, HSupprime, etc.) sans se préoccuper de l'emplacement de ces fonctions dans le code source. Même s'il s'agit d'une fenêtre ou d'un code créé par un assistant, les triggers associés aux fonctions HFSQL utilisées sont exécutés.
Remarque : Les triggers fonctionnent également avec les fonctions de gestion des champs Table fichier : TableAjoute, TableAjouteLigne, TableModifie, TableModifieLigne, TableSupprime, etc.
L'utilisation d'un trigger permet de :
  • Diminuer la taille du code. Par exemple, les traitements associés à une ou plusieurs fonctions HFSQL (vérification de doublon, test de cohérence des données, etc.) peuvent être regroupés grâce à l'utilisation d'un trigger.
  • Simplifier la lecture du code.
  • Simplifier les évolutions futures de l'application.
Les triggers s'appliquent sur tous les types de fichiers de données :
  • HFSQL
  • Accès natifs (Oracle, AS/400, etc.)
  • ODBC
  • OLE DB
Remarques :
  • Avec une base de données HFSQL Client/Serveur, il est également possible de définir des triggers serveur. Pour plus de détails, consultez Triggers serveur.
  • Lors de modification de fichiers de données via une requête, les triggers serveurs, les triggers simples ou triggers client sont déclenchés.
Types de triggers disponibles
Deux types de triggers sont disponibles :
  • Les triggers "AVANT" :
    Un trigger "AVANT" est appelé :
    • avant l'exécution d'une fonction HFSQL (HAjoute, HModifie, HSupprime, etc.).
    • avant l'exécution d'une fonction de gestion des champs Table fichier.
      Un trigger "AVANT" permet par exemple de vérifier la cohérence des données des rubriques d'un enregistrement. Avec ce type de trigger, il est possible d'initialiser une variable HFSQL pour annuler l'exécution de la fonction HFSQL associée.
  • Les triggers "APRÈS" :
    Un trigger "APRÈS" est appelé :
    • après l'exécution d'une fonction HFSQL (sauf si le programme a été interrompu pendant l'exécution de cette fonction).
    • après l'exécution d'une fonction de gestion des champs Table fichier.
      Un trigger "APRÈS" permet par exemple de gérer le traitement des erreurs.
Manipuler les triggers par programmation

Les fonctions du WLangage

Plusieurs fonctions permettent de manipuler les triggers :
HActiveTriggerRé-active un trigger précédemment désactivé avec la fonction HDésactiveTrigger.
HDécritTriggerAjoute ou modifie un trigger sur un fichier de données HFSQL.
HDésactiveTriggerDésactive un trigger.
HDétruitTriggerDétruit un trigger.
HGèreTriggerActive ou désactive la gestion des triggers.
HListeTriggerRenvoie la liste des triggers appliqués sur un ou plusieurs fichiers de données HFSQL.
HTriggerEnregistrementAvantRécupère la valeur de l'enregistrement en cours avant l'exécution du ou des triggers.

Créer un trigger

Pour créer un trigger "AVANT" ou un trigger "APRÈS", utilisez la fonction HDécritTrigger dans le traitement d'initialisation du projet. Le trigger peut être créé :
A chaque exécution d'un trigger, la procédure WLangage associée est exécutée.
Remarque : Un trigger est global au projet.

Créer une procédure exécutée par un trigger

Une procédure (ou une procédure stockée) de type trigger ne reçoit aucun paramètre. Toutefois, un certain nombre de variables d'état HFSQL sont positionnées avant chaque appel :
H.NomFichierChaîne de caractères : Nom logique du fichier de données dont le trigger est activé
H.ActionCaractère initialisé à "A" pour un trigger Avant, "P" pour un trigger après.
H.FonctionTriggerChaîne de caractères : Nom de la fonction HFSQL qui a déclenché le trigger.
Avertissement
La variable H.FonctionTrigger est dépréciée au profit de la variable H.NuméroFonctionTrigger. L'information donnée par la variable est indépendante de la langue utilisée pour l'exécution de l'application.
Nouveauté SaaS
H.NuméroFonctionTrigger
Constante permettant de connaître la fonction qui a déclenché le trigger :
  • htrgHAjoute : La fonction qui a déclenché le trigger est HAjoute.
  • htrgHEcrit : La fonction qui a déclenché le trigger est HEcrit.
  • htrgHModifie : La fonction qui a déclenché le trigger est HModifie.
  • htrgHRaye : La fonction qui a déclenché le trigger est HRaye.
  • htrgHSupprime : La fonction qui a déclenché le trigger est HSupprime.
H.AFairePendant l'exécution d'un trigger avant :
  • annulation de l'exécution de la fonction HFSQL en cours en affectant "A" à la variable d'état HFSQL : H.AFaire = "A". Dans ce cas, l'action n'est pas effectuée et la fonction (HAjoute, HModifie, etc.) renvoie Vrai (pas d'erreur).
  • annulation de l'exécution de la fonction HFSQL en cours en affectant "E" à la variable d'état HFSQL : H.AFaire = "E". Dans ce cas, l'action n'est pas effectuée et la fonction (HAjoute, HModifie, etc.) renvoie Faux. Le message d'erreur est le suivant : "L'action sur le fichier XXX a été interrompue par le trigger".

Remarque : Dans le cas où un trigger "AVANT" et un trigger "APRÈS" sont associés à une fonction HFSQL, si le trigger "AVANT" annule l'exécution de la fonction HFSQL (en positionnant H.AFaire à "A") le trigger "APRÈS" n'est pas déclenché.
Le mot-clé MonFichier permet de connaître et de manipuler dans le code de la procédure le nom du fichier sur lequel le trigger a été déclenché. Dans le cas d'un trigger "APRES", si la commande HFSQL ne s'est pas exécutée correctement, la procédure associée au trigger n'est pas exécutée.

Tests automatiques et triggers

Si des tests automatiques déclenchent des triggers utilisant des boîtes de dialogue (fonctions OuiNon, Confirmer, etc.), il est nécessaire de désactiver ces boîtes de dialogue pendant l'exécution du test grâce à la fonction EnModeTestAutomatique.

Triggers et alias de fichiers de données

Les triggers peuvent être définis sur des alias de fichiers de données.
  • L'alias doit avoir été décrit avant d'appeler la fonction HDécritTrigger.
  • Le nom de l'alias doit être donné explicitement dans la fonction HDécritTrigger.
Liste des exemples associés :
WD Trigger Exemples didactiques (WINDEV) : WD Trigger
[ + ] Cet exemple montre comment utiliser les triggers avec WINDEV.
Un trigger est une procédure en WLangage appelée automatiquement par le moteur HFSQL à chaque exécution d'une fonction HFSQL.

Dans cet exemple, nous abordons deux thèmes principaux :
1/ comment brancher un trigger sur une fonction HFSQL
2/ quel code utiliser dans la fonction appelée par le trigger.

Résumé de l'exemple livré avec WINDEV :
Cette application permet de saisir les notes de frais des collaborateurs d'une société.
Deux modes sont utilisables :
- le mode avec les droits en lecture/écriture
- le mode avec les droits en lecture seulement.
Ce sont les triggers qui permettront de contrôler l'accès aux fichiers en fonction du mode en cours.
Dans l'exemple, les triggers permettent également d'écrire dans un fichier journal les différents événements.
Ce fichier journal est directement consultable dans l'application.
Version minimum requise
  • Version 12
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 22/08/2024

Signaler une erreur ou faire une suggestion | Aide en ligne locale