|
|
|
|
|
- Présentation
- Un exemple simple
- Avantage
- Caractéristiques d'une procédure réactive
- Syntaxe
- Quand est-ce qu'une procédure réactive se déclenche ?
- Comment savoir si un champ est concerné par une procédure réactive
- Remarques et limites
- Procédure réactive abonnée aux champs
- Les types de variables concernés par une procédure réactive
- Limitations
Une procédure réactive est une procédure qui va réagir à tout changement de valeur d'un champ ou d'une variable. Ainsi, quand un champ est utilisé dans une procédure réactive, toute action sur ce champ susceptible de modifier la valeur de ce champ va déclencher la procédure. Cette action peut aussi bien être une action de l'utilisateur qu'une action effectuée par programmation. Une Procédure Réactive "observe" en permanence (d'où le nom anglais "Design Pattern Observer") les variables et les champs concernés pour détecter les changements de valeur, et dans ce cas s'exécuter automatiquement. Un exemple simple Prenons un exemple simple : une saisie de montant HT ou TTC.
Le fonctionnement attendu est le suivant : une saisie le champ du montant HT ou de la TVA met à jour automatiquement les deux autres champs. Ce fonctionnement peut être codé en WLangage "classique", directement dans les trois champs : il suffit de créer une procédure et de placer le code d'appel de cette procédure dans le code de modification de chaque champ.
Ce fonctionnement peut être également effectué avec une procédure réactive. Il suffit de créer la procédure avec la formule. A chaque modification de la valeur des champs manipulés par la formule, la procédure réactive est déclenchée. Avantage L'avantage principal de cette méthode est le suivant : la surveillance du changement de valeur d'un champ est déléguée au framework. La consommation de ressources est nulle car le framework se charge de tout, de manière optimisée : c'est le champ ou la variable qui signale automatiquement leur changement de valeur à la Procédure Réactive. Le code de la procédure réactive permet donc de "surveiller" et de mettre à jour plusieurs champs et variables différents. Caractéristiques d'une procédure réactive Syntaxe Une procédure réactive correspond à une procédure locale d'une fenêtre. Elle est créée de la même façon qu'une procédure locale classique. Le mot-clé REACTIVE permet de d'indiquer que la procédure surveillera le changement de valeur des champs ou des variables utilisées dans son code. Exemple : PROCÉDURE RÉACTIVE CalculTVA()
Comme toute procédure, une procédure réactive peut attendre des paramètres et il est possible d'utiliser des paramètres d'extension.
Pour plus de détails, consultez Déclarer une procédure. Remarque : l'attribut d'extension <délai = <durée en millisecondes>> permet de spécifier un délai avant l'exécution de la procédure réactive. Il est ainsi possible par exemple d'éviter de déclencher la procédure réactive à chaque caractère saisi dans un champ. Quand est-ce qu'une procédure réactive se déclenche ? Une procédure réactive se déclenche automatiquement lors de la modification de la valeur d'un des champs de la fenêtre ou d'une des variables globales de la fenêtre ou des champs. La procédure réactive est "abonnée" aux modifications des champs et des variables. Remarque : Pour identifier les champs et les variables auxquels la procédure réactive est abonnée, ces éléments sont soulignés dans le code de la procédure réactive. Par exemple, la procédure réactive suivante est abonnée aux modifications effectuées dans les champs SAI_HT et SAI_TVA : PROCÉDURE RÉACTIVE CalculeTTC()
SAI_TTC = SAI_HT + SAI_HT * (SAI_TVA + 1) / 100
Si la procédure réactive est abonnée à des champs, elle peut se déclencher : - par programmation sur toute modification de propriété des champs. Par exemple, il est possible de faire une procédure réactive sur le changement de couleur d'un champ.
Si le changement de valeur du champ est réalisé dans un événement WLangage associé à un champ, la procédure réactive correspondante est déclenchée à la fin de l'exécution de l'événement. - sur une action faite par l'utilisateur.
Remarque : Actuellement, plusieurs champs sont gérés. Pour plus de détails, consultez la liste des champs disponibles dans les Remarques.
Si la procédure réactive est abonnée à des variables globales de la fenêtre, elle peut se déclencher par programmation sur toute modification de la valeur de la variable. Seuls certains types de variables sont disponibles. Pour plus de détails, consultez la liste des types de variables disponibles dans les Remarques. Comment savoir si un champ est concerné par une procédure réactive Pour savoir si un champ d'une fenêtre est concerné par une procédure réactive (et pour accéder au code de cette ou ces procédure(s) réactive(s)), une indication est affichée en bas de la fenêtre de description du champ. Procédure réactive abonnée aux champs Une procédure réactive peut être abonnée : - aux manipulations effectuées par l'utilisateur dans un champ. Tous les champs renvoyant une valeur sont concernés :
- Champ de saisie : modification du contenu.
- Champ Liste : modification de la sélection.
- Champ Interrupteur et champ Sélecteur : modification de la sélection.
- Champ Table et champ Zone répétée : Une modification du contenu d'une cellule du champ Table ou d'un champ d'une Zone répétée provoque l'exécution de toutes les procédures réactives qui utilisent la colonne ou le champ.
- Champ Ascenseur, champ Spin, etc. : modification de la valeur du champ (suite au déplacement).
- à l'utilisation des propriétés WLangage sur les champs. Il est par exemple possible d'utiliser par programmation une procédure réactive sur un champ Table en testant la propriété Occurrence pour détecter toute variation du nombre d'éléments dans le champ.
Remarque : L'utilisation d'une FAA peut modifier la valeur d'un champ. Par exemple, l'option "Cocher tout" d'un champ Interrupteur coche toutes les cases et donc peut déclencher une procédure réactive. Les types de variables concernés par une procédure réactive Une procédure réactive peut être abonnée à des variables utilisant les types suivants : - Booléen
- Entier
- Réel
- Monétaire
- Numérique
- Entier système
- Chaîne de caractères ou caractère
- Date
- Heure
- Durée
- buffer
- Enumération
- Combinaison
- UUID 128 et UUID 256.
Limitations - Les procédures dynamiques ne peuvent pas être utilisées sur le contenu des fichiers de données HFSQL.
- Lorsqu'un élément est utilisé comme abonnement et comme déclenchement, le déclenchement est prioritaire.
Liste des exemples associés :
|
Exemples didactiques (WINDEV) : WD Procédure Réactive
[ + ] Cet exemple présente le concept de Procédure Réactive de manière didactique avec plusieurs exemples. Une procédure réactive est une procédure qui s'exécute automatiquement à chaque modification d'un champ ou d'une variable. C'est le concept de design pattern observer.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|