Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

Introduction au Plugin Microsoft Dynamics CRM

Par Aravindan RENGARAMANUJAM Publié le 06/08/2016 à 15:22:09 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Microsoft Dynamics CRM

Microsoft Dynamics CRM est un progiciel développé par Microsoft.

Cet outil couvre l’essentiel des besoins standards en matière de Gestion de la Relation Client, quelle que soit la typologie du client (Individu ou Entreprise). Dynamics peut cibler et gérer les prospects, les partenaires, les clients B2B (Business to Business) / B2C (Business to Customer) ou dans un contexte plus général encore, les fournisseurs, les employés en interne…

Dynamics CRM est d’abord un référentiel clients. Les données sont donc stockées dans un schéma relationnel qui lui est propre.

Chacun de ses objets métier est appelé une « Entité » : ex : Un client, une demande… Il s’agit d’un outil couvrant plusieurs domaines de la relation clientèle(Ventes, Service, Marketing et Social). Il fait partie de l’un des CRM les plus connus dans le monde aux côtés de Sales Force, SAP et Oracle.

Dynamics CRM a plusieurs utilités majeures au sein d'une entreprise.

  • meilleure visibilité : sur les actions menées par les différents services. (ventes, marketing, administration des ventes). Ces informations sont cruciales dans la relation client d'une entreprise. "Quels prospects ont été contactés?" "Quelles sont les campagnes marketing lancées ? "

  • historisation des interactions : Il permet d'avoir un historique de tous les contacts clients. Ainsi il est possible d'avoir une connaissance très approfondie du client au cours des années. En plus de fournir un service client adapté, il est possible de faire du marketing ciblé.

  • vue d'ensemble : Dynamics permet de centraliser les informations de tous les services métiers, Il permet ainsi d'avoir une vue globale de la relation client. Et grâce au modèle de données proposé, les actions des différents services deviendront naturellement cohérentes et assemblées.

Et enfin, Dynamics vient évidemment répondre à la problématique majeure qui est la satisfaction client. En adoptant le CRM, les entreprises peuvent optimiser leur relation client et leur productivité de manière centralisée.

Définition d'un Plugin

Un plugin est une extension au CRM et représente un code custom écrit en .NET. Ce code est déclenché par le CRM lors d’un événement spécifique. Généralement, les interactions sur les pages de Dynamics CRM sont gérées avec du Javascript. Cependant le code Js ne permet seulement d’interagir avec les données présentes sur le formulaire de la page. Alors que le plugin permet de gérer les interactions avec tous les objets de la base de données avec une facilité accrue.

Création d'un Plugin

Prérequis

Voici les outils nécessaires à la conception d'un plug-in et de son déploiement sur Dynamics CRM :

  • Microsoft Visual Studio

  • Le SDK de Microsoft Dynamics CRM

  • Plugin Registration Tool

  • Fichier Entities.cs

Le SDK de Dynamics est disponible sur le site de Microsoft : https://www.microsoft.com/fr-fr/download/details.aspx?id=50032

Microsoft Visual studio nous permet de créer notre plugin en utilisant le framework .NET et le langage C#.

Pour cela il faut ajouter les références présentes dans le SDK. Le SDK contient des nombreux outils nécessaires à l'installation du plugin dans la solution CRM. Le Plugin Registration Tool est quant à lui indispensable pour déployer les plugins au sein de la solution Dynamics CRM.

Création du fichier Entities.cs

CrmSvcUtil.exe est un outil qui génère un fichier de classes à partir de la ligne de commande. Il est destiné à être utilisé avec Microsoft Dynamics CRM. Cet outil génère des classes .NET Framework qui se trouvent dans l'organisation CRM. Ils représentent le modèle de données d’entité utilisé par Microsoft Dynamics CRM. Cet outil se trouve dans le dossier SDK\Bin du SDK. C’est à l'aide de cet exécutable que l’on va créer notre fichier de sortie contenant les différentes classes correspondant aux différentes entités de la solution CRM. La ligne de commande à exécuter pour pouvoir obtenir ce fichier est la suivante :

CrmSvcUtil.exe url:http://<serverName>/<organizationName>/XRMServices/2011/Organization.svc
/out:<outputFilename>.cs /username:<username> /password:<password> /domain:<domainName> 
/namespace:<outputNamespace> 

L’URL demandée dans cette ligne de commande est l’URL du service d’organisation du CRM que l’on peut trouver dans Dynamics CRM. Elle se trouve dans la partie Paramètres > customisation > Ressources du développeur > Service Endpoints contient l’URL de trois services dont celui du service d’organisation.

Création du Plugin sous Visual Studio

Pour créer un plugin il suffit de créer un nouveau projet sur Microsoft Visual studio de type librairie de classe (Class Library).

Une fois le projet créé, il faut ajouter la référence fournie par le SDK : Microsoft.Xrm.Sdk.dll présent dans le dossier SDK\Bin.

Il faut également ajouter la classe Entities.cs que nous avons généré auparavant à l'aide de l'outil CrmSvcUtil.exe.

