Moteur ExpressionScript - Guide de démarrage rapide
From LimeSurvey Manual
Guide de démarrage rapide
Dans LimeSurvey, vous pouvez personnaliser davantage vos enquêtes via l'utilisation d'ExpressionScript (abrégé : ES). Sidenote : "ExpressionScript était nommé Expression Manager (EM) dans la version précédente. Si vous lisez Expression Manager quelque part, il s'agit simplement de l'ancien nom d'ES."
ES peut être utilisé pour spécifier les éléments suivants :
- Navigation/Branching - permet aux réponses d'un répondant de modifier l'ordre dans lequel les questions sont affichées;
- Adaptation/Piping - vous aide à formuler la question (par exemple en faisant référence à réponses antérieures, ou conjugaison de phrases en fonction de l'âge ou du sexe de vos sujets) ou comment générer des rapports personnalisés (comme des résultats d'évaluation ou des conseils personnalisés);
- Validation - garantit que les réponses répondent à certains critères, comme les valeurs min et max ou un certain modèle d'entrée.
ES fournit un moyen intuitif de spécifier la logique de chacune de ces fonctionnalités. Presque tout ce que vous pouvez écrire sous forme d’équation mathématique standard est une expression valide.
ES donne actuellement accès à 70 fonctions et peut être facilement étendu pour en prendre en charge davantage. Il vous permet également d'accéder à vos variables en utilisant des noms de variables lisibles par l'homme (plutôt que des SGQA names).
Les sections suivantes montrent les principaux endroits où l'ES est utilisé.
Certaines enquêtes utilisent « Goto Logic », de sorte que si vous répondez à la question 1 avec l'option C, vous êtes redirigé vers la question 5. Cette approche est très limitée car difficile à valider. De plus, il se casse facilement lorsque vous devez réorganiser les questions. D'autre part, ES utilise des Équations de pertinence booléennes pour spécifier toutes les conditions dans lesquelles une question peut être valide. Si la question est pertinente, alors la question est affichée, sinon elle n'est pas applicable et la valeur « NULL » est stockée dans la base de données.
Pour mieux comprendre le concept de pertinence, concentrons-nous sur l'enquête suivante qui calcule l'indice de masse corporelle (IMC) des répondants à l'enquête. Pour le télécharger, cliquez sur le lien suivant : Exemple d'enquête sur l'indice de masse corporelle.
L'équation de pertinence est présentée ci-dessous dans la colonne Pertinence après le nom de la variable. Les valeurs de pertinence de poids, poids_unités, hauteur et hauteur_unités sont toutes 1 (valeur par défaut), ce qui signifie que ces questions sont toujours affichées. Cependant, la pertinence pour l'IMC est {!is_empty(height) et !is_empty(weight)}, ce qui signifie que l'IMC ne sera calculé que si le sujet saisit une valeur pour la taille et le poids (évitant ainsi le risque d'obtenir une erreur nulle). De plus, la question « Rapport » ne s'affiche que si le répondant répond aux quatre questions principales (taille, unités de taille, poids, unités de poids).

La pertinence est affichée et modifiable lorsque :
- vous souhaitez afficher/modifier la pertinence au niveau de la question
- vous souhaitez afficher/modifier la pertinence au niveau du groupe
Affichage/Modification de la pertinence au niveau des questions
Cette équation calcule l'indice de masse corporelle (IMC). Il est seulement demandé si la personne indique sa taille et son poids.

Ceci est l'écran d'édition de la question « IMC ».

