Meilleures pratiques de développement avec Microsoft Dynamics 365

 

Date de publication : janvier 2017

S’applique à : Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Cette rubrique décrit les meilleures pratiques pour personnaliser Microsoft Dynamics 365 (Online et local).

Important

Lisez Extensions prises en charge pour Microsoft Dynamics 365 pour découvrir les techniques de personnalisation prises en charge ou non.

Contenu de la rubrique

Meilleures pratiques pour les performances

Meilleures pratiques de personnalisation

Meilleures pratiques de sécurité

Meilleures pratiques d'extensibilité des ISV

Meilleures pratiques pour les performances

Les recommandations suivantes peuvent vous aider à écrire un code plus performant.

Utiliser plusieurs threads

Ajoutez la prise en charge des threads à votre application pour répartir le travail entre plusieurs processeurs. Cette suggestion suppose que vous exécutiez votre code sur un système multiprocesseur.Pour plus d'informations :Article du Guide de développement avancé du .NET Framework sur les threads gérés.

Autoriser le système à créer des GUID

Autorisez le système à attribuer automatiquement le GUID (ID) au lieu de le créer manuellement vous-même. Cette suggestion permet à Microsoft Dynamics 365 de tirer parti des GUID séquentiels, qui fournissent de meilleures performances SQL. L'exemple de code suivant montre comment appeler la méthode Create pour obtenir un GUID attribué par le système.

// Instantiate an account object.Account account = new Account { Name = "Fourth Coffee" };
// Create an account record named Fourth Coffee and retrieve the GUID.accountId = serviceProxy.Create(account);

Utilisation des types à liaison anticipée

Utilisez la classe Entity lorsque votre code doit utiliser des entités et des attributs qui ne sont pas connus au moment de l'écriture du code. En outre, si votre code personnalisé fonctionne avec des milliers d'enregistrements d'entités, l'utilisation de la classe Entity entraîne des performances légèrement meilleures que les types à liaison anticipée. Toutefois, cette souplesse a un inconvénient, car vous ne pouvez pas vérifier les noms d'entité et d'attribut à la compilation. Si les entités sont déjà définies lors du code et que la légère dégradation des performances est acceptable, vous devez utiliser les types à liaison anticipée que vous pouvez générer à l'aide de l'outil CrmSvcUtil.Pour plus d'informations :Utiliser les classes d’entité à liaison anticipée dans le code

Désactiver les plug-ins

Si possible, désactivez les plug-ins enregistrés avant d'exécuter l'application.

Écrire des plug-ins qui s'exécutent plus rapidement

Écrivez toujours un plug-in qui prend le moins le temps possible pour effectuer la tâche planifiée. Par exemple, la méthode Execute est souvent traitée dans Microsoft Dynamics 365. Si vous enregistrez un plug-in sur ce message, votre plug-in peut avoir un impact important sur les performances du système, car il s'exécute chaque fois que la méthode Execute est traitée, ce qui se passe souvent.

Si vous envisagez d'enregistrer vos plug-ins pour l'exécution synchrone, il est recommandé de les concevoir pour que leur opération s'exécute en moins de 10 secondes. Il est préférable de réduire le temps de traitement des plug-ins afin de maintenir l'interactivité des applications clientes qui sont connectées au même service d'organisation que celui qui exécute le plug-in.

Limiter les données que vous récupérez

Lorsque vous utilisez les méthodes qui récupèrent les données du serveur, extrayez le volume minimal de données dont votre application a besoin. Pour ce faire, spécifiez l'ensemble de colonnes, qui est l'ensemble des attributs d'entité à récupérer.

Par exemple, il est rarement conseillé de récupérer toutes les métadonnées avec le message RetrieveAllEntitiesRequest, spécifiant le filtre d'entité EntityFiltersAll pour la propriété EntityFilters. Par contre, vous pouvez obtenir des performances optimisées si vous limitez le filtre d'entité ou utilisez l'un des messages suivants : RetrieveEntityRequest, RetrieveOptionSetRequest, RetrieveAttributeRequest, RetrieveRelationshipRequest ou RetrieveMetadataChangesRequest. Le message RetrieveMetadataChanges permet de créer une requête pour renvoyer uniquement les données nécessaires ou les métadonnées modifiées.Pour plus d'informations :Récupérer et détecter les modifications apportées aux métadonnées.

