Créer vos propres actions
Date de publication : novembre 2016
S’applique à : Dynamics CRM 2015
Vous pouvez étendre la fonctionnalité de Microsoft Dynamics 365 en créant des messages personnalisés appelés actions. Ces actions auront des classes de demande/réponse associées. Actuellement, les actions sont disponibles aux applications d’entreprise et aux extensions uniquement via des appels de service Web de l’organisation. Les actions sont généralement utilisées pour ajouter une nouvelle fonctionnalité spécifique au domaine au service Web de l’organisation ou pour combiner plusieurs demandes de message de service Web dans une seule demande. Par exemple, dans un centre d’appels technique, vous pouvez combiner les messages Create, Assign et Setstate en un u nouveau message unique Escalate.
La logique métier d’une action est mise en œuvre à l’aide d’un workflow. Lorsque vous créez une action, le workflow en temps réel associé est automatiquement enregistré pour s’exécuter à la phase 30 (opération principale) du pipeline d’exécution. Pour plus d’informations sur les workflows en temps réel, voir Catégories de workflow.
Lorsque des actions sont prises en charge à la fois dans Mise à jour de Microsoft Dynamics CRM 2015 et de Microsoft Dynamics CRM Online 2015, la création d’une action de code (avec XAML) est uniquement prise en charge par Microsoft Dynamics CRM 2015 local et IFD. Les clients en ligne doivent créer des actions de façon interactive dans l’application Web.
Contenu de la rubrique
À propos des définitions d'action
Autorisations requises
Créer une action à l’aide d’un code
Englober une action pour la distribution
Générer des types de liaison anticipée pour une action
Exécuter une action à l’aide du service Web
Exécuter une action à l'aide d'un processus
Rechercher les actions longues
À propos des définitions d'action
Une action est définie à l’ aide d’un enregistrement d’entité Workflow, similaire à un workflow en temps réel. Certains points clés de la définition d’une action et de la manière dont elle fonctionne figurent dans la liste suivante :
Peut être associée à une entité unique ou être globale (non associée à toute 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 organization.svc et organization.svc/points de terminaison Web, mais pas le point de terminaison organizationdata.svc (OData).
Peut être exécutée à l’aide d’une ressource Web JavaScript.Pour plus d'informations :Exécutez une action à l’aide d’une ressource Web JavaScript
Est toujours exécutée dans le contexte de sécurité de l’utilisateur appelant.
L’enregistrement ne peut pas être supprimé tandis que plusieurs étapes de plug-in sont enregistrées sur l’action.
Peut éventuellement, via un paramètre de configuration, participer à la transaction actuelle de la base de données.
Ne prend pas en charge une étendue où l’exécution est restreinte à un utilisateur, une division ou une organisation. Les actions s’exécutent toujours dans l’étendue 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 prise en charge lorsque les clients sont hors ligne.
Peut être appelé par un appel de méthode de service Web.
Notes
-
Peut être appelé directement à partir d'un workflow.
Pour les organisations Microsoft Dynamics CRM Online, cette fonctionnalité n'est disponible que si votre organisation a effectué la mise à jour vers la mise à jour 1 de Dynamics CRM Online 2015. Vous aimeriez bénéficier de cette fonction ? Recherchez votre personne de contact du support ou votre administrateur CRM. Cette fonctionnalité n'est pas disponible pour Dynamics CRM (local).
Autorisations requises
Un privilège de sécurité nommé Activer les processus en temps réel (prvActivateSynchronousWorkflow) est nécessaire pour activer un workflow d’action en temps réel, afin de pouvoir l’exécuter. Cela vient en complément de tout privilège requis pour créer un workflow. Pour plus d'informations sur ces privilèges, voir le mappage de l'interface utilisateur du privilège dans l'Personnalisation.
Créer une action à l’aide d’un code
En règle générale, une action peut être mise en œuvre par un personnalisateur à l’aide d’un concepteur interactif de workflow de l’application Web. Toutefois, les développeurs peuvent implémenter des actions avec les appels du kit de développement logiciel (SDK) et les déployer sur un serveur local ou IFD, le cas échéant.
Les attributs de l’entité workflow utilisés pour une action sont décrits dans le tableau suivant. L’exemple de code d’un workflow en temps réel se trouve dans la rubrique Créer un workflow en temps réel dans le code.
Attribut Workflow |
Description |
---|---|
Category |
Définir sur WorkflowCategory.CustomOperation. |
SyncWorkflowLogOnError |
Lorsque défini sur true, les erreurs sont connectées aux enregistrements ProcessSession. Contrairement aux workflows asynchrones, l’exécution de workflow en temps réel n’est pas connectée aux enregistrements System Job. |
Mode |
Pas utilisé. |
IsTransacted |
Définir sur true si l’action doit participer à la transaction de la base de données ; sinon, 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éfinir sur le code XAML qui définit le workflow en temps réel de votre action. Il n’existe pas de moyen de faire référence à un autre workflow existant en temps réel. |
Ajouter les 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 workflow à l'aide d'un type DynamicActivityProperty. Lorsque vous ajoutez ces arguments à un workflow d'action, ils deviennent les propriétés dans la demande de message et les classes de réponse associées à cette action. Par exemple, l'exemple suivant indique C# et le code XAML pour deux arguments d'entrée et un 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 puisque la génération du code définira ces noms comme propriétés de demande ou de réponse.
Les types d'arguments pris en charge pour les arguments d'entrée et de sortie sont affichés dans le tableau suivant.
Type .NET |
Type d’argument |
---|---|
System.Int32 |
Integer |
System.String |
String |
EntityReference |
|
Entity |
|
EntityCollection |
|
System.DateTime |
DateTime |
System.Double |
Float |
System.Decimal |
Decimal |
Money |
|
System.Boolean |
Boolean |
Picklist |
Les attributs d’argument pris en charge sont répertoriés dans le tableau suivant.
Attribut Argument |
Description |
---|---|
Indique si l’argument est nécessaire. |
|
Indique si la direction de l’argument est une entrée ou une sortie. |
|
Spécifie une description pour l’argument. |
|
Utilisé si vous souhaitez passer dans une entité. |
|
Cet attribut est généré ou ajouté automatiquement. Il pointe vers l’entité principale pour laquelle le workflow est exécuté. Cet attribut est facultatif pour les actions globales. |
Englober une action pour la distribution
Pour distribuer votre action de sorte à l’importer dans une organisation Microsoft Dynamics 365, ajoutez votre action à une solution Dynamics 365. 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, voir Empaqueter et distribuer les extensions à l’aide des solutions.
Générer des types de liaison anticipée pour une action
En utilisant l’outil CrmSvcUtil fourni dans le pack du Kit de développement logiciel (SDK), vous pouvez générer des classes de demande et de réponse pour votre action afin d’inclure votre code d’application. Toutefois, avant de générer ces classes, veillez à activer l’action.
Téléchargez le package Kit de développement logiciel (SDK) de Microsoft Dynamics CRM.
L’exemple suivant présente le format d’exécution de l’outil à partir de la ligne de commande pour une installation locale de Dynamics 365. Indiquez les valeurs des paramètres pour votre installation.
CrmSvcUtil.exe /url:http://<serverName>/<organizationName>/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /domain:<domainName> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions
L’exemple suivant présente le format d’exécution de l’outil à partir de la ligne de commande avec Microsoft Dynamics CRM Online. Indiquez les valeurs de paramètre appropriées pour vos compte et 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 paramètre /generateActions.Pour plus d'informations :Créer des classes d’entité à liaison anticipée à 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 du service Web
Pour exécuter une action à l’aide du service Web de l’organisation via le code géré, suivez les étapes suivantes.
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 votre code d’application, instanciez la demande de votre action et importez toutes les propriétés nécessaires.
Invoquez Execute, en transmettant votre demande comme argument.
Avant d’exécuter votre code d’application, assurez-vous que l’action est activée. Sinon, vous recevrez une erreur d’exécution.
Exécutez une action à l’aide d’une ressource Web JavaScript
La bibliothèque d’exemple Sdk.Soap.js indique comment les messages peuvent être utilisés avec les ressources Web JavaScript et le point de terminaison Modern App SOAP (organization.svc/Web). Utilisez l’exemple Sdk.Soap.js Action Message Generator complémentaire pour générer les bibliothèques JavaScript qui peuvent être utilisées avec Sdk.Soap.js de la même façon que vous pouvez utiliser les bibliothèques pour les messages système fournis dans cet exemple. Les fichiers générés à l’aide du générateur de message d’action Sdk.Soap.js sont les bibliothèques JavaScript distinctes de chaque action. Chaque bibliothèque contient une classe de demande et de réponse qui correspond aux classes générées par le CrmSvcUtil.
Exécuter une action à l'aide d'un processus
Vous pouvez exécuter une action à partir de workflows, 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 Exécuter l'action du menu déroulant Ajouter une étape du formulaire processus d'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 Action indiquée dans l'étape. Choisissez Définir les propriétés dans l'étape pour spécifier les paramètres d'entrée nécessaires pour votre action personnalisée.
Notes
Si une action personnalisée contient des types de paramètres non pris en charge, par exemple Liste déroulante, 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 dans Mise à jour 1 de Microsoft Dynamics CRM Online 2015.
Les vérifications de la plateforme Depth existantes garantissent l'absence d'une boucle infinie. Pour plus d'informations sur ces limites de profondeur, voir MaxDepth.
Rechercher les actions longues
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. Toutefois, il n’y a aucune limite quant au temps total que peut prendre l’action en elle-même. En outre, si une action participe à une transaction, où la restauration activée, des délais d’expiration SQL Server s’appliqueront.
Conseil
Il est recommandé que les opérations longues soient exécutées en dehors de Microsoft Dynamics 365 en utilisant les processus en arrière-plan ou asynchrone .NET.
Voir aussi
Créer des workflows en temps réel
Utiliser des dialogues pour les processus guidés
Pipeline d’exécution des événements
Écrire des workflows pour automatiser les processus d’entreprise
TechNet : Personnalisation de votre système
© 2017 Microsoft. Tous droits réservés. Copyright