Actions

Guide pratique pour ExpressionScript

From LimeSurvey Manual

This page is a translated version of the page ExpressionScript How-tos and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎Tiếng Việt • ‎dansk • ‎español • ‎français • ‎italiano • ‎magyar • ‎polski • ‎română • ‎slovenščina • ‎български • ‎日本語


Aperçu de ce qui a été expliqué précédemment

Si vous avez suivi jusqu'à présent la structure du manuel LimeSurvey, cela signifie que vous maîtrisez déjà la Terminologie LimeSurvey. Ensuite, nous avons abordé les expressions et les variables afin d'apprendre comment améliorer nos enquêtes. Dans la partie suivante, nous sommes passés aux types et significations de syntax highlighting pour apprendre à corriger les erreurs de syntaxe.

Une fois ces notions de base couvertes, nous pourrions passer à des exemples et expliquer le fonctionnement des expressions dans LimeSurvey.


Surlignage de la syntaxe

Les captures d'écran suivantes donnent des exemples, mais n'affichent pas les valeurs des info-bulles. Une info-bulle est une boîte informative qui s’affiche chaque fois que vous passez la souris sur des mots en gras.

Grâce à cette coloration syntaxique, il est très facile de composer des expressions correctes, même celles qui sont compliquées. Bien que l'équipe LimeSurvey envisage d'essayer de créer une interface graphique pour Expression Builder, vous pouvez utiliser la coloration syntaxique existante pour identifier et corriger rapidement les fautes de frappe. Vous pouvez également utiliser les info-bulles pour valider l'exactitude de vos expressions (par exemple, confirmer que vous avez sélectionné la ou les variables souhaitées).

Dans chacun des exemples, il y a trois colonnes :

  1. Source - c'est le texte brut que vous entreriez dans le champ de question de LimeSurvey
  2. Pretty Print - c'est l'équivalent en surbrillance syntaxique de ce que vous avez entré
    • Notez que les expressions sont affichées sur un fond beige, mais ne sont pas entourées d'accolades dans cette mise en évidence.
    • Étant donné qu'EM prend en charge la substitution récursive, l'affichage d'accolades dans la mise en évidence entraînerait des erreurs de syntaxe
  3. Résultat - c'est la sortie générée lorsque EM traite la source
    • Tout ce qui peut être correctement substitué est
    • Les expressions contenant des erreurs sont affichées en ligne, avec une coloration syntaxique. Les erreurs sont entourées d’un cadre bordé de rouge.


Syntaxe appropriée

Vous trouverez ci-dessous des exemples de syntaxe appropriée : 

  1. Values : indique que les variables connues sont codées par couleur selon qu'elles sont définies sur la page en cours. INSERTANS:xxxx à l'ancienne obtient son propre style de codage couleur
  2. Attributs de la question : indique que la notation par points peut accéder à certaines propriétés des questions 
  3. Math : indique que les calculs de base et complexes sont pris en charge 
  4. TextProcessing : affiche certaines des fonctions de traitement de texte disponibles
  5. Dates : affiche deux des fonctions disponibles liées aux dates
  6. Conditional : affiche l'utilisation de la fonction if(). Les choix peuvent être imbriqués.
  7. Paragraphe personnalisé : vous pouvez entièrement personnaliser un rapport en fonction des valeurs précédentes
  8. EM processus dans les chaînes : montre qu'il peut effectuer des substitutions dans les chaînes. Cet exemple génère un nom d'image personnalisé.
  9. EM ne traite pas les accolades comme celles-ci : montre que si les accolades sont échappées ou s'il y a un espace blanc entre l'expression et les accolades, ES ignore l'expression.


Em-syntax-highlighting-1-v2.jpg


Syntaxe EM contenant des erreurs

