# Déclaration d'une instance de workflow

Une fois le modèle de workflow correctement importé, il est possible de créer un workflow.

La configuration permet de paramétrer :

  • le titre du workflow
  • une description
  • la Smart Structure à laquelle ce workflow peut être attaché
  • la Smart Structure à utiliser pour le profilage dynamique
  • pour chaque étape
    • le profil à appliquer aux Smart Elements à cette étape
    • les accès à appliquer aux Smart Fields à cette étape
    • le masque à appliquer aux Smart Elements à cette étape
    • la couleur de cette étape
    • le contrôle de vue à appliquer aux Smart Elements à cette étape
    • les mails à envoyer lorsqu'un Smart Element arrive dans cette étape
    • les minuteurs à attacher à un Smart Element lorsqu'il arrive dans cette étape
  • pour chaque transition
    • les mails à envoyer lorsque cette transition est effectuée
    • les minuteurs à attacher à un Smart Element lorsqu'il suit cette transition
    • les minuteurs persistants à attacher à un Smart Element lorsqu'il suit cette transition
    • les minuteurs persistants à détacher d'un Smart Element lorsqu'il suit cette transition

La configuration d'un workflow suit le namespace https://platform.anakeen.com/4/schemas/workflow/1.0

La création d'un workflow entraîne la création d'un Smart Element qui suit le modèle de workflow.

Propriétés d'un workflow :

Attribut XML Description
workflow:config/@name (obligatoire) Référence du workflow. Nom logique du Smart Element créé
workflow:config/@model (obligatoire) Référence du modèle workflow. Nom logique du modèle de Workflow
workflow:config/@structure Référence de la Smart Structure compatible avec ce workflow. La Smart Structure permet de restreindre les Smart Elements auxquels ce workflow peut être attaché : seuls les Smart Elements de cette Smart Structure et de ses sous-Smart Structures peuvent dépendre de ce workflow.
workflow:config/@label Libellé du workflow
workflow:config/description Description textuel du workflow

Exemple :

Le workflow CYCLE_ARTICLE utilise le modèle MY_WFL_ARTICLE.

<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0"
              xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">

  <workflow:config name="CYCLE_ARTICLE"
                   model="MY_WFL_ARTICLE"
                   structure="MY_ARTICLE"
                   label="Cycle des articles">
    <workflow:description>Cycle de vie par défaut pour les articles</workflow:description>
  </workflow:config>
</smart:config>

Il est réalisé pour des Smart Elements de type MY_ARTICLE.

<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
    <smart:structure-configuration name="MY_ARTICLE" label="Article">
        <smart:fields>
            <smart:field-set name="my_information" type="frame" access="ReadWrite">
                <smart:field-text name="my_title" label="Titre" access="ReadWrite" is-title="true"/>
                <smart:field-longtext name="my_content" label="Contenu" access="ReadWrite"/>
                <smart:field-timestamp name="my_deadlinedate" label="À remettre avant" access="ReadWrite"/>
                <smart:field-account name="my_writer" label="Contenu" access="Read"/>
            </smart:field-set>
        </smart:fields>
    </smart:structure-configuration>
</smart:config>

# Workflow par défaut d'une Smart Structure

Pour indiquer que tout nouveau Smart Element d'une Smart Structure donnée utilise un workflow, il faut l'indiquer dans la configuration de la structure : structure-configuration/default-workflow/@ref.

Exemple :

Le workflow CYCLE_ARTICLE est utilisé par défaut pour les Smart Elements de type MY_ARTICLE.

<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
  <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
  <!--Default workflow for the structure-->
  <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
  <smart:structure-configuration name="MY_ARTICLE">
    <smart:default-workflow ref="CYCLE_ARTICLE"/>
  </smart:structure-configuration>
</smart:config>

# Paramétrage par étape

# Profil

Lorsqu'un Smart Element arrive dans cette étape, le profil identifié par cette relation lui est donné en référence.

Attention, ce référencement ne se fait que lors du changement d'état. Aussi, si la valeur de ce Smart Field est changée, les Smart Elements qui sont déjà dans cette étape garderont leur profil.

# Masque

Lorsqu'un Smart Element est dans cette étape, sa consultation et sa modification sont soumises au masque identifié par cette relation.

Attention

Cette valeur est récupérée à chaque accès au Smart Element. Aussi, si la valeur de ce Smart Field est changée, les Smart Elements à cette étape sont directement impactés.