Limitez le nombre d'entités activées pour le mode hors connexion

Réfléchissez si une entité doit être disponible pour les utilisateurs en mode hors connexion. Chaque entité activée pour le mode hors connexion affecte directement le temps nécessaire à l'utilisateur pour synchroniser les données lorsqu'il revient en ligne. Cela est particulièrement utile pour les utilisateurs avec des ordinateurs moins puissants.

Limiter les opérations qui s'affichent en cascade jusqu'aux entités associées

Lorsque vous utilisez la méthode Update ou le message UpdateRequest, ne définissez pas l'attribut OwnerId sur un enregistrement, à moins que le propriétaire n'ait réellement changé. Lorsque vous définissez cet attribut, les modifications s'affichent souvent en cascade jusqu'aux entités associées, ce qui augmente la durée nécessaire pour l'opération de mise à jour.Pour plus d'informations :Comportement en cascade

Ajuster les paramètres du proxy sur le client (local uniquement)

Un serveur proxy réside entre une application cliente, telle qu'un navigateur Web, et le serveur cible réel. Lorsqu'un ordinateur est dans un réseau local, il peut utiliser un serveur proxy pour se connecter à Internet. Dans ce cas, le serveur proxy est associé au serveur de passerelle serveur et au serveur de pare-feu (ou en fait partie). Le proxy peut mettre en cache les demandes Web et traiter plusieurs demandes de clients en utilisant les données mises en cache. Si les données demandées ne sont pas présentes dans le cache du serveur proxy, ce dernier fait suivre la demande vers le serveur actif à l'aide de sa propre adresse IP. Ici, le serveur proxy agit au nom de l'ordinateur client.

Bien qu'un serveur proxy puisse agir en tant que serveur de cache et aider à télécharger une page web plus rapidement, il peut parfois diminuer les performances s'il n'est pas utilisé correctement. Souvent, les utilisateurs évitent la configuration manuelle du proxy et utilisent à la place la configuration automatique. Ce raccourci aide à équilibrer la charge des serveurs proxys, mais en fonction de la complexité du script de configuration, un délai important peut être rencontré lors de la configuration du proxy automatique.

Lorsque le serveur Microsoft Dynamics 365 est installé, vous pouvez ignorer le serveur proxy pour obtenir un meilleur débit. Le serveur offre une adresse Web locale qui ne requiert aucun proxy cible. Vous pouvez sélectionner Ignorer le serveur proxy pour les adresses locales et fournir le nom complet du serveur Microsoft Dynamics 365 dans la liste des exceptions. De cette façon, vous obtenez un meilleur débit lorsque les enregistrements sont créés à l'aide de SDK de Microsoft Dynamics 365.

Améliorer les performances d'allocation des canaux de service

Vous pouvez créer une connexion aux services web Microsoft Dynamics 365 et authentifier les utilisateurs à l'aide des classes de proxy de service OrganizationServiceProxy et DiscoveryServiceProxy. Toutefois, l'utilisation incorrecte de ces classes de proxy de service peut parfois réduire les performances des applications. Par conséquent, si vous savez quand et comment utiliser les différents classes clientes disponibles dans le SDK, vous pouvez souvent obtenir de meilleures performances de l'application.

Lorsque vous créez un canal de service Windows Communication Foundation (WCF) à l'aide d'un point de terminaison de service, par exemple, en utilisant le service Web d'organisation, votre application doit effectuer deux opérations longues : le téléchargement des métadonnées depuis le point de terminaison et l'authentification de l'utilisateur. Vous pouvez améliorer les performances si votre application exécute ces opérations un nombre minimal de fois pour chaque session d'application. Le constructeur OrganizationServiceProxy illustré ici effectue ces deux opérations chaque fois qu'un objet proxy de service est créé.

OrganizationServiceProxy (Uri uri, Uri homeRealmUri, ClientCredentials clientCredentials, ClientCredentials deviceCredentials)

Vous obtenez généralement de meilleures performances si votre application utilise ce constructeur une fois pour créer une instance du proxy de service pendant la session d'application et pour mettre en cache la référence retournée en vue de l'utiliser dans différents chemins d'accès au code au sein de votre application. Notez que comme la référence de service retournée n'est pas thread-safe, les applications multithread devront allouer une instance par thread. Les applications doivent également appeler Dispose sur l'objet proxy de service avant qu'ils ne se terminent afin de libérer les ressources allouées par canal de service.

