Frappe Framework
Déclencheurs et conditions
Dix types vont de la création au lancement manuel. Les étapes tournent plus tard, avec les droits de Run As. Installations et migrations sautent les flux.
Rôle
Sur le formulaire Automation Flow, le déclencheur décide quand le flux est considéré. Les champs de correspondance et la condition décident si le document est retenu. Émettre un événement depuis une application est décrit dans Étendre les automatisations.
Types
| Type | Moment | Il faut |
|---|---|---|
| Doc Created | Insertion | Document Type |
| Doc Updated | Enregistrement d’un document déjà là, pas à l’insertion | Document Type |
| Field Value Changed | Un champ change à l’enregistrement | Document Type et Trigger Field |
| Doc Deleted | Suppression | Document Type |
| Doc Submitted | Soumission d’un document soumissible | Document Type |
| Doc Cancelled | Annulation d’un document soumissible | Document Type |
| Date Based | Un champ date est à N jours d’aujourd’hui | Document Type et Date Field |
| Scheduled | Une expression cron arrive à échéance | Cron Expression |
| Custom Event | Une app appelle frappe.automation_engine.emit() | Nom Custom Event |
| Manual | Quelqu’un lance le flux | Rien |
Field Value Changed : Trigger Field, et en option From Value et To Value. Vide signifie n’importe quelle valeur. status vers Closed part à chaque clôture, quel que soit l’ancien statut.
Date Based : Date Field, Date Offset (Days), Date Direction. Trois jours Before renewal_date vise un renouvellement dans trois jours. Un jour After due_date vise un retard depuis hier. Le contrôle est horaire. Chaque document part au plus une fois par jour.
Scheduled : cinq champs, par exemple 0 9 * * 1 pour 9 h le lundi. Next Run s’affiche après l’enregistrement. Sans Document Type, le flux part une fois, sans document : digest ou API externe. Avec un type, il part une fois pour chaque document qui correspond. Si le planificateur a manqué plusieurs échéances, un seul rattrapage a lieu, pour la plus récente.
Custom Event : le nom doit être exactement celui émis, par exemple crm.deal_won. Avec un Document Type, seuls les événements de ce type sont pris.
Manual : jamais tout seul. L’application appelle frappe.automation_engine.api.run_manually, par exemple depuis un bouton. L’appelant doit pouvoir écrire le flux et lire le document.
Correspondance
Match Fields reprend l’éditeur de filtres de la liste. Toutes les lignes doivent être vraies. Exemple sur un Lead : Status égal à Open, Source renseigné, Annual Revenue supérieur à 1000000. Sans ligne, tous les documents du type correspondent.
Advanced Expression using Python reçoit doc et l’évaluateur sûr, donc les aides de frappe.utils. Les deux exemples : doc.status == "Open" or doc.priority == "High", et doc.grand_total > 50000 and doc.customer_group != "Internal". Champs et expression doivent être vrais ensemble. Une erreur d’expression exclut le document et part dans l’Error Log.
Au moment de l’exécution
Le déclencheur est vu à l’enregistrement, les étapes partent un peu plus tard dans un worker. Revalidate on Run reteste champs et condition juste avant. Si ça ne correspond plus, l’exécution est Skipped. Utile si un statut est posé puis annulé tout de suite.
Run As :
- Automation User, par défaut : l’utilisateur du champ Automation User, Administrator tant qu’on ne le change pas ;
- Triggering User : celui dont l’action a déclenché ;
- Document Owner : le propriétaire du document.
Chaque étape contrôle les droits de cet utilisateur. La note conseille un utilisateur dédié, avec seulement les rôles nécessaires, plutôt que Administrator.
Les flux sont sautés pendant les installations, migrations et patches, si Disable Automations est coché dans Automation Settings, et si automation_disabled est dans site_config.json. Un import peut les couper :
from frappe.automation_engine import skip_automations
with skip_automations():
doc.save()Point d’attention
Doc Updated ne part pas à l’insertion. Un cron manqué plusieurs fois ne rattrape que la dernière échéance.
