# Modèles de règles

## Concepts

Dans le cas le plus simple, un flux correspond à un transfert. Si le flux doit transiter via des serveurs de rebond, il est alors composé de plusieurs transferts.

Prenons l’exemple du flux suivant :

Ce flux gère le transfert des fichiers du partenaire `A` aux partenaires `D` et `G`.

Ce flux est composé de 6 transferts (numérotés ci dessous) répartis sur deux routes :

Cette numérotation se retrouve dans le contexte d’évaluation des modèles sous le nom `flow_index`.

Une deuxième numérotation est disponible dans le contexte d’évaluation: c’est l’indice du transfert dans la route. il se retrouve sous le nom `route_index` et correspond à l’ordre des transferts au sein d’une route :

Chaque transfert correspond à une règle de transfert de Waarp R66. Cette règle est définie à partir d’un modèle de flux.

L’écran de gestion des modèles de flux permet de consulter la liste des templates utilisé pour les flux ainsi que de les modifier.

Fig. 65 Liste des templates

### Structure du template

Un modèle de flux est une liste de règles de transfert :

    rules: [
      Règle 1
      Règle 2
      ...
      règle N
    ]

### Définition des règles

Les règles sont composées d’un nom (`name`), d’un mode, d’une série de tâches (les traitements pré-transfert, post-transfert et en cas d’erreur), Ainsi que d’une condition d’exécution (`when`).

Les chaines de traitement pré-transfert, post-transfert et en cas d’erreur peuvent être définies pour l’émetteur du fichier (`sender`) et le récepteur (`receiver`).

    name: "{{flow_name}}_{{flow_index}}"
    when: [condition]
    mode: send
    tasks: {
      sender: {
        pré: [    # Tâches exécutées par l'émetteur du fichier avant le transfert
          task
          ...
          ]
        post: [   # Tâches exécutées par l'émetteur du fichier après le transfert
          task
          ...
          ]
        error: [  # Tâches exécutées par l'émetteur du fichier en cas d'erreur
          task
          ...]
        }

      receiver: {
        pré: [    # Tâches exécutées par le récepteur du fichier avant le transfert
          task
          ...
          ]
        post: [   # Tâches exécutées par le récepteur du fichier après le transfert
          task
          ...
          ]
        error: [  # Tâches exécutées par le récepteur du fichier en cas d'erreur
          task
          ...
          ]
        }
      }

### Définition des tâches

Les tâches sont composées d’un type, d’arguments, différents pour chaque tâches (`path`), d’un délais (`delay`), et d’une condition d’exécution optionnelle (`when`).

    type: ZIP
    path: "#TRUEFULLPATH# #ARCHPATH#"
    delay: 1
    when: route_index == last_index

## La saisie d’un template

L’écran d’édition d’un template est découpé en 2 partie: La première décrit le template sous la forme d’une arborescence et permet d’accéder rapidement à une partie spécifique du template. La deuxieme permet de l’éditer.

Fig. 66 Edition d’un template

### Ajout d’une règle

Pour ajouter une règle cliquer sur le bouton en face du label `Règles` et sélectioner `Ajouter une règle`.

Fig. 67 Ajout d’une règle

### Suppression d’une règle

Pour supprimer une règle cliquer sur le bouton en face du label de la règle à supprimer et selectioner `Supprimer la règle`.

Fig. 68 Ajout d’une règle

### Ajout d’une tâche

Pour ajouter une tâche cliquer sur le bouton en face d’un des labels `pre`, `post` ou `error` et sélectioner `Ajouter une tâche`.

Fig. 69 Ajout d’une tâche

### Suppression d’une tâche

Pour supprimer une tâche cliquer sur le bouton en face du label de la tâche à supprimer et sélectioner `Supprimer la tâche`.

Fig. 70 Ajout d’une règle