Voici des exemples d’erreurs courantes lors de la saisie d’expressions ES. Notez que les info-bulles fournissent des informations supplémentaires.

  1. Javascript en ligne qui a oublié d'ajouter des espaces après l'accolade
    • Puisque "document.write" apparaît juste après une accolade, EM pense que c'est une expression, et rouge- cases "document" et "write" puisqu'il s'agit respectivement de variables et de fonctions non définies
  2. Variables, fonctions et opérateurs inconnus/mal orthographiés
    • Ici, nous avons oublié que nous utilisons le nom de variable "sexe" au lieu de " sex", mais EM détecte cette erreur. Il met également en rouge '++', car ce n'est pas un opérateur pris en charge.
  3. Avertit si vous utilisez = au lieu de eq, ou effectuez des affectations de valeurs
    • Notez que '=' et '+=' sont en texte rouge au lieu de noir. Si vous passez la souris dessus, vous verrez des avertissements indiquant que vous attribuez une valeur.
  4. Mauvais nombre d'arguments pour les fonctions
    • if() prend 3 arguments, mais on lui en a donné 4, donc en survolant sur le "if" encadré en rouge expliquera l'erreur et affichera la syntaxe prise en charge
    • sum() prend un nombre illimité d'arguments, mais nous avions une virgule de fin avant les parenthèses fermantes, donc c'est encadré en rouge
  5. Parenthèses incompatibles
    • C'est l'une des erreurs les plus courantes lors de l'écriture d'expressions.
    • Cela montre deux exemples de parenthèses fermantes manquantes et un exemple d'avoir une parenthèse fermante de trop.
#Syntaxe non prise en charge
    • Si vous utilisez un opérateur ou une ponctuation que ES ne prend pas en charge, il le mettra en boîte rouge.
  1. Affectations invalides
    • Certaines variables sont en lectureécriture et leurs valeurs peuvent être modifiées. D'autres sont en lecture seule.
    • Si vous essayez de modifier la valeur d'une variable en lecture seule, vous ne pouvez pas. EM encadrera la tentative en rouge.
    • Si vous essayez d'attribuer une valeur à une équation ou une chaîne, vous obtiendrez également une erreur


Em-syntax-highlighting-errors-v2.jpg


"Live" exemples de mise en évidence de la syntaxe avec des info-bulles actives

