Partager via


Créer vos propres actions

 

Date de publication : janvier 2017

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

Vous pouvez étendre la fonctionnalité de Microsoft Dynamics 365 en créant des messages personnalisés appelés actions. Ces actions auront associé des classes de demande/réponse et une action d'API Web sera générée. 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 processus Dynamics 365.

Lorsque des actions sont prises en charge dans Microsoft Dynamics 365 (Online et local), la création d’une action dans le code (avec XAML) est uniquement prise en charge par les déploiements locaux 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 de l'API Web

Exécuter une action à l’aide du service de l'organisation

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.

  • Peut être appelé directement à partir d'un workflow.

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

EntityReference

Entity

Entity

EntityCollection

EntityCollection

System.DateTime

DateTime

System.Double

Float

System.Decimal

Decimal

Money

Money

System.Boolean

Boolean

OptionSetValue

Picklist

Les attributs d’argument pris en charge sont répertoriés dans le tableau suivant.

Attribut Argument

Description

ArgumentRequiredAttribute

Indique si l’argument est nécessaire.

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 passer dans une entité.

ArgumentTargetAttribute

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 365 (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 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 :Utiliser des actions API Web.

Exécuter une action à l’aide du service de l'organisation

Pour exécuter une action à l’aide du service Web de l’organisation via le code géré, suivez les étapes suivantes.

  1. 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.

  2. Dans votre code d’application, instanciez la demande de votre action et importez toutes les propriétés nécessaires.

  3. 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

Une action peut être exécutée à l'aide de l'API Web comme n'importe quelle action système.Pour plus d'informations :Utiliser des actions API Web.

La bibliothèque d’exemple Sdk.Soap.js indique comment les messages peuvent être utilisés avec les ressources Web JavaScript et le service de l'organisation (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. Sélectionnez 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 boîtes de dialogue dans Dynamics 365 pour les processus guidés
Pipeline d’exécution des événements
Automatiser les processus d'entreprise à l'aide du processus Dynamics 365
TechNet : Personnalisation de votre système

Microsoft Dynamics 365

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