Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous pouvez étendre les fonctionnalités de Dynamics 365 Customer Engagement (on-premises) en créant des messages personnalisés appelés actions. Ces actions auront des classes de requête/réponse associées et une action API Web sera générée. Les actions sont généralement utilisées pour ajouter de nouvelles fonctionnalités spécifiques au domaine au service Web de l’organisation ou pour combiner plusieurs demandes de messages du service Web de l’organisation en une seule demande. Par exemple, dans un centre d’appels d’assistance, vous pouvez combiner les messages Create, Assign et Setstate en un seul nouveau message Escalate.
La logique métier d’une action est implémentée à l’aide d’un workflow. Lorsque vous créez une action, le flux de travail en temps réel associé est automatiquement enregistré pour s’exécuter à l’étape 30 (opération principale) du pipeline d’exécution. Pour plus d’informations sur les flux de travail en temps réel, consultez Types de flux de travail.
Bien que les actions soient prises en charge dans Dynamics 365 for Customer Engagement, la création d’une action dans le code (à l’aide de XAML) n’est prise en charge que par les déploiements locaux et IFD. Les clients en ligne doivent créer des actions de manière interactive dans l’application Web.
À propos des définitions d’action
Une action est définie à l’aide d’un enregistrement d’entité Workflow , à l’instar d’un flux de travail en temps réel. Certains points clés de ce qu’est une action et de son fonctionnement sont dans la liste suivante :
Peut être associé à une seule entité ou être global (non associé à une entité particulière).
Est exécutée dans la phase 30 de l’opération principale du pipeline d’exécution de l’évènement.
Prend en charge l’invocation des plug-ins enregistrés dans les phases de pré-exploitation et de post-exploitation du pipeline d’exécution de l’évènement.
Peut posséder des plug-ins enregistrés dans les phases de pré-exploitation ou de post-exploitation uniquement lorsque l’état de l’action est Activée.
Est disponible via l'API Web ou à travers les points de terminaison
organization.svcetorganization.svc/web.Peut être exécuté à l’aide d’une ressource Web JavaScript. Pour plus d’informations : Exécuter une action à l’aide d’une ressource Web JavaScript
Fonctionne toujours dans le contexte de sécurité de l’utilisateur appelant.
L’enregistrement ne peut pas être supprimé tant que des étapes de plug-in sont enregistrées sur l’action.
Peut éventuellement, via un paramètre de configuration, participer à la transaction de base de données en cours.
Ne prend pas en charge une étendue dont l’exécution est limitée à un utilisateur, une unité commerciale ou une organisation. Les actions s’exécutent toujours dans le périmètre de l’organisation.
Prend en charge les arguments d’entrée et de sortie.
Prend en charge l’audit des modifications de données.
N’est pas pris en charge avec les clients hors connexion.
Peut être appelé par un appel de méthode de service Web.
Peut être appelé directement à partir d’un flux de travail.
Autorisations requises
Un privilège de sécurité nommé Activer les processus en temps réel (prvActivateSynchronousWorkflow) est requis pour activer le flux de travail en temps réel d’une action afin qu’elle puisse être exécutée. Cela s’ajoute aux privilèges nécessaires à la création d’un flux de travail.
Créer une action à l’aide de code
En règle générale, une action est implémentée par un personnalisateur à l’aide du concepteur de flux de travail interactif de l’application Web. Toutefois, les développeurs peuvent implémenter des actions à l’aide d’appels SDK et les déployer sur un serveur local ou IFD s’ils le souhaitent.
Les attributs d’entité de flux de travail utilisés pour une action sont décrits dans le tableau suivant. Vous trouverez un exemple de code pour un flux de travail en temps réel dans la rubrique Créer un flux de travail en temps réel dans le code.
| Attribut de flux de travail | Descriptif |
|---|---|
Category |
Réglez sur WorkflowCategory.CustomOperation. |
SyncWorkflowLogOnError |
Lorsque true, les erreurs sont connectées aux enregistrements ProcessSession. Contrairement aux flux de travail asynchrones, l’exécution du flux de travail en temps réel n’est pas consignée dans les System Job enregistrements. |
Mode |
Pas utilisé. |
IsTransacted |
Définissez sur true si l’action doit participer à la transaction de base de données ; sinon, sur false. La valeur par défaut est true. |
UniqueName |
Un nom unique pour l’action. Le nom est composé d’un préfixe d’éditeur + « _ » + le nom unique. |
Xaml |
Définissez le code XAML qui définit le flux de travail en temps réel de votre action. Il n’existe aucun moyen de faire référence à un autre flux de travail en temps réel existant. |
Ajouter des arguments d’entrée et de sortie
Les actions prennent en charge les arguments d’entrée et de sortie qui peuvent être ajoutés au flux de travail à l’aide d’un type DynamicActivityProperty . Lorsque vous ajoutez ces arguments au flux de travail d’une action, ils deviennent des propriétés dans les classes de demande de message et de réponse associées à cette action. Par exemple, l’exemple suivant montre du code C# et XAML pour deux arguments d’entrée et un argument de sortie.
DynamicActivityProperty inputProperty1 = new DynamicActivityProperty { Name = "Subject", Type = typeof(InArgument<string>) };
DynamicActivityProperty inputProperty2 = new DynamicActivityProperty { Name = "EntityCollection", Type = typeof(InArgument<EntityCollection>) };
DynamicActivityProperty outputProperty1 = new DynamicActivityProperty { Name = "Output", Type = typeof(OutArgument<string>) };
inputProperty1.Attributes.Add(new ArgumentRequiredAttribute(true));
inputProperty1.Attributes.Add(new ArgumentDescriptionAttribute("The subject"));
inputProperty1.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Input));
inputProperty2.Attributes.Add(new ArgumentRequiredAttribute(false));
inputProperty2.Attributes.Add(new ArgumentDescriptionAttribute("The entity collection"));
inputProperty2.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Input));
outputProperty1.Attributes.Add(new ArgumentRequiredAttribute(false));
outputProperty1.Attributes.Add(new ArgumentDescriptionAttribute("The output"));
outputProperty1.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Output));
<x:Property Name="Subject"
Type="InArgument(x:String)">
<x:Property.Attributes>
<mxsw:ArgumentRequiredAttribute Value="True" />
<mxsw:ArgumentTargetAttribute Value="False" />
<mxsw:ArgumentDescriptionAttribute Value="The subject " />
<mxsw:ArgumentDirectionAttribute Value="Input" />
<mxsw:ArgumentEntityAttribute Value="" />
</x:Property.Attributes>
</x:Property>
<x:Property Name="EntityCollection"
Type="InArgument(mxs:EntityCollection)">
<x:Property.Attributes>
<mxsw:ArgumentRequiredAttribute Value="False" />
<mxsw:ArgumentTargetAttribute Value="False" />
<mxsw:ArgumentDescriptionAttribute Value="The entity collection" />
<mxsw:ArgumentDirectionAttribute Value="Input" />
<mxsw:ArgumentEntityAttribute Value="" />
</x:Property.Attributes>
</x:Property>
<x:Property Name="Output"
Type="OutArgument(x:String)">
<x:Property.Attributes>
<mxsw:ArgumentRequiredAttribute Value="False" />
<mxsw:ArgumentTargetAttribute Value="False" />
<mxsw:ArgumentDescriptionAttribute Value="The output" />
<mxsw:ArgumentDirectionAttribute Value="Output" />
<mxsw:ArgumentEntityAttribute Value="" />
</x:Property.Attributes>
</x:Property>
Les noms utilisés pour les propriétés doivent être cohérents avec les noms d’arguments, car la génération de code définira ces noms comme des propriétés de requête ou de réponse.
Les types d’arguments pris en charge pour les arguments d’entrée et de sortie sont indiqués dans le tableau suivant.
| Type .NET | Type d’argument |
|---|---|
| System.Int32 | Nombre entier |
| System.String | Chaîne |
| EntityReference | EntityReference |
| Entity | Entité |
| EntityCollection | EntityCollection |
| System.DateTime | Date et heure |
| System.Double | Float |
| System.Decimal | Decimal |
| Money | Money |
| System.Boolean | Booléen |
| OptionSetValue | Liste déroulante |
Les attributs d’argument pris en charge sont répertoriés dans le tableau suivant.
| Attribut d’argument | Descriptif |
|---|---|
| ArgumentRequiredAttribute | Indique si l’argument est requis. |
| ArgumentDirectionAttribute | Indique si la direction de l’argument est une entrée ou une sortie. |
| ArgumentDescriptionAttribute | Spécifie une description pour l’argument. |
| ArgumentEntityAttribute | Utilisé si vous souhaitez transmettre une entité. |
| ArgumentTargetAttribute | Cet attribut est généré ou ajouté automatiquement. Il pointe vers l’entité principale pour laquelle le flux de travail est exécuté. Cet attribut est facultatif pour les actions globales. |
Englober une action pour la distribution
Pour répartir votre action afin qu’elle puisse être importée dans une organisation Dynamics 365 Customer Engagement (locale), ajoutez votre action à une solution Customer Engagement. Cela se fait facilement à l’aide de l’application Web en accédant à Paramètres>Personnalisations>Solutions. Vous pouvez également écrire du code pour créer la solution. Pour plus d’informations sur les solutions, consultez Empaqueter et distribuer des extensions.
Générer des types de liaison anticipée pour une action
À l’aide de l’outil CrmSvcUtil, vous pouvez générer des classes de requête et de réponse pour que votre action soit incluse dans le code de votre application. Toutefois, avant de générer ces classes, assurez-vous d’activer l’action.
Pour télécharger le CrmSvcUtil.exe, consultez Outils de développement Dataverse.
L’exemple suivant montre le format d’exécution de l’outil à partir de la ligne de commande pour une installation locale de Customer Engagement. Vous fournissez les valeurs des paramètres de votre installation.
CrmSvcUtil.exe /url:https://<serverName>/<organizationName>/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /domain:<domainName> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions
L’exemple suivant montre le format d’exécution de l’outil à partir de la ligne de commande avec Dynamics 365 for Customer Engagement. Vous fournissez les valeurs de paramètre appropriées pour votre compte et votre serveur.
CrmSvcUtil.exe /url:https://<organizationUrlName>.api.crm.dynamics.com/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions
Notez l’utilisation du /generateActions paramètre. Pour plus d’informations : Créer des classes d’entités à liaison précoce à l’aide de l’outil de génération de code (CrmSvcUtil.exe).
Vous pouvez utiliser les types de liaison anticipée ou tardive avec les classes de demande et de réponse générées pour votre action.
Exécuter une action à l’aide de l’API Web
Une nouvelle action est créée dans l’API Web lors de sa création. Si l’action est créée dans le contexte d’une entité, elle est liée à cette entité. Sinon, il s’agit d’une action non liée. Pour plus d'informations, consultez Utiliser les actions de l'API Web.
Exécuter une action à l’aide d’une ressource Web JavaScript
Une action peut être exécutée à l’aide de l’API Web comme n’importe quelle action système. Plus d’informations : Xrm.WebApi.online.execute
Exécuter une action à l’aide du service d’organisation
Pour exécuter une action à l’aide du service web de l’organisation à l’aide de code managé, procédez comme suit.
Ajoutez le fichier de type liaison anticipée que vous avez généré à l’aide de l’outil CrmSvcUtil dans le projet de votre application.
Dans le code de votre application, instanciez la demande de votre action et renseignez les propriétés requises.
Invoke Execute, en passant votre requête en argument.
Avant d’exécuter le code de votre application, assurez-vous que l’action est activée. Sinon, vous recevrez une erreur d’exécution.
Exécuter une action à l’aide d’un processus
Vous pouvez exécuter une action à partir de flux de travail, de boîtes de dialogue ou d’autres actions de processus. Les actions personnalisées activées sont disponibles pour les processus en sélectionnant l’élément Effectuer une action dans la liste déroulante Ajouter une étape du formulaire de processus de l’application Web. Une fois l’étape ajoutée à votre processus, vous pouvez sélectionner votre nouvelle action personnalisée (ou n’importe quelle action) dans la liste d’actions fournie dans l’étape. Sélectionnez Définir les propriétés à l’étape pour spécifier les paramètres d’entrée requis par votre action personnalisée.
Remarque
Si une action personnalisée a des types de paramètres non pris en charge, par exemple Liste de sélection, Entité ou Collection d’entités, l’action personnalisée n’est pas répertoriée dans la liste Action .
La possibilité d’exécuter une action à partir d’un processus a été introduite avec Dynamics CRM Online 2015 Update 1.
Les vérifications de la plateforme Depth existantes garantissent l’absence d’une boucle infinie. Pour plus d’informations sur les limites de profondeur, reportez-vous à la section MaxDepth.
Soyez attentif aux actions qui durent longtemps
Si l’une des étapes du workflow de l’action en temps réel est une activité de workflow personnalisée, cette activité de workflow personnalisée est exécutée au sein de l’environnement d’exécution bac à sable isolé et sera soumise à la limite de délai de deux minutes, de la même façon que les plug-ins bac à sable sont gérés. Cependant, il n’y a aucune restriction quant au temps total que l’action elle-même peut prendre. En outre, si une action participe à une transaction, où la restauration activée, des délais d’expiration SQL Server s’appliqueront.
Conseil / Astuce
Une recommandation de bonne pratique est que les opérations de longue durée doivent être exécutées en dehors de Dynamics 365 Customer Engagement (localement) à l’aide de processus asynchrones ou d’arrière-plan .NET.
Voir aussi
Créer des workflows en temps réel
Utiliser des boîtes de dialogue pour les processus guidés
Pipeline d’exécution d’événements
Créer des workflows pour automatiser les processus commerciaux
Personnalisez votre système