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