Conditions

De nombreux outils dans DocuMold nécessitent une condition :

  • Les fonctions IF et IFS
  • Les actions @IF et @ELSEIF

Si vous n’êtes pas encore familier avec ces fonctions et actions, il peut être utile de lire d’abord Contenu conditionnel qui présente la plupart.

Ce document explore ce qui peut être utilisé comme conditions et comment en créer de plus complexes.

Ce qui constitue une condition

Dans DocuMold, une condition est vraiment juste quelque chose qui évalue à TRUE ou FALSE. Ces deux valeurs sont les seules qui peuvent être données à IF et à tous les autres outils qui attendent une condition.

Dans les tutoriels, les conditions utilisent presque toujours l’opérateur =. Par exemple :

<# @IF(pays_client = "Canada") #>
Un Canadien
<# @ENDIF #>

Mais il y a bien plus d’outils que vous pouvez utiliser pour les conditions, nous allons les lister sous peu.

Puisque les conditions ne peuvent retourner que TRUE ou FALSE, les explications ci-dessous sont raccourcies en ne mentionnant qu’un des 2 cas. Il y a une règle non écrite “sinon, renvoie l’autre valeur”.

Plus d’opérateurs de condition

Les opérateurs sont similaires aux fonctions. Ils reçoivent des valeurs et fournissent une nouvelle valeur. La différence est que les valeurs reçues sont celles à sa gauche et à sa droite.

Voici une liste des opérateurs que vous pouvez utiliser comme condition.

Tout d’abord, ces opérateurs peuvent être utilisés avec n’importe quel type de valeurs :

  • gauche = droite : c’est TRUE si gauche est égal à droite
  • gauche <> droite : c’est TRUE si gauche est différent de droite

Cependant, les opérateurs suivants sont uniquement disponibles lorsque gauche et droite sont des nombres :

  • gauche < droite : c’est TRUE si gauche est plus petit que droite
  • gauche > droite : c’est TRUE si gauche est plus grand que droite
  • gauche <= droite : c’est TRUE si gauche est plus petit ou égal à droite
  • gauche >= droite : c’est TRUE si gauche est plus grand ou égal à droite

Pour que gauche et droite soient des nombres (au lieu de texte contenant des chiffres), vous devez soit :

  • utiliser l’action @NUMBER_QUESTION pour définir la variable comme un nombre
  • écrire une valeur numérique directement dans le code sans guillemets, ex : âge >= 18
  • utiliser une fonction qui convertit en nombre : NUMBER(texte_contenant_des_nombres)
  • utiliser une fonction qui renvoie un nombre : FIND(&quot;tout&quot;, &quot;bonjour tout le monde&quot;) donne la position du premier texte à l’intérieur du second, qui est le nombre 9

Voici des exemples avec certains de ces différents opérateurs :

<# IF(âge >= 18, "Un adulte", "Un non-adulte") #>

<# @IF(pays_client <> "Canada") #>
Un non-Canadien
<# @ENDIF #>

Fonctions comme conditions

Certaines fonctions renvoient soit TRUE, soit FALSE ; elles peuvent aussi être utilisées comme condition. Quelques exemples :

  • CAN_FIND(texte_à_trouver, dans_texte) : renvoie TRUE si texte_à_trouver est dans dans_texte, sensible à la casse
  • CAN_SEARCH(texte_à_trouver, dans_texte) : renvoie TRUE si texte_à_trouver est dans dans_texte, insensible à la casse
  • CONTAIN(liste, valeur) : renvoie TRUE si liste contient la valeur

Voici un exemple :

<# @IF(CONTAIN(avantages_sélectionnés, "mariage")) #>
Un mariage est prévu le....
<# @ENDIF #>

Combiner les conditions

Vous voudrez peut-être combiner plusieurs conditions. Ces 2 fonctions reçoivent autant de conditions que vous le souhaitez et renvoient TRUE ou FALSE :

  • AND(cond1, cond2...) : renvoie TRUE si chaque condition est TRUE
  • OR(cond1, cond2...) : renvoie TRUE si au moins une condition est TRUE

Vous pouvez aussi inverser une condition avec ceci :

  • NOT(condition) : renvoie TRUE si condition est FALSE, renvoie FALSE si condition est TRUE

Exemple complet :

<# @IF(AND(boissons_demandées, âge < 18)) #>
Désolé, mais vous n'êtes pas autorisé à boire des boissons alcoolisées.
<# @ENDIF #>

<# IF(OR(âge >= 18, est_avec_adulte), "Est autorisé sur les pistes difficiles") #>

Variables comme condition

Si la valeur d’une variable est TRUE ou FALSE, elle peut être utilisée directement comme condition.

Certaines façons dont cela peut arriver :

  • action @YES_NO_QUESTION : la variable est définie soit à TRUE, soit à FALSE
  • action @PICK_ONE_QUESTION : peut définir la variable à une valeur de votre choix, qui peut être TRUE ou FALSE Ex : @PICK_ONE_QUESTION(est_adulte, choix: [["Adulte", TRUE], ["Enfant", FALSE]])

Chaîner les opérateurs

DocuMold vous permet de “chaîner” les opérateurs de condition. C’est un petit raccourci lorsque vous voulez comparer plusieurs valeurs.

sample = dm_sample(%{
  <# IF(18 <= âge < 65, "Adulte régulier") #>
}).test_with({âge: 70}, %{
}).test_with({âge: 19}, %{
  Adulte régulier
})

Cette condition serait TRUE si âge est 18 ou plus, mais aussi plus petit que 65.

Chaque opérateur est appliqué sur les valeurs à sa gauche et à sa droite : 18 <= âge et âge < 65. Le résultat final est TRUE si chaque opérateur a donné TRUE.

L’équivalent sans chaînage serait :

sample = dm_sample(%{
  <# IF(AND(18 <= âge, âge < 65), "Adulte régulier") #>
}).test_with({âge: 70}, %{
}).test_with({âge: 19}, %{
  Adulte régulier
})

Autres choses à lire

L’utilisation principale des conditions est pour le contenu conditionnel. Voici un tutoriel à ce sujet : Contenu conditionnel.