La classe de proxy de service effectue le téléchargement des métadonnées et l'authentification utilisateur à l'aide des méthodes de classe suivantes.

IServiceManagement<IOrganizationService> orgServiceManagement = ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(organizationUrl))AuthenticationCredentials authCredentials = orgServiceManagement.Authenticate(credentials)

La méthode CreateManagement<TService> effectue le téléchargement des métadonnées, tandis que la méthode Authenticate authentifie l'utilisateur. Les objets retournés depuis ces méthodes sont thread-safe et peuvent être statiquement mises en cache par votre application. Vous pouvez alors utiliser ces objets pour construire un objet proxy de service qui utilise l'un des autres constructeurs disponibles.

OrganizationServiceProxy (orgServiceManagement, authCredentials.ClientCredentials)OrganizationServiceProxy (orgServiceManagement, authCredentials.SecurityTokenResponse)

En mettant en cache la gestion des services et les objets des informations d'identification authentifiées, votre application peut créer plus efficacement les objets proxy de service plusieurs fois par session d'application. Si vous activez les types à liaison anticipée sur OrganizationServiceProxy via l'une des méthodes EnableProxyTypes, vous devez procéder de même sur tous les proxys de service créés à partir de l'objet IServiceManagement<TService> mis en cache. Si votre application utilise les métadonnées, il est recommandé qu'elle mette en cache les métadonnées qu'elle extrait et appelle régulièrement le message RetrieveTimestampRequest pour déterminer si elle doit actualiser le cache.

En outre, surveillez votre jeton de sécurité WCF (Token) et actualisez-le avant qu'il n'expire pour éviter de perdre le jeton et de devoir recommencer l'authentification. Pour activer le jeton, créez une classe personnalisée qui hérite de la classe OrganizationServiceProxy ou de la classe DiscoveryServiceProxy et qui implémente la logique métier pour contrôler le jeton. Ou enveloppez les classes proxy dans une nouvelle classe. Une autre technique consiste à contrôler explicitement le jeton avant chaque appel au service Web. Un exemple de code illustrant ces techniques se trouve dans les classes ManagedTokenDiscoveryServiceProxy, ManagedTokenOrganizationServiceProxy et d'AutoRefreshSecurityToken de la rubrique Code d’assistance : classe ServerConnection.

Meilleures pratiques de personnalisation

Les meilleures pratiques suivantes peuvent vous aider à personnaliser et à étendre Microsoft Dynamics 365.

Meilleures pratiques pour Microsoft Dynamics 365 (en ligne)

Le livre blanc Modèles et principesMicrosoft Dynamics CRM Online pour les concepteurs de solutions fournit des instructions spécifiques sur l'élaboration de solutions à l'aide de Microsoft Dynamics 365 (Online).

Utilisation des entités et des attributs personnalisés

