# Paramétrage des minuteurs (timers)
Les minuteurs servent à lancer des tâches planifiées dans le temps.
Les minuteurs permettent de déclencher des tâches à des dates prédéfinies sur un Smart Element. Ces dates peuvent être statiques ou liées à des valeurs du Smart Element qui porte le minuteur.
C'est utile, par exemple, pour répondre à une exigence de la forme :
Le délai de validation par défaut est de 15 jours, mais il est modifiable par l'utilisateur. 5 jours avant la date butoir, un mail de relance est envoyé au valideur. À la date butoir, si le Smart Element n'est pas relu, il est passé dans l'état Non validé.
Un Smart Element peut porter plusieurs minuteurs.
# Tâches du minuteur
Un minuteur effectue une séquence de tâches. Chaque tâche peut être :
- un envoi de mail
- un changement d'état
- l'exécution d'une méthode du Smart Element portant le minuteur
- une combinaison des 3 types de tâches précédentes. Dans ce cas l'ordre d'exécution est :
- le changement d'état
- l'envoi de mail
- l'exécution de la méthode du Smart Element
# Séquençage des tâches
Les tâches sont déclenchées après le délai indiqué sur la tâche. La date de déclenchement est la date de référence + délai de la tâche.
Le minuteur est détaché du Smart Element après l'exécution de la dernière tâche.
Attention
Si la date de référence est dynamique, le minuteur revient à la première itération à chaque modification de cette date de référence.
# Date de référence
Par défaut, la date de référence d'un minuteur est sa date d'attachement au Smart Element. Il est possible de modifier cette date de référence de 2 manières :
Date de référence dynamique : La date de référence peut être reliée à un Smart Field de type date ou timestamp du
Smart Element auquel est rattaché le minuteur.
Dans ce cas, la date de référence est recalculée à chaque mise à jour du Smart Element.
Si la date reliée est vide, le minuteur n'est pas activé. Il reste en attente d'activation jusqu'à ce que cette date
reliée soit valorisée. De même, si la date reliée devient vide, les tâches du minuteur sont inhibées.
Décalage de la date de référence : Il est possible d'appliquer un delta à cette date de référence, qu'elle soit dynamique ou non. Ce delta peut servir, par exemple, à effectuer une tâche, N jours avant la date cible : dans ce cas, on appliquera un delta de -N days.
# Historique
Lors de l’exécution d'une tâche, une entrée d'historique est ajoutée au Smart Element auquel est attaché le minuteur.
# Attachement d'un minuteur
Les minuteurs peuvent être utilisés par les workflows lors du paramétrages des étapes ou des transitions.
Les minuteurs peuvent être gérés par programmation. Cette programmation permet d'attacher ou de détacher les minuteurs associés à un Smart Element.
Anakeen\SmartElement::attachTimer(SmartStructures\Timer $timer)
Anakeen\SmartElement::unattachTimer(SmartStructures\Timer $timer)
Anakeen\SmartElement::getAttachedTimers() : DocTimer[]
# Gestion des erreurs
Lorsqu'un shell non interactif sort en erreur, un mail contenant le détail de l'erreur peut être envoyé.
Ce mail est envoyé uniquement si le paramètre CORE_WSH_MAILTO
est non vide.
Attention
Lorsque le traitement d'un minuteur provoque une erreur, le Smart Element concerné est à nouveau traité par les minuteurs suivants tant que sa date de déclenchement reste valide (voir FDL_TIMERHOURLIMIT).
# Configuration du minuteur (timer)
La configuration d'un minuteur suit le namespace https://platform.anakeen.com/4/schemas/timer/1.0
La création d'un minuteur entraine la création d'un Smart Element de la structure TIMER
.
Propriétés d'un minuteur :
Attribut XML | Description |
---|---|
timer/@name | (obligatoire) Référence du minuteur. Nom logique du Smart Element créé |
timer/@structure | Référence de la Smart Structure compatible avec ce workflow. |
timer/@workflow | Référence du modèle de workflow |
timer/@label | Libellé du minuteur |
timer/@field-date-reference | Référence à un Smart Field du Smart Element (type date ou timestamp) |
timer/@delta | Délai à appliquer sur la date de référence |
timer/tasks/task/@delta | Délai à appliquer sur une tâche (en plus du délai de la date de référence) |
timer/tasks/task/sendmail/@ref | Référence au modèle de mail à envoyer |
timer/tasks/task/setstate/@state | Nouvel état à appliquer au Smart Element |
timer/tasks/task/process/process-callable/@function | Méthode à appliquer au Smart Element |
timer/tasks/task/process/process-argument/@type | Type d'argument Field ou String |
timer/tasks/task/process/process-argument | Valeur de l'argument |
La référence au modèle de workflow est nécessaire si les tâches effectuent des transitions. La référence à la structure est nécessaire si les tâches font référence à des méthodes spécifiques du comportement de la structure.
La syntaxe de la durée des attributs @delta
est celle acceptée par
DateInterval::createFromDateString
Info
La granularité de la durée est de 5 minutes.
# Exemple : Timer + Mail
Envoyer un courriel avec le modèle "MT_MAIL1" 2 jours après l'attachement:
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0"
xmlns:timer="https://platform.anakeen.com/4/schemas/timer/1.0">
<timer:timer name="MY_SIMPLETIMER" label="Test mail simple">
<timer:tasks>
<timer:task delta="2 days">
<timer:sendmail ref="MT_MAIL1"/>
</timer:task>
</timer:tasks>
</timer:timer>
</smart:config>
# Exemple : Timer + Mail + State
- Envoyer un courriel avec le modèle "MT_MAILINFO" après 2 heures
- Envoyer un courriel avec le modèle "MT_RELANCE" après 4 jours
- Passer à l'état "rejected" après 7 jours.
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0"
xmlns:timer="https://platform.anakeen.com/4/schemas/timer/1.0">
<timer:timer name="TIMER-95379"
label="Test minute"
structure="MY_ARTICLE"
workflow="MY_WFL_ARTICLE">
<timer:tasks>
<timer:task delta="2 hours">
<timer:sendmail ref="MT_MAILINFO"/>
</timer:task>
<timer:task delta="4 days">
<timer:sendmail ref="MT_RELANCE"/>
</timer:task>
<timer:task delta="1 week">
<timer:setstate state="rejected"/>
</timer:task>
</timer:tasks>
</timer:timer>
<smart:access-configuration name="TIMER-95379"/>
</smart:config>
# Exemple Timer : Date dynamique + Mail + State + Method
Soit la date de fin de rédaction my_deadlinedate
issue de la structure MY_ARTICLE
.
- Envoyer un courriel avec le modèle "MT_RELANCE" une semaine avant la dead line
- Envoyer un courriel avec le modèle "MT_LASTRELANCE" 2 jours avant la dead line
- Passer à l'état "rejected" à la dead line.
- Loguer l'abandon à la dead line.
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0"
xmlns:timer="https://platform.anakeen.com/4/schemas/timer/1.0">
<timer:timer name="TIMER-95379"
label="Test minute"
structure="MY_ARTICLE"
workflow="MY_WFL_ARTICLE">
<timer:field-date-reference ref="my_deadlinedate" />
<timer:tasks>
<timer:task delta="-1 week">
<timer:sendmail ref="MT_RELANCE"/>
</timer:task>
<timer:task delta="-2 days">
<timer:sendmail ref="MT_LASTRELANCE"/>
</timer:task>
<timer:task delta="0">
<timer:setstate state="rejected"/>
<timer:process>
<timer:process-callable function="::LogAbort"/>
<timer:process-argument type="field">my_title</timer:process-argument>
</timer:process>
</timer:task>
</timer:tasks>
</timer:timer>
</smart:config>