Ce fichier a besoin de deux références : la première se trouve dans le dossier SDK\Bin, il s’agit de Microsoft.Xrm.Client.dll et la seconde est fournie avec Microsoft Visual studio : il s’agit de System.Runtime.Serialization.

Une fois les références nécessaires ajoutées, nous devons ajouter une signature au projet. Visual Studio nous offre cette option dans les propriétés du projet dans la partie signature.

Une signature permet à l'outil d'enregistrement du plugin de s'assurer de l'unicité du plugin.

A cette étape, l'arborescence du projet est la suivante :

Le plugin, que l’on peut voir dans l’explorateur de solution ci-dessus, a été créé pour présenter la trame principale d'un plugin.

Cet exemple représentera un plugin dans lequel, nous chercherons à initialiser le champ Name que l’on créera préalablement dans l’entité Account du CRM.

Pour ce faire on créé une classe TraitementPlugin qui implémente l’interface IPlugin. Cette interface possède une unique méthode qui est la méthode public void Execute(IServiceProvider serviceProvider), c’est cette méthode qui s’exécute lorsque le plugin est appelé.

Cette méthode reçoit en paramètre un IServiceProvider, ce paramètre nous permet de définir trois nouvelles variables qui sont essentielles pour un plugin : un IPluginExecutionContext, un ITracingService et un IOrganizationServiceFactory.