Notez que vous n’utilisez pas d’accolades lorsque vous saisissez une équation de pertinence.
Affichage/Modification de la pertinence au niveau du groupe
Concentrons-nous maintenant sur un autre exemple : une simple enquête de recensement. Pour le télécharger, cliquez sur le lien suivant : Exemple d'enquête de recensement.
La première page demande combien de personnes vivent avec vous et stocke cela dans la variable "cohabs". Cette page ne s'affiche que si vous avez plus d'un cohabitant (elle s'affiche pour la deuxième personne cohabitant avec vous). Aussi, p2name, p2age. p2sum ne sont affichés que si la question précédant chacune d'elles contient une réponse.

Ainsi, le groupe a également des critères de pertinence au niveau des questions, de sorte que certaines questions n'apparaissent que si vous avez répondu à certaines questions avant elles (par exemple, p2age est affiché si p2name a reçu une réponse). ES combine la pertinence au niveau du groupe et de la question pour vous. Les questions en groupe ne sont posées que si le groupe dans son ensemble est pertinent. Ensuite, seul le sous-ensemble de questions pertinentes au sein du groupe est posé.
Voici la capture d'écran permettant de modifier la pertinence au niveau du groupe de « Cohabitant 2 » :

Notez que vous n’utilisez pas d’accolades lorsque vous saisissez une équation de pertinence.
Confection/Piping
ES vous permet d'effectuer facilement une personnalisation conditionnelle simple et complexe. Parfois, vous avez juste besoin d'une simple substitution, comme dire : "Vous avez dit que vous avez acheté [ Produit]. Qu'est-ce que vous avez le plus aimé?". Parfois, vous avez besoin d'une substitution conditionnelle comme " [ Monsieur Madame.] [ LastName], seriez-vous prêt à répondre à notre enquête ?". Dans ce cas, vous souhaitez utiliser "M. ou Mme." en fonction du sexe de la personne. D'autres fois, vous avez besoin d'une substitution encore plus complexe (par exemple, basée sur un calcul mathématique). ES prend en charge chacun de ces types de couture/passepoil.
Équations conditionnelles
L'exemple de l'indice de masse corporelle montre la possibilité de calculer l'IMC d'une personne, tout en lui permettant de saisir sa taille et son poids dans deux unités différentes (cm contre pouces et kg contre livres) :

Dans ce cas, poidskg est {if(weightunits == "kg", poids, poids * 0,453592)}. Cette fonction "if()" signifie que si le sujet saisit le poids en kilogrammes, utilisez cette valeur, sinon multipliez la valeur saisie (les livres sont l'alternative) par 0,453592 pour la convertir en kilogrammes. La variable heightm utilise une approche similaire pour calculer la taille de la personne en mètres (taille en cm/100), même si elle a saisi sa taille en pouces (1 mètre = 3,28084 pouces).
L'IMC est calculé comme : {poidskg / (hauteurm * hauteurm)}.
Enfin, le rapport adapte le message au sujet de manière conditionnelle, en lui indiquant ce qu'il a saisi. (Par exemple : « Vous avez dit que vous mesuriez 2 mètres et pesiez 70 kg. »)
Dans l'image ci-dessous, Weightstatus utilise des instructions "if()" imbriquées pour classer la personne comme souffrant d'insuffisance pondérale ou gravement obèse. Vous pouvez voir son équation en vérifiant sa logique :

Dans la fenêtre d'édition de cette question, vous pouvez voir deux choses :
- La personnalisation doit entourer les expressions d'accolades
- Les expressions peuvent s'étendre sur plusieurs lignes si, comme dans ce cas, vous souhaitez faciliter la lecture du logique conditionnelle imbriquée.

Questions, réponses et rapports personnalisés

The BMI report looks like this:

Here is the edit window for the same question.

Anything within curly braces is treated as an expression, being syntax-highlighted (color coded) in the prior image. If you have any typos (such as misspelled or undefined variable names or functions), ES would show an error. In our below example:
- heightunit.shown is an undefined variable name (it is actually heightunits.shown) and
- "rnd()" is an undefined function (the proper function name is "round()").
In both cases, the errors are located within a red box to make it easier to spot and fix them.

You can also see that you can quickly create complex reports, such as a table of entered values or tailored advice.
Please remember that all tailoring must surround expressions with curly braces so that LimeSurvey knows which parts of the question are free text and which should be parsed by the ExpressionScript engine.
Validation
ES controls how most of the advanced question options work. These control aspects like min/max numbers of answers, min/max individual values, min/max sum values, and checking that entered values match specified string patterns. Any value in one of those fields is considered an expression, so you can have min/max criteria with complex conditional relationships to other questions.
In all of these cases, since the advanced question attribute is always considered an expression, you do not use curly braces when specifying it.
The sample surveys page shows many working examples containing a variety of validation expressions.
ExpressionScript - presentation
To find out more about ExpressionScript and how you can use different expressions to enhance your survey, please click on the following link.