.Net

Déploiement d’un plugin sur CRM Dynamics 2013

Oct 29, 2013

Nicolas Bailly

Introduction

On parle beaucoup des modifications d »interfaces utilisateur du CRM 2013. Cette article ne reviendra pas sur ces nouvelles fonctionnalités mais expliquera comment déployer simplement un plugin grâce à Visual Studio et le dernier SDK du CRM.

Installations

– Le runtime WIF : https://www.microsoft.com/en-us/download/details.aspx?id=17331. Il est nécessaire à l »exécution du SDK
– Microsoft Dynamics CRM 2013 SDK : https://www.microsoft.com/en-us/download/details.aspx?id=40321
– Le développer Toolkit pour Visual Studio 2012. Une fois le SDK installer, il se trouve dans le répertoire « SDKToolsDeveloperToolkitCrmDeveloperToolsVS12_Installer.msi »

Création d »une nouvelle solution

Ouvrez Visual Studio et créez une nouvelle solution. Dans les templates de solutions « Visual C# », vous trouverez le groupement « Dynamics CRM ».

On va s »intéresser au premier type de solution, il est plus complet.

Une fois qu »on clique sur OK, une fenêtre nous invite à renseigner les informations de notre CRM afin de s »y connecter et choisir une solution CRM dans laquelle déployer nos développements :

Pensez à bien renseigner la solution CRM que vous désirez utiliser pour les déploiements. Ça peut prendre quelques secondes avant de voir apparaître la liste des solutions. Sinon, c’2014-02-20 17:02:37’est la solution par défaut qui sera prise.

Pour connaitre les URL des différents services du CRM, tel que le discovery service à renseigner dans cette fenêtre, il existe une page qui les renseigne : dans le CRM, aller sur la page Paramètres/personalisations/ressources du développeur :  

Une fois connecté, vous pouvez voir, dans Visual Studio, la fenêtre « CRM Explorer », qui vous permet d »avoir accès aux entités, ressources Web, javascript… 

Dans la solution Visual Studio, différents projets ont été créés :
– CrmPackage : projet qui permet le déploiement dans le CRM
– Plugins : projet contenant le code des plugins à déployer
– Workflows : projet contenant le code des workflows à déployer
– SilverlightApplication : projet contenant le code Silverlight à déployer dans le CRM
– SilverlightApplication.Web : permet de tester le projet SilverlightApplication

Pour notre exemple, nous ne nous intéresserons qu »aux plugins.

Création d »un plugin

Dans le projet CrmPackage, on retire les références aux projets autres que « Plugins » pour qu »ils ne soient pas déployés.

Nous allons maintenant créer un nouveau plugin. Pour cela, aller sur la fenêtre « Crm Explorer », ouvrir la liste des entités, faire un clic-droit sur l »entité désirée et « Créer un plugin ». Nous avons alors une fenêtre dans laquelle renseigner les étapes du plugin.

Pour notre exemple, nous allons créer un plugin en pre-update sur l »entité Contact : 

 

 Nous avons désormais la classe PreUpdateContact dans le projet Plugins qui contient la méthode ExecutePreContactUpdate. C »est dans cette méthode que nous allons insérer le code de notre plugin.

Nous allons prendre comme exemple, la mise à jour du champ « Date d »anniversaire » à chaque fois que le champ « Date de naissance » sera mis à jour.

protected void ExecutePreContactUpdate(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }

            Entity entity = localContext.PluginExecutionContext.InputParameters["Target"] as Entity;
            if (entity != null && entity.Contains("birthdate"))
            {
                DateTime? birthdate = entity["birthdate"] as DateTime?;
                DateTime? anniversary = null;
                if (birthdate.HasValue)
                {
                    anniversary = birthdate.Value.AddYears(DateTime.Now.Year - birthdate.Value.Year);
                    if (anniversary < DateTime.Now)
                    {
                        anniversary = anniversary.Value.AddYears(1);
                    }
                }
                if (entity.Contains("anniversary"))
                {
                    entity.Attributes["anniversary"] = anniversary;
                }
                else
                {
                    entity.Attributes.Add("anniversary", anniversary);
                }
            }
        }

Vous remarquerez dans le constructeur la ligne suivante :

base.RegisteredEvents.Add(new Tuple<int, string, string, Action>(20, "Update", "contact", new Action(ExecutePreContactUpdate)));

C »est ainsi que l »entité « Contact » et l »étape « Pre-Update » sont vérifiés afin de s »assurer que le plugin est appelé sur l »évènement désiré.

Déploiement

Nous avons désormais un plugin prêt à être déployer.

Il existe plusieurs moyens de déployer un plugin. Vous connaissez probablement l »outil Plugin Registration Tool, que l »on trouve dans les outils du SDK que l »on a installé. 

Avec le projet CrmPackage, il suffit de faire un clic-droit puis « deploy ».

En analysant le fichier RegfisterFile.crmregister de ce projet, vous pouvez voir les projets et les étapes à déployer.
Si vous supprimez une classe des plugins, il faut penser à modifier ce fichier manuellement.

Voici à quoi ressemble notre fichier RegisterFile.crmregister :


  
    
      
        
          
            
            
              
            
          
        
      
    
  
  


 On peut désormais déployer le plugin :

Une fois que le déploiement s »est terminé, on voit alors dans la fenêtre « Crm Explorer » que le plugin est bien dans le CRM :

Mais aussi dans notre solution CRM :

En faisant un test, on s »aperçoit que la date change bien sur l »entité Contact :

Attention, sur CRM 2013, il y a une sauvegarde automatique qui se fait régulièrement. Le plugin est appelé à chaque fois et il n’y a pas de moyen de savoir si le plugin a été déclenché par la sauvegarde automatique ou par une action utilisateur. Il n’y a qu’en javascript qu’on peut avoir cette information.

Conclusion

La dernière version du CRM apporte beaucoup de changement en terme d »expérience utilisateur mais côté développement, on s »aperçoit qu »on s »y retrouve assez facilement. Les derniers SDK se sont améliorés et facilitent la tâche des développeurs. Plus besoin de jongler entre le plugin registration tool et Visual Studio.

Problèmes rencontrés :

– Déploiement impossible : essayer de se reconnecter à la solution Tools/Connect to Dynamics CRM Server. La connexion semble être perdue au bout d’un moment.
– Déploiement impossible : IsolationMode = Sandbox au lieu de SandBox
– Mettre une clé signée sur le plugin
– Assembly must be registered in isolation : l’utilisateur doit être administrateur de déploiement

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Découvrez nos autres articles

Aller au contenu principal