<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0"
              xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
    <workflow:config name="CYCLE_ARTICLE"  model="MY_WFL_ARTICLE">
        <workflow:steps>
            <workflow:step ref="start">
                <workflow:mask ref="MSK_START"/>
            </workflow:step>
            <workflow:step ref="control">
                <workflow:mask ref="MSK_CONTROL"/>
            </workflow:step>
            <workflow:step ref="rejected">
                <workflow:mask ref="MSK_REJECTED"/>
            </workflow:step>
            <workflow:step ref="published">
                <workflow:mask ref="MSK_PUBLISHED"/>
            </workflow:step>
            <workflow:step ref="printed">
                <workflow:mask ref="MSK_PRINTED"/>
            </workflow:step>
        </workflow:steps>
    </workflow:config>
</smart:config>

# Couleur

Lorsqu'un Smart Element est dans cette étape, cette couleur lui est associée. Elle est utilisée par les interfaces standards.

Cette couleur doit être au format hexadécimal (#RRGGBB).

<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0"
              xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">

  <workflow:config name="CYCLE_ARTICLE"  model="MY_WFL_ARTICLE">
    <workflow:steps>
      <workflow:step ref="start">
        <workflow:color>#DFCA9F</workflow:color>
      </workflow:step>
      <workflow:step ref="control">
        <workflow:color>#BECC5A</workflow:color>
      </workflow:step>
      <workflow:step ref="rejected">
        <workflow:color>#CC4D55</workflow:color>
      </workflow:step>
      <workflow:step ref="published">
        <workflow:color>#6B8CCC</workflow:color>
      </workflow:step>
      <workflow:step ref="printed">
        <workflow:color>#65CC69</workflow:color>
      </workflow:step>
    </workflow:steps>
  </workflow:config>
</smart:config>

Attention

Cette valeur est récupérée à chaque accès au Smart Element. Aussi, si la valeur de ce Smart Field est changée, les Smart Elements à cette étape sont directement impactés.

# Contrôle de vue

Lorsqu'un Smart Element arrive dans cette étape, le contrôle de vue identifié par cette relation lui est donné en référence.

<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0"
              xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
    <workflow:config name="CYCLE_ARTICLE"  model="MY_WFL_ARTICLE">
        <workflow:steps>
            <workflow:step ref="start">
                <workflow:view-control ref="CV_START"/>
            </workflow:step>
            <workflow:step ref="control">
                <workflow:view-control ref="CV_CONTROL"/>
            </workflow:step>
            <workflow:step ref="rejected">
                <workflow:view-control ref="CV_REJECTED"/>
            </workflow:step>
            <workflow:step ref="published">
                <workflow:view-control ref="CV_PUBLISHED"/>
            </workflow:step>
            <workflow:step ref="printed">
                <workflow:view-control ref="CV_PRINTED"/>
            </workflow:step>
        </workflow:steps>
    </workflow:config>
</smart:config>

Attention

Ce référencement ne se fait que lors du changement d'état. Aussi, si la valeur de ce Smart Field est changée, les Smart Elements qui sont déjà dans cet état gardent leur contrôle de vue.

Attention

Si un état définit un masque et un contrôle de vue, seul le contrôle de vue est pris en compte et le masque est ignoré.

# Modèle de courriel

Lorsqu'un Smart Element arrive dans cette étape, les Modèles de mail identifiés par cette relation sont envoyés à partir du Smart Element.

Plusieurs modèles de mail peuvent être indiqués par étapes.

<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0"
              xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
    <workflow:config name="CYCLE_ARTICLE" model="MY_WFL_ARTICLE">
        <workflow:steps>
            <workflow:step ref="start">
                <workflow:mailtemplate ref="MT_START"/>
            </workflow:step>
            <workflow:step ref="control">
                <workflow:mailtemplate ref="MT_CONTROL1"/>
                <workflow:mailtemplate ref="MT_CONTROL2"/>
                <workflow:mailtemplate ref="MT_CONTROL3"/>
            </workflow:step>
            <workflow:step ref="rejected">
                <workflow:mailtemplate ref="MT_REJECTED"/>
            </workflow:step>
            <workflow:step ref="published">
                <workflow:mailtemplate ref="MT_PUBLISHED"/>
            </workflow:step>
            <workflow:step ref="printed">
                <workflow:mailtemplate ref="MT_PRINTED"/>
            </workflow:step>
        </workflow:steps>
    </workflow:config>
</smart:config>

En plus des clés spécifiques au Smart Element, le workflow ajoute :

Information

Une fois la déclaration des asks effectuée, ils sont utilisables dans les modèles de courriel en utilisant la syntaxe suivante: [V_SMARTFIELD_NAME]

# Minuteur

Lorsqu'un Smart Element arrive dans cette étape, les minuteurs identifiés par cette relation sont donnés en référence au Smart Element.

Si le Smart Element possède déjà des minuteurs, les nouveaux seront ajoutés.

Attention

Ce référencement ne se fait que lors du changement d'état. Aussi, si la valeur de ce Smart Field est changée, les Smart Elements qui sont déjà dans cet état garderont leurs minuteurs.

Attention

Si le Smart Element possède déjà une instance du minuteur à attacher, alors l'instance existante est réinitialisée.

Lorsque le Smart Element quitte cette étape, les minuteurs étant définis à cette étape sont détachés du Smart Element.

Attention

Lorsque le Smart Element quitte cette étape, les instances de tous les minuteurs correspondant à cette étape sont détachés, qu'ils aient été attachés par cette étape, ou par tout autre moyen.

<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
    <workflow:config name="CYCLE_ARTICLE" model="MY_WFL_ARTICLE">
        <workflow:steps>
            <workflow:step ref="start">
                <workflow:timer ref="TM_LOGSTARTING"/>
            </workflow:step>
            <workflow:step ref="control">
                <workflow:timer ref="TM_MAILTO_CONTROLLER"/>
            </workflow:step>
        </workflow:steps>
    </workflow:config>
</smart:config>

# Paramétrage des transitions

# Modèle de courriel

Lorsqu'un Smart Element suit cette transition, les Modèle de mail identifiés par cette relation sont envoyés à partir du Smart Element.

Plusieurs modèles de mail peuvent être indiqués par transitions.

<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
    <workflow:config name="CYCLE_ARTICLE" model="MY_WFL_ARTICLE">
        <workflow:transitions>
            <workflow:transition ref="transmission">
                <workflow:mailtemplate ref="MT_ALERT1" />
            </workflow:transition>

            <workflow:transition ref="correcting">
                <workflow:mailtemplate ref="MT_ALERT2" />
                <workflow:mailtemplate ref="MT_ALERT3" />
            </workflow:transition>
        </workflow:transitions>
    </workflow:config>
</smart:config>

En plus des clés spécifiques au Smart Element, le workflow ajoute :

# Minuteur

Lorsqu'un Smart Element suit cette transition, les minuteurs identifiés par cette relation sont liés au Smart Element.

Si le Smart Element possède déjà des minuteurs, les nouveaux seront ajoutés.

Attention

Cette liaison ne se fait que lors du changement d'état. Aussi, si la valeur de ce Smart Field est changée, les Smart Elements qui sont déjà dans cet état garderont leurs minuteurs.

Attention

Si le Smart Element possède déjà une instance du minuteur à attacher, alors l'instance existante est réinitialisée

Les minuteurs sont détachés à la suite du prochain changement d'état.

# Minuteurs persistant à attacher

Lorsqu'un Smart Element suit cette transition, les minuteurs identifiés par cette relation sont liés au Smart Element.

Si le Smart Element possède déjà des minuteurs, les nouveaux seront ajoutés.

Cette liaison ne se fait que lors du changement d'état. Aussi, si la valeur de ce Smart Field est changée, les Smart Elements qui sont déjà dans cet état garderont leurs minuteurs.

Si le Smart Element possède déjà une instance du minuteur à attacher, alors l'instance existante est réinitialisée.

Ces minuteurs ne seront jamais détachés automatiquement, et doivent être détachés au moyen du Smart Field Minuteurs persistant à détacher.

# Minuteurs persistant à détacher

Lorsqu'un Smart Element suit cette transition, les minuteurs identifiés par cette relation sont détachés du Smart Element.

Lorsque le Smart Element effectue cette transition, les instances de tous les minuteurs correspondant à ce Smart Field sont détachés, qu'ils aient été attachés par cette étape, ou par tout autre moyen.

# Exemple de minuteurs dans les transitions

<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
    <workflow:config name="CYCLE_ARTICLE" model="MY_WFL_ARTICLE">
        <workflow:transitions>
            <workflow:transition ref="transmission">
                <workflow:timer ref="TM_ALERT1" type="volatile"/>
            </workflow:transition>
            <workflow:transition ref="correcting">
                <workflow:timer ref="TM_MAIL" type="volatile"/>
                <workflow:timer ref="TM_ALERT2" type="persistent"/>
            </workflow:transition>
            <workflow:transition ref="rejecting">
                <workflow:timer ref="TM_ALERT2" type="unattach"/>
            </workflow:transition>
            <workflow:transition ref="publishing">
                <workflow:timer ref="TM_ALERT2" type="unattach"/>
            </workflow:transition>
            <workflow:transition ref="rejecting"/>
            <workflow:transition ref="printing"/>
        </workflow:transitions>
    </workflow:config>
</smart:config>