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 : http://www.microsoft.com/en-us/download/details.aspx?id=17331. Il est nécessaire à l''exécution du SDK
- Microsoft Dynamics CRM 2013 SDK : http://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

Catégories : .NetDynamics

Laisser un commentaire

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