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