Bonnes Pratiques - Questionnaires


Questionnaires multi-sections

Versions minimum : Service Manager H2.2016 - Service Apps H1.2017

Principe de base

La notion de section a été introduite dans les questionnaires afin de répondre aux besoins suivants :

  • Possibilité de paramétrer le contenu d'une question en fonction de la réponse à une question précédente pour le cas des questions comportant du code SQL.

    exemple   Une première question permet de sélectionner un groupe et une deuxième permet de sélectionner un employé parmi les membres du groupe.

  • Saisie des gros questionnaires plus confortable et plus simple pour les utilisateurs.

    exemple   Un questionnaire de 70 questions, réparties en 3 pages.

  • Garantir que les utilisateurs passent en revue le questionnaire en entier avant de le soumettre.

    exemple   Une enquête de satisfaction comporte 20 questions, toutes facultatives : si elles sont réparties sur 2 pages, on évite les saisies rapides, limitées aux premières questions de l'enquête. 

   Open url.png  voir Description des questionnaires

Questions dont le contenu dépend d'une question avec code SQL

Pour permettre cette fonctionnalité, la réponse à la première question doit être enregistrée en base afin de pouvoir récupérer son identifiant et l'utiliser dans la deuxième question.

  • La première question doit être affichée dans une section et la deuxième dans une autre section.
  • Lorsque la dernière question d'une section est complétée, toutes les réponses de cette section sont enregistrées en base. On passe ensuite à la section suivante.
    Note : Si la dernière question de la section est de type Liste SQL, le système affiche la section suivante automatiquement (l'utilisateur n'a pas à utiliser le bouton Suivant).

Limites

  • Dans une condition d'affichage d'une question, seules les questions présentes sur la même section sont présentées. Pour utiliser une question affichée dans une section précédente, passez par une condition SQL.
  • Pour paramétrer des questions dépendant de réponses précédentes de type Liste SQL, éditez les questionnaires-sections depuis le questionnaire parent. C’est la seule façon de pouvoir disposer des balises correspondant aux réponses des questions des sections précédentes du questionnaire multi-sections.

Procédure

      Download icon.png  Téléchargez Exemple de questionnaire multi-sections

1. Créez les différentes sections en laissant de côté le paramétrage des conditions référençant un contenu de question Liste SQL précédente.

2. Créez le questionnaire multi-sections et associez-lui les sections créées.

3. Éditez la section ayant une question basée sur une question précédente et ajoutez le code de la question précédente via l'icône Roles-Tags window icon.png
         Question_code tag.png

4. Après avoir dupliqué d'anciens questionnaires pour les diviser en sections, vérifiez que les conditions d’affichage du questionnaire d’origine ne font pas référence à des questions déplacées dans des pages différentes -  Open url.png  voir Requête dans la FAQ

Bonnes pratiques

  • Lorsque la dernière question d'une section est de type Liste SQL, la section suivante s'affiche automatiquement dès que cette question est complétée. Pour économiser des clics (bouton Suivant pour passer d'une section à l'autre), placez une question de ce type en fin de section.
  • Renseignez un code unique et significatif pour toutes les questions utilisées dans le contenu ou dans la condition d'affichage d'autres questions.
  • Lorsque le contenu d'une question dépend de la réponse à une question de type Liste SQL, pensez à gérer le cas où la question précédente n'a pas été saisie.

exemple   Liste des incidents pour un matériel choisi

Bonnes pratiques Non recommandé
SD_REQUEST.ASSET_ID=cast('#[QUESTION_CODE.ASSET]#' as integer)
  • La fonction cast remplace un éventuel vide par zéro (ex. : aucun matériel sélectionné).
  • La requête ne retourne aucun résultat.
SD_REQUEST.ASSET_ID=#[QUESTION_CODE.ASSET]#
  • Si aucun matériel n'est sélectionné, la requête renvoie un message d'erreur à l'utilisateur lorsqu'il sélectionne un incident.
  • Dans certains cas, il peut être judicieux d'afficher une question dont le contenu dépend d'une réponse précédente de type Liste SQL uniquement si la question précédente a été complétée.

    exemple   Questions permettant de saisir une entité avec navigation par niveau

Procédure : Comment passer un gros questionnaire en multi-pages

1. Analysez votre questionnaire pour :

  • décider en combien de pages il doit être divisé ;
  • définir les questions début et fin sur chaque page ;

Note : Les conditions d’affichage d’une question basée sur une question dans une page précédente devront être réécrites en condition SQL. 

  • Pour éviter cette réécriture, regroupez sur la même page les questions dont les réponses conditionnent l’affichage d’autres questions et ces dernières. 
  • Lorsque ce regroupement ne peut pas être fait, éditez les conditions d’affichage pour les passer en type SQL.
     Open url.png  voir Exemple de requête
  • noter les rangs d’affichage des premières et dernières questions de chacune des pages. 

2. Dupliquez votre questionnaire autant de fois que vous souhaitez créer de pages :

  • Cochez la case Est une section

3. Éditez chacun des questionnaires-section nouvellement créés et supprimez les questions se trouvant maintenant dans les autres sections (pages).

Note : Sur les gros questionnaires, la suppression d’une question pouvant être longue, vous pouvez les supprimer par requête en base :

  • Éditez chacun des questionnaires-section et notez son identifiant affiché dans l'URL à droite du paramètre q2_id :

    exemple   

...filter=1&q2_id=68&q2_tree_id=...

  • Exécuter la requête suivante : Attention : Testez-la auparavant dans votre Sandbox car il s'agit d'une requête de suppression.
    DELETE FROM sd_question_question_list
    WHERE  question_list_id = valeurduparametre
          AND ( display_order < valeurrangpremierequestion
          OR display_order > valeurrangdernierequestion );

4. Créez le questionnaire multi-sections et associez les questionnaires-section créés précédemment, en précisant Nouvelle page sur chaque section.

5. Après avoir dupliqué d'anciens questionnaires pour les diviser en sections, vérifiez que les conditions d’affichage du questionnaire d’origine ne font pas référence à des questions déplacées dans des pages différentes -  Open url.png  voir Requête dans la FAQ

6. Remplacez le gros questionnaire dans votre référentiel (workflows et surcharges de questionnaires).

Condition d'affichage basée sur une question d'une section précédente

Lorsque vous ne pouvez pas grouper sur la même section une question et une autre dont l'affichage en dépend, la condition d'affichage doit forcément être de type SQL.

exemple   Pour une condition du type Case cochée :

Table

SD_REQUEST

Jointures

INNER JOIN SD_QUESTION_RESULT ON SD_QUESTION_RESULT.REQUEST_ID = SD_REQUEST.REQUEST_ID
INNER JOIN SD_QUESTION ON SD_QUESTION_RESULT.QUESTION_ID=SD_QUESTION.QUESTION_ID AND SD_QUESTION.QUESTION_CODE='QuestionCode' AND SD_QUESTION_RESULT.RESULT_BIT = 1

Condition (WHERE)

SD_REQUEST.REQUEST_ID=@ID@

Pour prendre en compte le cas du multi-panier, ajoutez une deuxième condition (avec l'opérateur OU), en remplaçant les jointures précédentes par celles-ci :

INNER JOIN SD_REQUEST_DETAIL ON SD_REQUEST_DETAIL.REQUEST_ID = SD_REQUEST.REQUEST_ID
INNER JOIN SD_QUESTION_RESULT_DETAIL ON SD_QUESTION_RESULT_DETAIL.REQUEST_DETAIL_ID=SD_REQUEST_DETAIL.REQUEST_DETAIL_ID
INNER JOIN SD_QUESTION QUEST_DETAIL ON
SD_QUESTION_RESULT_DETAIL.QUESTION_ID=QUEST_DETAIL.QUESTION_ID AND QUEST_DETAIL.QUESTION_CODE='QuestionCode' AND SD_QUESTION_RESULT_DETAIL.RESULT_BIT = 1

Limites

  • Les questions de type Liste SQL basées sur la question précédente (utilisant une balise #QUESTION_CODE.xxx#) ne peuvent pas être testées en mode Prévisualisation. Une erreur s'affiche si vous tentez d'ouvrir la liste.
  • La fonctionnalité de surcharge d’un questionnaire n’est pas disponible au niveau des sections.
  • L'espace pour l'affichage des libellés est plus petit sur les sections/pages.
    • Lorsque vous découpez un questionnaire en sections/pages, retravaillez les longs libellés pour éviter un affichage sur plusieurs lignes.
    • Pour afficher les libellés dans un espace plus large, ajoutez la surcharge suivante dans le fichier customer_optimized.css :
.question_label {    white-space: nowrap;  }

Questions de type Enquête

Versions minimum : Service Manager H2.2016 - Service Apps H1.2017

L'affichage de questions de type Enquête se fait en ajoutant une question de type Entête de tableau suivie d'une série de questions de type Bouton radio ayant les mêmes choix d'options et sans affichage du libellé (option Afficher les libellés des valeurs = Faux).

      Download icon.png Téléchargez  Export d'un exemple de questionnaire de type Enquête

  • Pour un bon alignement des puces, renseignez le même nombre d'options par ligne (jusqu'à 11) pour toutes les questions de la série, ainsi que l'option d'alignement (gauche, centre, droite).
  • L'espace réservé à l'affichage des options de réponses (puces) est divisé en 12 colonnes.
    • Selon le nombre d'options d'une question, une puce est affichée sur un espace représentant la largeur de 1 à 6 colonnes.
    • Pour une question ayant 7 options, celles-ci sont affichées de la même façon que pour une question ayant 11 options (largeur d'une colonne dans les 2 cas).
Nombre d'options Nombre de colonnes pour l'affichage d'une puce
2 6
3 4
4 3
5,6 2
7 à 11 1
  • Pour aligner les puces sur 2 séries de questions qui n'ont pas le même nombre d'options, vous pouvez, sur la série qui a le moins d'options :
    • ajouter des éléments vides sur l'entête du tableau, de façon à avoir le même nombre d'éléments que sur l'autre série ;
    • renseigner le paramètre Nombre d'éléments par ligne à la même valeur que sur l'autre série.

Bonnes pratiques

  • Préférez l'option Centré pour l'alignement des libellés de l'entête du tableau ainsi que pour les options des éléments des questions de type Bouton radio.
  • Si les libellés de l'entête sont longs, forcez le retour à la ligne en ajoutant des balises <BR /> pour éviter que vos libellés ne soient tronqués.

exemple

Libellés sur 2 lignes Libellés sur une ligne
Labels on two rows.png Labels on one row.png

Paramétrage des destinations

Depuis la version 2015 de Service Manager, vous pouvez paramétrer les questions au sein d'un questionnaire de manière à enregistrer les réponses dans des champs de la table SD_REQUEST.
L'utilisation des questions destination est particulièrement utile dans le cadre des applications portail à partir desquelles l'utilisateur peut créer un incident ou une demande de service. Cette fonctionnalité permet de renseigner le matériel, la localisation ou autres champs.

Question spécifique à Service Apps

  • Paramétrez le questionnaire de manière à afficher les questions destination uniquement lorsque l'incident/demande est créé depuis Service Apps, en cochant l'option Spécifique Apps.
  • Attention : Si vous utilisez le champ SD_CATALOG_ID (sujet du catalogue) comme champ cible, aucun recalcul n'est effectué par le système (Date de résolution max, SLA, Workflow, etc.).

Best Practice icon.png  Accordez une attention particulière aux champs obligatoires sur la Prise d'appel, comme la localisation ou l'urgence. Si vous les ajoutez au questionnaire, rendez-les obligatoires. Sinon, les valeurs par défaut sont effacées dans la base, empêchant le workflow de démarrer correctement.

Cohérence avec les autres sources de mise à jour

  • Repérez les règles métier ainsi que les étapes de mise à jour interne qui modifient un champ de destination utilisé dans un questionnaire.
  • Vérifiez ensuite la cohérence du tout.

Vérification des champs de destination

  • Vérifiez que les champs de destination ne sont pas mis à jour par un assistant du thème
  • Les champs système (comme RFC_NUMBER ou REQUEST_ID) sont protégés et ne peuvent pas être désignés comme cible.
  • Certains champs sont mis à jour dans un contexte particulier.

    exemple   Le champ REQUESTOR_PHONE est présent sur l'assistant de transfert dans le contexte d'une demande de changement, mais peut être utilisé comme cible dans un questionnaire d'un processus Incident.

Liste des champs à ne pas utiliser comme cible selon les contextes

Note : Sauf pour les questions marquées Spécifique apps

  • Incident :
    • EXPECTED_START_DATE_UT
    • EXPECTED_END_DATE_UT
    • DESCRIPTION
  • Demande de changement :
    • REQUESTOR_PHONE
  • Demande de changement multi-panier :
    • CI_ID

Formatage des questions

Questions contenant du code HTML

Depuis la version H1.2016 de Service Manager, vous pouvez ajouter une mise en forme via l'éditeur WYSIWYG disponible sur les libellés des questions.

Réservez les mises en forme complexes (utilisation de tables, ajouts d'images, etc.) aux questions de type Commentaire.

Questions de type Commentaire

Vous pouvez séparer les précisions, recommandations ou commentaires dans des questions de type Commentaire pour lesquelles aucune zone de saisie n'est ajoutée. 

Note : Ces questions s'affichent sur toute la largeur du questionnaire.

Erreurs connues

Titre Description de l'erreur Contournement
Cas où la dernière question du questionnaire est de type Liste SQL Questionnaire soumis automatiquement après saisie de la dernière question Si la dernière question de votre questionnaire est de type Liste SQL, ajoutez une ligne vide ou une ligne de séparation en dessous pour éviter le dysfonctionnement.
Valeurs dynamiques présentées à tort dans la liste des questions précédentes Dans un questionnaire multi-sections, la liste des balises des questions des sections précédentes présente à tort les valeurs dynamiques en plus. Sera corrigé dans la prochaine version.

En attendant, n'utilisez pas dans vos requêtes les balises représentant les valeurs dynamiques (#[QUESTION_CODE.@now]#, etc.)

Questions obligatoires et libellés contenant des balises <div> L'astérisque sur les questions obligatoires est affiché au-dessus du libellé si celui-ci contient du code HTML avec une balise <div> Ajoutez la surcharge suivante dans le fichier customer_optimized.css :
.question_label label {
    display: inline-flex;
}

FAQ

Depuis Service Manager H2.2016, les libellés des questions sont alignés à droite par défaut. Pour revenir à un alignement à gauche, ajoutez la surcharge suivante dans le fichier customer_optimized.css :

.question_label {    text-align: right; }

Après division du questionnaire, une condition d'affichage se basant sur une question qui a été déplacée dans une autre section doit être réécrite en condition SQL - Open url.png voir Description

Utilisez la requête ci-dessous pour lister les questions dont la condition d'affichage doit être réécrite :

SELECT q.question_id as 'Question (ID)',q.question_en 'Question',questCondition.QUESTION_LIST_ID 'Questionnaire (ID)',
qlist.QUESTION_LIST_EN 'Questionnaire',questCondition.QUESTION_ID 'Question to be reconfigured (ID)' ,
qConditionned.QUESTION_EN 'Question to be reconfigured'
FROM sd_question q
INNER JOIN ( SELECT T.C.value('.','nvarchar(max)') as guid,A.*
FROM
(
SELECT T.C.query('.') as XML,A.*
FROM (SELECT QUESTION_ID,QUESTION_LIST_ID,DISPLAY_ORDER,cast(CONDITION as xml) CONDITIONs FROM SD_QUESTION_QUESTION_LIST
) A
CROSS APPLY CONDITIONs.nodes('/conditions/condition') T(C)
) A
CROSS APPLY XML.nodes('/condition/guid') T(C) )  questCondition on questCondition.GUID=q.QUESTION_GUID
INNER JOIN SD_QUESTION_LIST qlist on qlist.QUESTION_LIST_ID=questCondition.QUESTION_LIST_ID
INNER JOIN SD_QUESTION qConditionned on qConditionned.QUESTION_ID=questCondition.QUESTION_ID
WHERE NOT EXISTS (SELECT 1 FROM SD_QUESTION_QUESTION_LIST qql where qql.QUESTION_LIST_ID=questCondition.QUESTION_LIST_ID AND qql.QUESTION_ID=q.QUESTION_ID)

Tags:
Modifié par Utilisateur inconnu le 2020/05/11 18:11
Créé par Administrator XWiki le 2015/04/15 17:13

Raccourcis

L'actualité mensuelle
•  Newsletter

Tous les changements
•  Service Manager
•  Service Apps
•  Self Help

Glossaire

Powered by XWiki ©, EasyVista 2020