Utilisez toujours le nom de schéma d'entité pour faire référence à une entité personnalisée dans le code et les requêtes. N'utilisez pas le code de type objet (également désigné comme le type d'entité) car sa valeur entière varie entre entités personnalisées de différentes organisations.

Gagnez de l'espace sur votre serveur au moyen de ces techniques :

  • Créez des attributs personnalisés pour les entités existantes au lieu de créer une nouvelle entité.

  • Renommez les entités existantes pour les rendre plus significatives.

Quand doit-on personnaliser une entité ?

Personnalisez une entité système, telle que l'entité opportunité, au lieu de la remplacer par une nouvelle entité personnalisée afin que vous puissiez utiliser les nombreuses fonctions intégrées d'une entité existante. Par exemple, les entité opportunité et incident ont des champs de recherche pour associer des clients. Les clients peuvent être des comptes ou des contacts. Vous ne pouvez pas créer une entité personnalisée ayant le même type de recherche. Vous pouvez modifier le nom complet d'une entité système pour le rendre plus significatif auprès de votre entreprise.

Contextes d'utilisation des plug-ins et du workflow

En tant que développeur intéressé par l'extension ou la personnalisation de Microsoft Dynamics 365, vous pouvez choisir entre plusieurs méthodes pour effectuer vos tâches. En plus de l'ajout de code JavaScript côté client à un formulaire ou de l'ajout de pages personnalisées ASP.NET, vous pouvez créer un plug-in ou un workflow personnalisé via l'interface Web qui appelle une activité de workflow personnalisée. Comment choisir entre l'utilisation d'un plug-in et celle d'un workflow ? La technologie que vous utilisez dépend de la tâche à effectuer et de l'auteur de la personnalisation.

Par exemple, vous devez utiliser un workflow en temps réel de plug-in synchrone si vous souhaitez exécuter un code personnalisé immédiatement avant ou après que l'opération de plateforme principale ne s'exécute et avant que le résultat de l'opération ne soit renvoyé de la plateforme. Vous ne pouvez pas utiliser un workflow asynchrone ou un plug-in asynchrone dans cette situation, car ils sont mis en file d'attente pour s'exécuter une fois que l'opération principale a fini de s'exécuter. Par conséquent, vous ne pouvez pas prévoir quand ils s'exécuteront. Pour ajouter la fonctionnalité personnalisée à Microsoft Dynamics 365 (Online), les workflows et les plug-ins sont pris en charge, mais pas les activités de workflow personnalisées.

Évaluez ces technologies et sélectionnez celle qui répond le mieux à vos objectifs métier après avoir pris en compte les questions de déploiement, de performance et de maintenance de votre solution de plug-in ou de workflow.

Le tableau suivant récapitule les caractéristiques des plug-ins et des workflows.

Critères

Plug-in

Workflow

Exécution avant son après l'opération principale de la plateforme (Créer, Supprimer, Mettre à jour, etc.)

S'exécute juste avant ou après l'opération principale (synchrone).

Peut également être mis en file d'attente pour s'exécuter après l'opération principale (asynchrone).

Les workflows asynchrones sont mis en file d'attente pour s'exécuter après l'opération principale.

Les workflows en temps réel possèdent des caractéristiques similaires aux plug-ins.

Impact des performances sur le serveur

Les plug-ins synchrones peuvent augmenter le temps de réponse de la plateforme, car ils font partie du traitement principal de la plateforme.

Les connexions asynchrones ont moins d'impact sur le temps de réponse du serveur, car le code s'exécute dans un autre processus.

Les workflows asynchrones ont moins d'impact sur le temps de réponse du serveur, car le code s'exécute dans un autre processus.

Les workflows en temps réel possèdent des performances similaires aux plug-ins en mode bac à sable.

Restrictions de sécurité

Inscrire un plug-in auprès de la plateforme nécessite un rôle de sécurité Administrateur système ou Personnalisateur de système, ainsi que l'appartenance au groupe Administrateur de déploiement.

Les utilisateurs peuvent interactivement créer des workflows dans l'application Web.

Toutefois, pour inscrire une activité de workflow personnalisée, l'utilisateur en charge du déploiement doit avoir les mêmes rôles de sécurité que ceux requis pour inscrire les plug-ins.

Support de la version Microsoft Dynamics 365 (SKU)

Pris en charge dans Microsoft Dynamics 365 (Online) en cas d'enregistrement dans le bac à sable. Peut être pris en charge dans les installations hébergées par un partenaire à la discrétion de celui-ci.

Les workflows sont pris en charge par tous les déploiements Dynamics 365. Les activités de workflow personnalisées sont prises en charge dans le bac à sable de Microsoft Dynamics 365 (Online), et dans le bac à sable ou à l'extérieure de celui-ci pour les déploiements locaux/IFD.

Longueur du temps de traitement

Un plug-in inscrit pour l'exécution synchrone ou asynchrone doit achever son exécution dans un délai de deux minutes.

Fonctionne bien pour les processus courts ou longs. Toutefois, chaque activité d'un workflow ne peut pas prendre plus de deux minutes pou s'achever.

Fonctionne lorsque le client de Dynamics 365 pour Outlook est en mode hors connexion

Les modes en ligne et hors connexion sont pris en charge.

Les workflows ne s'exécutent pas en mode hors connexion.

Persistance des processus et données

Les plug-ins s'exécutent jusqu'à ce qu'ils soient terminés. Les plug-ins doivent être écrits comme sans état quand aucune donnée en mémoire n'est conservée.

Les workflows asynchrones peuvent être suspendus, remis, annulés ou repris par le biais des appels SDK ou par l'utilisateur via l'application Web. L'état du workflow est automatiquement enregistré avant d'être suspendu ou reporté.

Les workflows en temps réel ne peuvent pas être en état d'attente. Ils doivent s'exécuter jusqu'à la fin tout comme les plug-ins.

Emprunt d'identité

Les plug-ins peuvent effectuer des opérations de données au nom d'un autre utilisateur système.

Les workflows asynchrones ne peuvent pas utiliser l'emprunt d'identité, contrairement aux workflows en temps réel. Les workflows en temps réel peuvent s'exécuter en tant que propriétaire du workflow ou en tant qu'utilisateur appelant.

Création

Les ingénieurs ou programmeurs logiciels peuvent créer des plug-ins.

Quiconque, que ce soit un utilisateur final, un analyste d'entreprise ou un administrateur, peut créer des workflows s'il dispose des autorisations appropriées.

Il n'y a aucun impact significatif sur les performances du serveur entre un plug-in asynchrone et un workflow.

Quel type de workflow est préférable ?

Du point de vue des performances, est-il préférable de créer un seul long workflow ou plusieurs workflows enfants et de les appeler dans un workflow parent ? L'approche workflow enfant produit un débit inférieur, mais elle est plus facile à gérer si vous modifiez souvent votre définition de workflow. Le temps de compilation n'est pas un problème majeur, car le workflow n'est compilé que lors de la publication. Toutefois, Microsoft Dynamics 365 occasionne une surcharge quand il démarre chaque instance de workflow. La surcharge se produit quand toutes les entités utilisées dans le workflow sont récupérées et que le workflow enfant est démarré dans un processus à deux étapes qui inclut une « tâche d'extension du workflow » et l'instance du workflow réelle. Par conséquent, pour un débit maximal, utilisez un seul long workflow.

Comment doit-on marquer comme terminée l'activité de workflow personnalisée ?

La valeur renvoyée par la méthode Execute est utilisée par l'exécution du workflow pour marquer l'activité comme « terminée ». Vous devez utiliser return base.Execute(executionContext) à moins que l'activité n'ignore la fonctionnalité de la classe de base. Évitez de retourner ActivityExecutionStatus.Closed.Pour plus d'informations :Énumération ActivityExecutionStatus

Comment reporter les exceptions des activités de workflow personnalisées ?

Vous devez lever une exception InvalidPlugInExecutionException dans votre code. Cette erreur s'affiche dans le formulaire de l'instance de workflow.

Peut-on définir les entités personnalisées spécifiques aux divisions ?

Les entités personnalisées ont des privilèges pour chaque rôle de sécurité, mais pas pour chaque division. Pour définir les entités personnalisées visibles uniquement par les divisions spécifiées, vous devez créer différents rôles de sécurité pour chaque division et accorder les privilèges à l'entité personnalisée du rôle approprié.

Meilleures pratiques de sécurité

Suivez ces instructions pour protéger vos données d'entreprise.

Général

Les meilleures pratiques pour sécuriser votre implémentation de Microsoft Dynamics 365 incluent les actions suivantes :

  • Établissez un plan approuvé des données de sécurité pour l'implémentation Microsoft Dynamics 365 de votre organisation.

  • Attribuez les privilèges minimaux obligatoires lorsque vous configurez votre pool d'applications.

  • Exigez que tous les utilisateurs utilisent des mots de passe forts pour leurs comptes. Pour plus d'informations, recherchez « mots de passe forts » dans l'aide de Windows.

Pour plus d'informations :TechNet : considérations relatives à la sécurité pour Microsoft Dynamics CRM

Rôles, privilèges et droits d’accès

Les meilleures pratiques pour l'utilisation du modèle de sécurité Microsoft Dynamics 365 incluent les actions suivantes :

  • Limitez strictement le nombre de personnes affectées au rôle Administrateur système. Ne supprimez jamais ce rôle.

  • Créez des rôles selon la meilleure pratique de sécurité du privilège minimal, en fournissant l'accès à la quantité minimale de données commerciales nécessaires à la tâche. Attribuez aux utilisateurs le rôle approprié à leur travail.

  • Créez un nouveau rôle avec ces privilèges spécifiques et ajoutez l'utilisateur au nouveau rôle si un utilisateur a besoin de niveaux d'accès ou de droits supplémentaires. Les droits d'utilisateur sont l'union de tous les rôles auxquels il a été affecté. N'octroyez pas les privilèges de rôle originaux nécessaires uniquement à un ou plusieurs membres.

  • Utilisez le partage, le cas échéant, pour attribuer à des utilisateurs spécifiques des droits spécifiques sur des objets, et non des privilèges plus larges sur tous les objets d'un type donné.

  • Utilisez des équipes pour créer des groupes fonctionnels croisés afin que les objets spécifiques puissent être partagés avec l'équipe.

  • Formez les utilisateurs ayant des droits d'accès de partage pour partager les informations minimales nécessaires.

Éviter élévation du privilège

Les attaques par élévation de privilège se produisent lorsqu'un utilisateur peut assumer les privilèges d'un compte approuvé, tels qu'un propriétaire ou un administrateur. Exécutez toujours sous des comptes d'utilisateur avec moins de privilèges et attribuez uniquement les autorisations nécessaires. Évitez l'utilisation de comptes administrateur ou propriétaire pour exécuter le code. Vous limitez ainsi la quantité de dommage qui peut se produire si une attaque aboutit. Dans les tâches qui requièrent des autorisations supplémentaires, utilisez la signature de procédure ou l'emprunt d'identité uniquement pendant la durée de la tâche.

Développement côté serveur

Les meilleures pratiques du développement du code côté serveur pour Microsoft Dynamics 365 concernent les éléments suivants :

  • Ne modifiez pas la base de données Microsoft Dynamics 365 par quelque autre moyen que l'utilisation du SDK, car cela permet d'ignorer le modèle de sécurité Microsoft Dynamics 365.

  • Les plug-ins s'exécutent dans le contexte d'un administrateur – vous devez savoir que ce code peut accéder à des informations auxquelles l'utilisateur connecté n'a pas accès.

  • Pour les assemblys de workflow et les plug-ins, évitez d'écrire un code qui nécessite un temps d'exécution long. Il est important que le code du plug-in inscrit pour s'exécuter de manière synchrone retourne aussi rapidement que possible.

  • Si vous répliquez les données Microsoft Dynamics 365 dans votre propre magasin de données, vous êtes responsable de la sécurité des données. Si vous utilisez un plug-in pour transmettre les données, n'oubliez pas d'inscrire le plug-in pour qu'il s'exécute après l'opération de plateforme principale. Les contrôles de privilège de sécurité de l'utilisateur connecté se produisent lors de l'opération de plateforme principale.

  • Les données qui proviennent de Microsoft Dynamics 365 peuvent ne pas être sûres pour le rendu. Les données peuvent avoir été injectées avec des balises HTML qui ne sont pas sécurisées.

  • Respectez l'exigence de ne pas accéder directement aux bases de données Microsoft Dynamics 365 via SQL Server Enterprise Manager. Ignorer le SDK peut ouvrir la voie à des menaces d'injection SQL.

  • Pour les déploiement avec accès via Internet, n'oubliez pas que votre solution n'est aussi sécurisée que le lien le plus faible. Lorsque votre application est exposée à Internet, elle est également exposée à des menaces de sécurité.

  • Utilisez uniquement les langages qui produisent un code managé pour obtenir la meilleure sécurité à partir des dépassements de mémoire tampon, des exceptions, etc.

Pour plus d’informations sur la sécurité, consultez les rubriques suivantes :

Développement côté client

Les meilleures pratiques pour développer les personnalisations de l'application Web Dynamics 365 et Microsoft Dynamics 365 pour Outlook comprennent les pratiques suivantes :

  • Utilisez les ressources Web à la place de pages qui nécessitent un traitement côté serveur chaque fois que possible. Si vos besoins peuvent être satisfaits à l'aide du traitement côté serveur, respectez la condition que vos pages Web personnalisées soient installées dans un site Web distinct de Microsoft Dynamics 365. Définissez le niveau d'approbation pour votre site de manière appropriée, selon votre niveau de confiance en la sécurité de votre code. Cela réduit la menace de scripts de site à site et autres menaces.

  • Pour une sécurité renforcée, vérifiez que votre site Web distinct s'exécute sur un compte différent de Microsoft Dynamics 365. Ce compte doit disposer de l'accès minimal possible, sans accès direct aux bases de données Microsoft. Vous pouvez utiliser un mot de passe complexe qui n'expire pas, car aucun utilisateur ne se connecte à ce compte – uniquement à votre application.

  • Évitez l'utilisation des contrôles ActiveX, car ils sont réputés pour présenter des problèmes de sécurité.

  • Soyez conscient des limites des scripts client.Pour plus d'informations :Écrire du code pour les formulaires Microsoft Dynamics 365

  • Utilisez les plug-ins pour appliquer la logique métier, quelle que soit la façon dont les modifications apportées aux données sont effectuées.

  • Utilisez toujours une boîte de dialogue de confirmation lorsque vous supprimez des enregistrements ou appliquer des modifications confidentielles, comme l'ajout d'un nouvel utilisateur à un rôle de sécurité. Vous pouvez utiliser confirmDialog pour afficher une boîte de dialogue. Cela permet d'éviter les techniques telles que le détournement de clic ou la réparation d'interface utilisateur où un développeur malveillant peut inclure votre page dans une page en apparence inoffensive pour duper un utilisateur et le conduire à exécuter des actions qui peuvent compromettre la sécurité ou engendrer des actions indésirables sur les données.

Les meilleures pratiques de sécurité pour votre site Web incluent les actions suivantes :

  • N'utilisez pas l'accès anonyme.

  • Utilisez l'authentification Windows intégrée, NTLM ou de base sur TLS (Transport Layer Security) ou SSL (Secure Sockets Layer).

  • Utilisez TLS/SSL pour éviter d'envoyer des données non chiffrées sur le réseau si votre site Web est installé sur un autre ordinateur que Microsoft Dynamics 365.

Pour plus d’informations, voir les sections suivantes :

Meilleures pratiques d'extensibilité des ISV

L'un des principaux éléments de l'extensibilité des ISV est que vous ne devez pas présumer que votre solution ISV est la seule installée. La liste ci-après répertorie les meilleures pratiques à suivre.

Meilleures pratiques pour utiliser les services Web Microsoft Dynamics 365

Vous devez placer les URL du service Web Microsoft Dynamics 365 dans un fichier de configuration, par exemple, dans un fichier app.config, afin que votre code soit à l'écart des modifications de l'URL. Par exemple, il existe des URL différentes pour les trois centres de données Microsoft Dynamics 365 (Online) à travers le monde.

Où placer les plug-ins et les activités de workflow personnalisées ?

Pour les plug-ins sur disque ou les activités de workflow personnalisées, placez les assemblys dans le dossier <installdir>\Server\bin\assembly.

Où placer les applications Web ou pages Web personnalisées ?

Consultez la rubrique Implémenter une authentification unique d’une page Web ASPX ou IFRAME.

Comment exécuter un plug-in lorsque la vue grille de l'application Web est mise à jour ?

Inscrivez le plug-in sur la demande de message RetrieveMultipleRequest et ne spécifiez aucun type d'entité au cours de l'inscription.

Quand créer un site Web ?

Créez un site Web pour votre code lorsque l'un des éléments suivants s'applique :

  • Votre application doit être liée à un domaine, un protocole ou un port qui est différent de l'application Microsoft Dynamics 365, ou doit s'exécuter dans un autre pool d'applications.

  • Votre application peut exister et être accessible par elle-même. Par exemple, un portail qui interagit avec Microsoft Dynamics 365 comme serveur (à l'aide des services Web) doit être hébergé comme nouveau site Web.

  • Votre application utilise toujours Active Directory ou l'authentification Windows intégrée (non IFD) et les scripts inter-domaines ne sont pas un problème. Par exemple, votre application interagit avec une entité principale à l'aide des services Web et interagit avec les formulaires Microsoft Dynamics 365. Une page hébergée dans un IFRAME joint à l'application Microsoft Dynamics 365 qui n'interagit pas avec le formulaire Microsoft Dynamics 365 appartient à cette catégorie.

Voir aussi

Étendre Microsoft Dynamics 365 sur le serveur
Définir les indicateurs binaires
Écrire du code pour les formulaires Microsoft Dynamics 365
Écrire des plug-ins pour étendre les processus d’entreprise
Activités de workflow personnalisées (assemblys de workflow)

Microsoft Dynamics 365

© 2017 Microsoft. Tous droits réservés. Copyright