Source Jolie impression Résultat
Voici un exemple de syntaxe OK avec des info-bulles
Bonjour {if(gender=='M','Mr.','Mrs.')} {nom}, il est maintenant {date('g:i a',time())}. Savez-vous où se trouvent vos {sum(numPets,numKids)} enfants et animaux de compagnie ?
Voici un exemple de syntaxe OK avec des info-bulles
Bonjour , si ( genre == 'M' , 'Mr.' , 'Mrs.' ) nom de famille , il s'agit maintenant de la date ( 'g:i a' , time ()) . Savez-vous où se trouvent vos enfants et animaux de compagnie total ( numPets , numKids ) ?
Voici un exemple de syntaxe OK avec des info-bulles
Bonjour M. Smith , il est maintenant 6h07. Savez-vous où sont vos 3 enfants et animaux de compagnie ?
Voici les erreurs courantes afin que vous puissiez voir les info-bulles
Variables utilisées avant d'être déclarées : {notSetYet}
Fonction inconnue : {iff(numPets>numKids,1,2)}
Variable inconnue : {sum(age,num_pets,numKids)}
Mauvais # paramètres : {sprintf()},{if(1,2)},{date()}
Attribuer des variables en lecture seule :{TOKEN:ATTRIBUTE_1+=10},{name='Sally'}
Parenthèses déséquilibrées : {pow(3,4},{(pow(3,4)},{pow(3,4))}
Voici les erreurs courantes afin que vous puissiez voir les info-bulles
Variables utilisées avant d'être déclarées : notSetYet
Fonction inconnue : iff ( numPets > numKids ,1,2)
Variable inconnue : somme ( age , num_pets , numKids )
Mauvais # paramètres : sprintf () , if (1,2) , date ()
Attribuer des variables en lecture seule : TOKEN:ATTRIBUTE_1 += 10 , name = 'Sally'
Parenthèses déséquilibrées : pow (3,4 , ( pow (3,4) , pow (3,4) )
Voici les erreurs courantes afin que vous puissiez voir les info-bulles
Variables utilisées avant d'être déclarées : notSetYet
Fonction inconnue : iff ( numPets > numKids ,1,2)
Variable inconnue : somme ( age , num_pets , numKids )
Mauvais # paramètres : sprintf () , if (1,2) , date ()
Attribuer des variables en lecture seule : TOKEN:ATTRIBUTE_1 += 10 , name = 'Sally'
Parenthèses déséquilibrées : pow (3,4 , ( pow (3,4) , pow (3,4) )
Voici une partie de la syntaxe non prise en charge
Aucune prise en charge de '++', '--', '%',';' : {min(++age, --age,age % 2);}
Ni '|', '&', '^' : {(sum(2 | 3,3 & 4,5 ^ 6)}}
Ni les tableaux : {name[2], name['mine']}
Voici une partie de la syntaxe non prise en charge
Pas de support pour '++', '--', '%',';' : min ( ++ age , -- age , age % 2) ;
Ni '|', '&', '^' : ( sum (2 | 3,3 & 4,5 ^ 6) }
Ni les tableaux : nom [ 2 ] , nom [ 'le mien' ]
Voici une partie de la syntaxe non prise en charge
Pas de support pour '++', '--', '%',';' : min ( ++ age , -- age , age % 2) ;
Ni '|', '&', '^' : ( sum (2 | 3,3 & 4,5 ^ 6) }
Ni les tableaux : nom [ 2 ] , nom [ 'le mien' ]


Exemples d'adaptation (par exemple, extension de {INSERTANS:xxx})

"Cher {M.}/{Mme} Smith..."

Utilisez la fonction if() pour choisir conditionnellement si vous souhaitez afficher « M. ». ou 'Madame'.

La syntaxe est if(test,do_if_true,do_if_false).

# Code Question Type
1 sexe Quel est votre sexe ? Sexe
|exemple1 Cher {if(gender=='M','Mr.','Mrs.')} Smith, ... Long texte libre


Em-tailoring-q-ex1.jpg


Comme on peut le constater ci-dessous, « M. » et « Mme » sont adaptés à ce que le répondant choisit comme réponse à la question « genre ».


Em-tailoring-q-ex1-usage.jpg Em-tailoring-q-ex2-usage.jpg


"Cher {M.}/{Mme} Smith..." dans l'e-mail d'invitation

Vous pouvez utiliser l'exemple ci-dessus dans l'e-mail d'invitation en utilisant les attributs de la table des jetons. Utilisez la fonction if() pour choisir si « M. » ou 'Mme.' doit être utilisé dans l’e-mail.


La syntaxe est "if(test,do_if_true,do_if_false)".

# attribut valeur
1 Nom Smith
2 Adresse e-mail test@test. com
3 ATTRIBUTE_2 M


Texte dans l'e-mail d'invitation :

Cher {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},

vous avez été invité à participer à une enquête :

https:/...


EmEx1mail.jpg


vue par e-mail :


EmEx1mailview.jpg


Exemples de calcul / d'évaluation

Calculez les valeurs d'évaluation au moment de l'exécution et stockez les résultats dans les données d'enquête

Cet exemple utilise toutes les fonctionnalités d'EM, notamment la pertinence, la personnalisation et le type de question Équation.

Cela montre également qu'ils sont tous compatibles JavaScript, donc si vous disposez de ces fonctionnalités sur une page, cela changera dynamiquement à mesure que les gens définiront et modifieront leurs réponses.

# Code Question Type Pertinence
1 numKids Combien d'enfants avez-vous ? Saisie numérique - 2 kid1 Quel âge a votre premier enfant ? Saisie numérique numKids >= 1
3 kid2 Quel âge a votre deuxième child? Saisie numérique numKids >= 2
4 kid3 Quel âge a votre troisième enfant ? Saisie numérique numKids >= 3
5 kid4 Quel âge a votre quatrième enfant ? Saisie numérique numKids >= 4
6 sumKidAges {sum(kid1.NAOK,kid2. NAOK,kid3.NAOK,kid4.NAOK)} Équation 1
7 kidSummary Vous avez dit que vous aviez {numKids}. {if(numKids==1,'enfant','enfants')}. {if(numKids>1,implode(' ','La somme des âges de vos premiers ',min(numKids,4),' enfants est ',sumKidAges,'.'),' ')} |1


Pour télécharger cet exemple, veuillez cliquer sur le lien suivant : Assessments_survey_example.


Vous trouverez ci-dessous des captures d'écran de questions représentatives. Comme vous pouvez le constater, la syntaxe EM met en évidence tous les champs susceptibles de contenir une personnalisation. Ici, vous voyez des exemples de pertinence de mise en évidence de la syntaxe, de type de question Équation et de substitutions au sein d’une question. Vous pouvez également utiliser des substitutions dans l'aide, l'affichage de l'en-tête de groupe, le message de bienvenue et le message de fin.

Dans l'exemple suivant, puisque la pertinence est {numKids >= 2), la question ne sera visible que si la répondante déclare avoir au moins deux enfants.


Em-tailoring2-q-kid2.jpg


Ci-dessous, vous remarquerez peut-être que chaque variable est associée au suffixe .NAOK. Cela est dû à la façon dont EM prend en charge la pertinence en cascade. Si vous n'aviez pas .NAOK, alors la somme ne serait calculée que si la personne dit avoir 4 enfants (par exemple, si toutes les variables sont pertinentes). L'utilisation de .NAOK signifie que nous voulons calculer la somme même si tout ou partie des variables ne sont pas pertinentes (par exemple, "Non applicable" (NA) est correct (OK)).

Cependant, l'attribut .NAOK affecte uniquement si les variables sont transmises à EM. Si la personne interrogée dit initialement qu'elle a 3 enfants et entre l'âge de chacun, puis change d'avis et dit qu'elle en a 2, nous ne voulons pas voir la somme des 3 valeurs saisies - puisque le troisième enfant est "sans objet". dans notre cas plus :


Em-tailoring2-q-sumKidAges.jpg


Chaque expression distincte est codée par couleur avec un fond beige. Comme vous pouvez le constater, il existe ici trois expressions distinctes. Le dernier contient un message qui s'affiche sous condition uniquement si la personne a plus d'un enfant.


Em-tailoring2-q-kidSummary.jpg


Voici maintenant des captures d’écran de l’enquête en action.

Lorsque vous visitez la page pour la première fois, vous voyez ceci. Notez qu'il est dit "Vous avez 0 enfant" au lieu de "Vous avez 0 enfant".


Em-tailoring2-s-0kids.jpg


Si je change la valeur du nombre d'enfants à 1, l'affichage passe instantanément à ceci, même s'il se trouve sur la même page :


Em-tailoring2-s-1kid.jpg


Notez maintenant que la grammaire est correcte : "Vous avez 1 enfant".

Maintenant, je change la valeur du nombre d'enfants à 3, et l'affichage change instantanément à ceci.

Notez que vous voyez maintenant le message conditionnel en bas : "La somme des âges de vos 3 premiers enfants est 0."


Em-tailoring2-s-3kids.jpg


Je vais maintenant saisir l'âge de mes enfants imaginaires et j'obtiens cet affichage, résumant leurs âges :


Em-tailoring2-s-3kids-sum.jpg


Encore une fois, le score et l'affichage sont mis à jour instantanément au fur et à mesure que je saisis les valeurs, vous pouvez donc l'utiliser pour afficher le total cumulé d'un score d'évaluation.


Maintenant, je change la valeur du nombre d'enfants à 2. L'affichage est devenu ceci :


Em-tailoring2-s-2kids-sum.jpg


Notez que même si j'avais saisi une valeur de 5,5 pour le troisième enfant, le rapport ne résume désormais que les valeurs de mes 2 premiers enfants.

La raison en est que la 3ème valeur n'est plus pertinente et que les valeurs non pertinentes sont activement ignorées par EM.

Si je devais remettre le nombre d'enfants à 3, je verrais la valeur de 5,5 que j'ai saisie à nouveau. Ainsi, je ne perds aucune information saisie sur la page.

Cependant, si je navigue vers la page Suivant ou Précédent, toutes les valeurs non pertinentes seront supprimées dans la session et dans la base de données. Donc, si je gardais la valeur à 2, passais à la page suivante, puis revenais et déclarais que j'ai effectivement 3 enfants, je ne verrais plus l'âge de 5,5 ans.


Entrez les données et voyez un rapport changeant dynamiquement de ce qui a été saisi sur la même page

Cet exemple présente le processus de personnalisation dans LimeSurvey.

Pour télécharger cet exemple, cliquez sur le lien suivant : Exemple d'enquête sur les changements dynamiques.

Voici à quoi ressemble la page au départ. Vous voyez uniquement la question demandant dans quelle ville vous habitez :


Em-on page report-usage-1.jpg


Une fois que vous commencez à saisir une réponse, le processus de personnalisation démarre également :

Em-on page report-usage-2.jpg


Au fur et à mesure que vous saisissez les réponses, le tableau en bas de la page est mis à jour pour afficher les codes de réponse et les valeurs de vos réponses.


Em-on page report-usage-3.jpg

Exemples de débogage courants

Instructions if() imbriquées (logique conditionnelle)

EM prend en charge la fonction « if(test,do_if_true,do_if_false) » afin que vous puissiez effectuer une logique conditionnelle ou une personnalisation. Cette fonction peut être imbriquée pour faire l'équivalent de "if { } else if { } else { }". EM vous fera savoir si les parenthèses ne sont pas équilibrées (par exemple, s'il vous manque une parenthèse fermante droite), ou si vous avez des parenthèses droites supplémentaires. Vous devriez essayer de compter les parenthèses lorsque vous composez de longues instructions if imbriquées, les enregistrer, vérifier les erreurs de syntaxe et les corriger si elles sont trouvées. Vérifions ensemble l'exemple ci-dessous.

Le groupe de questions utilisé ci-dessous est accessible à partir d'ici : Tailoring Survey example.lsg


Tout d’abord, sans rien saisir, vous voyez simplement « Bonjour ».


Em-nested-if-blank.jpg


Si vous saisissez un nom, le message "Bonjour {nom}" s'affiche.


Em-nested-if-name.jpg


Si vous indiquez un âge, vous recevez un message personnalisé, selon que vous êtes un enfant d'âge préscolaire ou non :


Em-nested-if-toddler.jpg


Âge scolaire, adolescent ou adulte. Voici un adolescent qui souhaite rester anonyme :


Em-nested-if-teenager.jpg


Voici le fichier logique du groupe. Comme vous pouvez le voir dans la question « si basé », il existe des déclarations if imbriquées basées sur l'âge de la personne.


Em-nested-if-logic-file.jpg


Lorsque vous modifiez initialement cette question, il est probable qu'à un moment donné, vous ayez un nombre de parenthèses incorrect. Voici ce qui se passe si vous en avez trop peu :


Em-nested-if-missing-closing-paren.jpg


Si vous survolez le mot « si », qui est entouré d'un cadre rouge, il est indiqué « Parenthèses non équilibrées ». Dans ce cas, il devrait y avoir quatre parenthèses fermantes après « déjà adulte ! », mais il n’y en a que trois.

Si par contre vous disposez d’une parenthèse droite supplémentaire, elle sera entourée d’un cadre rouge, comme ceci :


Em-nestedd-if-extra-right-paren.jpg


Lorsque vous modifiez réellement la question, la question ressemble à ceci :


Em-nested-if-edit-screen.jpg