# 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 :
    1. le changement d'état
    2. l'envoi de mail
    3. 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>