IPluginExecutionContext pluginContext = 
(IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

L’IPluginExecutionContext permet de savoir qui fait appel à ce service. Le pluginContext contient des informations sur l'organisation, mais également des informantions telles que le message qui a déclenché l'appel de ce plugin, l'entité primaire et secondaire liée à ce message.

ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

L’ITracingService permet d'accéder au service de trace. Ce service permet à tout instant de laisser des traces sur l'évolution du plugin afin de faciliter le débogage.

IOrganizationServiceFactory serviceFactory = 
(IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

IOrganizationService service = serviceFactory.CreateOrganizationService(pluginContext.UserId);

L’IOrganizationServiceFactory permet de créer une nouvelle instance d’IOrganizationService. Cet objet service va permettre de faire les opérations de CRUD (Create, Update, Delete) sur les entités contenues dans l'organisation. Dans notre exemple, nous verrons les opérations de création et de Update.

Dans l’objet IPluginExecutionContext récupéré on trouve deux dictionnaires: InputParameters et OutputParameters. L'InputParameters contient les paramètres envoyés par l'action déclenchée. L'OutputParameters va contenir les résultats de la requête liée au message, après que la requête ait été effectuée.

Ici on enregistrera le plugin en pré-opération, cela signifie que le plugin sera appelé avant que le message ne soit traité. On vérifie donc que InputParameters contient bien la clé Target, c’est dans cette clé que se trouvent les informations modifiées sur le formulaire : s'il s’agit d’un événement Create ou Update, l’objet contenu dans cette clé doit être une Entity. Le code ci-dessous montre une bonne pratique d’effectuer les vérifications avant le traitement correspondant.

if(pluginContext.InputParameters.Contains("Target") && pluginContext.InputParameters["Target"] is Entity)
{
    #region Opération lors d'une création
    if(pluginContext.MessageName == "Create")
    {
      tracingService.Trace("Evénement {0}", pluginContext.MessageName);
      Create(pluginContext, tracingService, service);
      tracingService.Trace("Exécution terminée");
    }
    #endregion
    #region Opération lors d'un update
    else if (pluginContext.MessageName == "Update")
    {
      tracingService.Trace("Evénement {0}", pluginContext.MessageName);
      Update(pluginContext, tracingService, service);
      tracingService.Trace("Exécution terminée");
    }
    #endregion
}

Une fois les vérifications effectuées, nous pouvons créer les méthodes qui feront le traitement des données.

Dans cet exemple, le plugin effectuera seulement une action de création ou de mise à jour.

Nous devons donc créer 2 méthodes : Create et Update.

Méthode Create

Cette méthode s’exécute lors d’un événement Create, elle dispose des trois variables décrites précédemment fournies en paramètre. Voici son code :

private void Create(IPluginExecutionContext pluginContext,ITracingService tracingService,
 IOrganizationService service)
{
  //Ceci permet de récupérer le compte crée
  Account account = ((Entity)pluginContext.InputParameters["Target"])();
  tracingService.Trace("le Nom du compte est {0}", account.Name);
  account.Name = “John”;
  service.Create(account);
  tracingService.Trace("Compte crée");
}

On récupère l'entité envoyée puis on initialise l'attribut Name avant de le créer.

Méthode Update

Cette méthode s’exécute lors d’un événement Update, elle dispose des trois variables décrites précédemment fournies en paramètre. Elle agit suite à n’importe quelle modification dans le formulaire de l'entité sur Dynamics CRM. Voici son code :

private void Update(IPluginExecutionContext pluginContext, ITracingService tracingService, 
IOrganizationService service)
{
    //Ceci permet de récupérer le Account avant les modifications
    Account accountImage = ((Entity)pluginContext.PreEntityImages["PreAccount"]);
    //On récupère les modifications du Account.
    Account accountPreModif = ((Entity)pluginContext.InputParameters["Target"]);

    tracingService.Trace("le compte récupéré est {0}", accountImage.Name);

    if (accountImage.Name == null)
    {
      accountPreModif.Name = “Doe”;
    }
    service.update(accountPreModif);
    tracingService.Trace("Nom initialisé à {0}", modifAccount.Name);
}

Cette méthode vérifie si l'attribut Name est différent de null, pour ce faire il faut disposer d’une pré-image du compte. Si la valeur est bien à null alors on l’initialise à "Doe".

Notre exemple contient maintenant la trame de création nécessaire au fonctionnement du plugin. Nous devons par la suite générer le DLL sur Visual Studio et à procéder à son enregistrement dans le CRM.

Enregistrement du Plugin dans Dynamics CRM

L'enregistrement du plugin dans le CRM se distingue en deux étapes:

  • Enregistrer la DLL contenant le plugin

  • Créer un / des step(s) sur le plugin enregistré.

Pour cela, nous devons utiliser l'exécutable Plugin Registration.exe mis à disposition dans le SDK, présent dans le dossier SDK\Bin.

Ajout d'un nouvel Assembly

Premièrement il faut se connecter dans l'organisation dans lequel on veut déployer le plugin.

Pour ajouter le dll généré par Visual Studio, il faut cliquer sur Register, puis New Assembly.

Etape 1: La fenêtre suivante s'affiche pour renseigner le chemin d'accès du Dll sur la machine.

Nous pouvons voir dans l'étape 2 la présence de multiples plugin. Une DLL peut contenir de multiples plugin.

Nous pouvons ainsi choisir le plugin à déployer.

L'étape 3 consiste à choisir le mode d'isolation. Nous avons le choix entre Sandbox et None.

  • Le mode Sandbox : permet l'exécution du plugin dans un environnement plus sécurisé. Ce mode permet de minimiser les communications externes qui peuvent porter atteinte à la sécurité. Les plugins Online CRM doivent obligatoirement utiliser ce mode pour s'exécuter.Naturellement, certaines actions sont restreintes. Ces actions peuvent être des accès vers le système de fichiers, les processus réseaux, les Web services etc.

  • Le mode None : n'impose aucune restriction d'accès.

L'étape 4 concerne le lieu de stockage de l'assemebly :

  • Database : l'assembly est stocké et exécuté depuis la base de données CRM.

  • Disk : le stockage se fait sur le répertoire d'installation du serveur CRM.

  • GAC : le Global Assembly cache

Le stockage s'effectue généralement dans la base de données pour une facilité de gestion dans les environnements de livraison (Développement / Intégration / Production).

Ajout d'un step

Une fois ces étapes effectuées, si la DLL est conforme, le plugin s'affiche sur l'outil dans la section Registered plugins & Custom Workflow Activites.

Il nous faut maintenant faire clic droit sur le plugin affiché et cliquer sur Register New Step.

Cette action nous permettra de définir à quelle entité s'applique le plugin ainsi que le moment de son exécution. Il existe deux types de lancement :

En pré-opération : Le plugin est exécuté avant la modification demandée.

En post-opération : Le plugin est exécuté une fois la modification terminée.

Dans cet exemple, le plugin est configuré pour s'exécuter après la création de l'entité Account.

Une fois l'entité créée, toutes ses entités seront récupérées par le Plugin pour effectuer un traitement.

Ajout d'une image liée au step

Notre plugin contenait également une méthode Update. On effectue les mêmes étapes pour créer un step en configurant le message à Update.

Mais dans ce cas, on cherche à lancer le plugin avant la modification générée par le CRM. Donc l'exécution choisie est le pre-opération.

Le but étant de voir les informations avant la modification, il nous faut récupérer les attributs de l'entité avant sa sauvegarde, on crée donc une image en effectuant un clic droit sur le step crée.

Nous pouvons dans cette fenêtre choisir les différents attributs que l'on souhaite reçevoir dans le plugin. Dans notre exemple, l'attribut qui nous intéresse est le Name.

Conclusion

Le scénario de fonctionnement de notre plugin est le suivant :

  • Nous avons configuré le plugin de manière à ce qu'il s'exécute lorsqu'un enregistrement de l'entité Account est crée sur Dynamics CRM.

  • Cette action permettra de lancer le plugin avec le message Create à ce moment et exécutera la méthode que nous avons créée.

  • De la même manière, lorsqu'une opération de mise à jour est déclenchée sur Dynamics CRM, l'action Update est appelée avec l'image contenant les attributs de l'entité avant sa mise à jour.

Ainsi la méthode est appelée. Celle-ci vérifiera alors les attributs reçus afin d'effectuer un traitement spécifique.

Définition

  1. DLL : Dynamic Link Library, Librairie C# contenant un ensemble de fonctionnalités pouvant être utilisées par les applications externes.

  2. CRM : Customer Relationship Management : Ensemble des méthodes, techniques, outils mis en place pour la gestion de la relation client.

  3. SDK : Software Development Kit, ensemble d'outils offerts par une entreprise pour le développement des fonctionnalités de sa solution.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels