Mise en place d’un questionnaire satisfaction avec SCSM 2012

Dans une démarche qualité et d’amélioration continu, l’enquête de satisfaction est un élément important. Lors de la mise en place de Service Manager vous serez surement amené à implémenter ce type de fonctionnalités.

Vu que Service Manager repose sur SharePoint (notamment le portail / catalogue de services), la mise en place d’un questionnaire devient trivial et l’intégration avec SCSM simple.

L’exemple ci-dessous permet d’envoyer une notification à la suite d’une fermeture d’un incident à l’utilisateur affecté.

1. Dans un premier temps il faut créer un questionnaire afin de mesurer le niveau de satisfaction des utilisateurs ayant ouvert un incident dans SharePoint 2010 (cela fonctionne aussi avec SharePoint 2007 ou WSS)

  • Se loguer sur le site SharePoint avec les droits administrateurs et diriger vers Site Actions | Créer

image

  • Se diriger dans Liste puis cliquer sur Enquête en français ou Survey en anglais et créer votre formulaire. Dans l’exemple les questions suivantes sont posées (l’exemple est simple mais vous pouvez créer facilement des questionnaires évolués) :
    • IncidentID –> champ texte
    • AffectedUsed –> champ texte
    • Etes vous satisfait ? –> Choix multiples (Très satisfait, Satisfait, Moyennement satisfait, Pas satisfait)
    • Commentaires –> champ texte riche (multi lignes)
  • Une fois toutes les questions créées, votre questionnaire de satisfaction est en place. Dans l’exemple nous avons créé, deux champs “IncidentID” et “AffectedUser”. Le but est que ces champs ne soient pas visibles de l’utilisateur et pré-rempli afin d’éviter à l’utilisateur de remplir des informations connues par le système. Pour ce faire, il faut modifier le questionnaire créé. Le plus simple reste d’ouvrir SharePoint designer en se dirigeant vers Site Actions | Edit in SharePoint Designer

image

  • Dans SharePoint Designer, ouvrir la page NewForm.aspx, créer une webpart de type « Editor content » et ajouter le code suivant dans la webpart préalablement créée:

<script type="text/javascript">

    _spBodyOnLoadFunctionNames.push("fillDefaultValues");

// Retourne la valeur du parametre URL

function gup(name) {

                               name = name.replace(/[\[]/,"\\\[").replace(/[]]/,"\\\]"); var regexS = "[\\?&]"+name+"=([^&#]*)";

                               var regex = new RegExp( regexS );

                               var results = regex.exec( window.location.href );

                               if( results == null )

                                               return "";

                               else                      

                                               return (trim (results[1]) );

}

    function fillDefaultValues() {

        var _IncidentID=gup("IncidentID");

        var _AffectedUser=gup("AffectedUser");

        setInputValueFromFieldName("IncidentID", _IncidentID, true);

        setInputValueFromFieldName("AffectedUser", _AffectedUser, true);

}

    function setInputValueFromFieldName(strFieldName, strValue, boolHide) {

        //this gets the input textbox so you can set the value

        var tag = getTagFromTagNameAndTitle("input", strFieldName);

        tag.value = strValue;

        //if you want to hide the input textbox pass boolHide = true

        if (boolHide) {

            tag.parentNode.parentNode.parentNode.style.visibility = "hidden";

var TDs = document.getElementsByTagName("TD");

for (var i = 0; i < TDs.length; i++) {

                var tempString = TDs[i].id;

                if (trim(TDs[i].innerHTML) == strFieldName) {

                    TDs[i].parentNode.style.visibility = "hidden";

                }

            }

        }

    }

    function getTagFromTagNameAndTitle(tagName, title) {

        var tags = document.getElementsByTagName(tagName);

        for (var i = 0; i < tags.length; i++) {

            var tempString = tags[i].id;

            if (tags[i].title == title) {

                return tags[i];

            }

        }

        return null;

    }

    function trim(str, chars) {

        return ltrim(rtrim(str, chars), chars);

    }

    function ltrim(str, chars) {

        chars = chars || "\\s";

        return str.replace(new RegExp("^[" + chars + "]+", "g"), "");

    }

    function rtrim(str, chars) {

        chars = chars || "\\s";

        return str.replace(new RegExp("[" + chars + "]+$", "g"), "");

}

</script>

2. Dans SCSM il suffit ensuite de créer une notification qui envoie un mail à l’utilisateur affecté. Ce mail comprend le lien vers le questionnaire avec en paramètre les informations sur l’ID de l’incident et le nom de l’utilisateur affecté. Pour ce faire:

  • Cette étape consiste à la création d’un modèle de notification d’un incident quand l’incident est fermé. Dans la console, se diriger vers Administration puis Notifications puis template. Dans l’objet du mail => Nom de l’incident + Compléter le questionnaire satisfaction pour cloturer définitivement l’incident ! Dans le corp du mail => Texte à définir + Lien vers le questionnaire.

    image

  • Dans le screenshot ci-dessus on peut voir que le texte suivant

Bonjour,

Pouvez vous nus faire vos retours sur la gestion de votre incident en cliquant ici:

https://Srv/SMPortal/Survey/Lists/Satisfaction/NewForm.aspx?IncidentID=$Context/Property[Type='CustomSystem_WorkItem_Library!System.WorkItem']/Id$&AffectedUser=$Context/Path[Relationship='CustomSystem_WorkItem_Library!System.WorkItemAffectedUser' TypeConstraint='CustomMicrosoft_Windows_Library!Microsoft.AD.UserBase']/Property[Type='CustomMicrosoft_Windows_Library!Microsoft.AD.UserBase']/DistinguishedName$

ID de l'incident : [$Context/Property[Type='CustomSystem_WorkItem_Library!System.WorkItem']/Id$]
Sujet de l'incident : $Context/Property[Type='CustomSystem_Library!System.Entity']/DisplayName$

Il est important de répondre à cette enquête satisfaction afin dans un souci d'amélioration continu.

Votre Helpdesk

  • Les informations du type “$Context/Property[Type='CustomSystem_WorkItem_Library!System.WorkItem']/Id$” sont ajoutés en utilisant le bouton Insert et permettent d’afficher du texte dynamique.
  • Dans la console, se diriger vers Administration puis Workflows et Configuration view puis sélectionner Incident Event Workflow Configuration.

image

  • Cliquer sur Add puis il suffit ensuite de suivre le Wizard afin de déclencher une notification une fois que les incidents sont mis à jour avec comme critère “Status” égal à “Close” et terminer le wizard en associant la notification au modèle préalablement créé.

image