Notifications¶
Ewt génère des notifications en fonction des actions de l'utilisateur. Chaque
notification correspond à une exécution d'un script, pour autant qu'un
script de traitement soit déclaré dans la section notifications du fichier
de config.
Exemple de notifications définies dans le fichier de config:
1 2 3 4 | |
D'une manière générale, les notifications sont toujours envoyées après une
action de type "ajout" ou "création", et toujours envoyées avant une
action de type "suppression". Ceci dit, il est également possible
de forcer l'exécution avant ou après action en ajoutant un suffixe
:before ou :after au nom de la notification (par exemple
doc-open:before). En l'absence de suffixe, le moteur lance la
notification selon le principe évoqué au début de ce paragraphe (voir
descriptions des notifications ci-dessous).
Il est possible d'obtenir des infos de contexte sur l'action à l'origine de
la notification depuis le script exécuté au moyen de la variable
$$.notification.
Annulation d'action¶
Un script déclenché par une notification :before a la possibilité d'annuler
l'action demandée par la commande. Cela permet par exemple de bloquer la
réalisation de certaines actions telles que des suppressions de tuples, des
fermetures ou des suppressions de dossiers, des fonctions d'administration,
etc.
Pour annuler une action depuis une notification :before, il suffit
d'appeler la méthode
$thread.abortNotifiedAction().
Une autre possibilité, moins propre, consiste à déclencher une exception. Cela mettra fin à l'exécution du script et interrompra l'action.
Notifications gérées par Ewt¶
app-admin¶
Déclenchement d'une fonction d'administration via l'action
admin.
En l'absence de suffixe before ou after, la notification est envoyée
après l'exécution de l'action.
app-reset¶
Reset de l'application.
En l'absence de suffixe before ou after, la notification est envoyée
après l'exécution du reset.
app-init¶
Initialisation de l'application.
Cette notification ne gère aucun suffixe. L'initialisation est toujours déclenchée après le chargement complet de l'application.
app-setlocale¶
Changement de la locale pour la session courante.
En l'absence de suffixe before ou after, la notification est envoyée
après le changement de style.
Le script reçoit les valeurs $.oldLocale, $.oldLanguage, $.newLocale
et $.newLanguage.
app-setstyle¶
Changement de la feuille de style.
En l'absence de suffixe before ou after, la notification est envoyée
après le changement de style.
Le script reçoit les valeurs $.oldStyle et $.newStyle.
doc-addtuple¶
Ajout de tuple à un dossier.
En l'absence de suffixe before ou after, la notification est envoyée
après l'ajout du tuple.
!!! "note" Groupes alias
La notification n'est envoyée que pour le groupe sur lequel porte
l'action. Les éventuels autres groupes qui sont basés sur la même table
en base de données (c.-à-d. les groupes alias) ne seront pas notifiés.
doc-arrange¶
Modification de paramètres d'arrangement (tri, filtre ou pagination de groupe).
En l'absence de suffixe before ou after, la notification est envoyée
après la modification d'arrangement.
doc-change¶
Modification de valeurs dans un dossier. La notification doc-change est
déclenchée lors des actions qui modifient un dossier, à savoir les actions
save avec modification de champs, setState, addTuple et delTuple.
En l'absence de suffixe before ou after, la notification est envoyée
après la modification des données dans le dossier.
Au niveau de la séquence de déclenchement des notifications, la notification
doc-change est systématiquement exécutée avant la notification native
associée à l'action, c'est-à-dire avant le doc-save, le
doc-addtuple, le doc-deltuple, le
doc-leavestate ou le doc-enterstate,
que ce soit lors du traitement before ou lors du traitement after.
La variable $$.notification reprend sensiblement la même forme que la
notification native de l'action invoquée.
Action et Command
Le map $$.notification contient deux références à l'action:
$$.notification.action et $$.notification.command.action.
$$.notification.action indique l'action qui déclenche la notification.
Cet élément peut être utile au script déclenché par doc-change pour
savoir quel type d'action est à l'origine de la notification.
$$.notification.command.action indique l'action invoquée par le client.
Il faut garder à l'esprit que certaines actions entraînent implicitement
d'autres actions. Par exemple, une action close entraîne
automatiquement un save, qui lui-même déclenche différentes
notifications (doc-change et doc-save). Dans ce cas, la propriété
$$.notification.command.action aura pour valeur close alors que la
propriété $$.notification.action aura la valeur save.
Notons au passage que les propriétés $$.notification.action et
$$.notification.command ne sont pas systématiquement renseignées. Par
exemple, les notifications déclenchées par un traitement automatique
(par exemple la notification trash-clean) n'ont pas
de proriété $$.notification.action. Les notifications déclenchées lors
d'un thread non lié à une requête client (par exemple le
scheduler) n'ont pas de propriété
$$.notification.command.
doc-clone¶
Duplication de dossier.
En l'absence de suffixe before ou after, la notification est envoyée
après la duplication du dossier.
Attention, les notifications doc-clone:before et doc-clone:after
sont adressées toutes les deux au dossier source. Dans le cas du
doc-clone:after, l'identifiant du dossier créé est transmis au moyen
de la propriété newDocId passée au paramètre du script.
doc-close¶
Fermeture de dossier.
En l'absence de suffixe before ou after, la notification est envoyée
avant la fermeture du dossier (mais après l'enregistrement des données).
doc-create¶
Création de dossier.
En l'absence de suffixe before ou after, la notification est envoyée
après la création.
doc-delete¶
Suppression de dossier.
En l'absence de suffixe before ou after, la notification est envoyée
avant la suppression (mais après l'enregistrement des données).
doc-deltuple¶
Suppression de tuple.
En l'absence de suffixe before ou after, la notification est envoyée
avant la suppression (mais après l'enregistrement des données).
!!! "note" Groupes alias
La notification n'est envoyée que pour le groupe sur lequel porte
l'action. Les éventuels autres groupes qui sont basés sur la même table
en base de données (c.-à-d. les groupes alias) ne seront pas notifiés.
doc-enterstate¶
Notification envoyée lorsqu'un dossier arrive dans un état donné.
La notification peut être conditionnée au moyen des suffixes :before et
:after. Si aucun suffixe n'est spécifié, la notification doc-enterstate
correspond à doc-enterstate:before.
Le script a la possibilité d'annuler le changement d'état. Voir Annulation d'action.
doc-leavestate¶
Notification envoyée lorsqu'un dossier quitte un état donné. La notification
peut être conditionnée au moyen des suffixes :before et :after. Si aucun
suffixe n'est spécifié, la notification doc-leavestate correspond à
doc-leavestate:before.
Lors d'un changement de statut, les notifications doc-enterstate et
doc-leavestate sont séquencées ainsi:
doc-leavestate:beforedoc-enterstate:beforedoc-leavestate:afterdoc-enterstate:after
Une interruption de script est possible à la demande du script depuis les
notifications doc-leavestate:before et doc-enterstate:before. Voir
Annulation d'action.
doc-open¶
Ouverture de dossier.
En l'absence de suffixe before ou after, la notification est envoyée
après l'ouverture.
doc-save¶
Sauvegarde de données de dossier.
En l'absence de suffixe before ou after, la notification est envoyée
après la sauvegarde des données dans le dossier.
La variable $$.notification donne des informations de contexte sur le
modèle et le dossier concerné, ainsi que le nombre et le détail des
modifications de valeurs de champs.
Exemple de valeur de paramètre $$.notification (la forme du paramètre peut
varier selon l'action):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
Pour la gestion des modifications sur le dossier, voir également
doc-change.
Note
Ewt permet d'avoir plusieurs dossiers ouverts à la fois. La
commande de sauvegarde peut par conséquent concerner plusieurs dossiers
à la fois. Dans ce cas, Ewt déclenche autant de notifications doc-save
qu'il y a de dossier ouvert. Chaque évaluation de script reçoit des
informations de contexte personnalisées via la variable $$.notification.
doc-setview¶
Changement de la vue pour un dossier.
En l'absence de suffixe before ou after, la notification est envoyée
après le référencement de la nouvelle vue, pour autant qu'elle soit
possible.
gen-output¶
Génération de l'arbre de sortie. La notification est envoyée juste avant que le moteur n'entame la génération de l'arbre de sortie. Il est possible de court-circuiter la génération de l'arbre en forçant la réponse.
Attention, si l'application est configurée avec un
documentMode "multi", le script est toujours
évalué hors contexte de dossier. Si l'application est configurée avec le
mode single, le script est évalué dans le contexte du dossier ouvert, à
condition bien entendu qu'un dossier soit ouvert. Dans le cas contraire, le
script est évalué en-dehors de tout contexte.
incoming-get-request¶
Déclenché lorsqu'une requête de type GET arrive au moteur. Le nom peut être
suffixé pour limiter la notification à une servlet en particulier. Par exemple,
pour limiter la notification au servlet web, on notera
incoming-get-request:web. En l'absence de suffixe, la notification sera
déclenchée pour toutes les servlets.
Les suffixes utilisables sont :web ou :rest.
incoming-post-request¶
Déclenché lorsqu'une requête de type POST arrive au moteur. Le nom peut être
suffixé pour limiter la notification à une servlet en particulier. Par exemple,
pour limiter l'événement au servlet web, on notera
incoming-post-request:web. En l'absence de suffixe, la notification sera
déclenchée pour toutes les servlets.
Les suffixes utilisables sont :web ou :rest.
on-style¶
Notification déclenchée lorsque l'application est affichée au moyen
de la feuille de style indiquée en suffixe. La notification s'utilise
toujours avec une notation du genre on-style:somestyle, où somestyle
désigne un style défini au niveau de la section <styles> du config.
Lorsqu'une telle notification est déclarée, le moteur invoque le script indiqué juste avant la génération de l'output.
Attention, le script est toujours évalué hors contexte de dossier.
task-error¶
Notification envoyée lorsqu'une tâche du scheduler déclenche une exception non traitée.
task-overlap¶
Notification envoyée lorsqu'une tâche du scheduler est planifiée pour s'exécuter avant la fin de l'exécution précédente.
trash-clean¶
Notification envoyée lorsqu'un dossier est supprimé de la corbeille. La notification est envoyée lors d'un nettoyage manuel par l'utilisateur et lors du nettoyage automatique par le moteur.
La notification est envoyée avant la suppression, ce qui laisse à
l'application la possibilité d'abandonner la suppression au moyen de la
méthode $trash.abortClean. Il est
recommandé
d'invoquer également la méthode
$trash.extendEOL afin de reporter la
suppression de l'entrée, sinon la notification sera renvoyée lors du
prochain contrôle.