Partager via


Créer des workflows en temps réel

Similaires aux workflows asynchrones, les workflows en temps réel permettent de modéliser et d’automatiser des processus métier réels. Ils peuvent éventuellement avoir besoin que l’utilisateur saisisse des informations, ils peuvent démarrer automatiquement dans des conditions d’événements spécifiques, ou être démarrés manuellement par un utilisateur. Les workflows en temps réel permettent aux utilisateurs professionnels, par exemple les analystes d’entreprise, d’implémenter la fonctionnalité similaire aux plug-ins synchrones sans nécessiter une expérience en programmation .NET Framework. Vous pouvez créer des workflows asynchrones ou en temps réel dans l’application web Dynamics 365 Customer Engagement (on-premises) ou dans le code.

Certains points clés d’un workflow en temps réel incluent les éléments suivants :

  • Défini à l’aide d’un enregistrement d’entité Workflow, similaire à un workflow asynchrone.

  • S’exécute dans une phase du pipeline d’exécution des événements, similaire aux plug-ins synchrones. Le workflow en temps réel peut s’exécuter avant, après ou pendant l’opération principale. Un workflow en temps réel qui est exécuté lors de l’opération principale est l’implémentation d’une action personnalisée. Les workflows en temps réel peuvent être classés dans une phase comme vous pourriez le faire pour les plug-ins. En savoir plus : Pipeline d’exécution des événements

  • En cas de configuration pour être exécuté à la demande ou en réponse à un événement, le workflow en temps réel s’exécute immédiatement plutôt que d’être mis en file d’attente pour s’exécuter ultérieurement.

  • Peut être exécuté dans le contexte de sécurité de l’utilisateur ou du propriétaire connecté du workflow. Toutefois, les workflows définis pour s’exécuter à la demande fonctionnent toujours dans le contexte de sécurité de l’utilisateur connecté.

  • Ne peut contenir aucune activité de différé ou d’attente.

  • Stocke uniquement les erreurs, puis uniquement lorsque l’enregistrement est activé.

  • S’exécute dans la transaction en cours. Toutes les activités du workflow et des workflows enfants, sauf les workflows asynchrones, font partie d’une transaction unique. Les workflows enfants asynchrones sont mis en file d’attente et s’exécutent dans une transaction distincte.

  • Peut être converti en workflow asynchrone et à nouveau en temps réel.

Privilèges de sécurité requis

Un privilège de sécurité intitulé Activer les processus en temps réel (prvActivateSynchronousWorkflow) est nécessaire pour activer les workflows en temps réel, afin de pouvoir les exécuter. Le privilège Exécuter la tâche de workflow (prvWorkflowExecution) est requis pour lancer le workflow. Parce qu’un workflow en temps réel effectue l’opération système de base, il est préférable que seul un petit groupe expérimenté d’utilisateurs dispose du privilège d’activation.

Créer un workflow en temps réel dans le code

 

Bien que Dynamics 365 for Customer Engagement prend en charge les workflows en temps réel, ils doivent être créés interactivement dans l’application Web. Les workflows basés XAML, décrits dans cette section, sont pris en charge par un serveur local ou IFD.

Vous pouvez créer un workflow en temps réel dans le code en créant un enregistrement d’entité Workflow. Vérifiez les métadonnées de l’attribut de l’entité Workflow avec l’outil Navigateur de métadonnées. Pour afficher les métadonnées d'entité pour votre organisation, installez la solution Navigateur de métadonnées décrite dans l'article Accès aux métadonnées de votre organisation. Vous pouvez également accéder à la documentation de référence pour les entités dans Référence d'entité.

L’exemple ci-dessous compare le code qui permet de créer un workflow asynchrone au code qui permet de créer un workflow en temps réel.



// Create an asynchronous workflow.
// The workflow should execute after a new opportunity is created.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (async)",
    Type = new OptionSetValue((int)WorkflowType.Definition),
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Background),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    TriggerOnCreate = true,
    AsyncAutoDelete = true,
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English                        
};
_workflowId = _serviceProxy.Create(workflow);



// Create a real-time workflow. 
// The workflow should execute after a new opportunity is created
// and run in the context of the logged on user.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (real-time)",
    Type = new OptionSetValue((int)WorkflowType.Definition),       
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Realtime),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    RunAs = new OptionSetValue((int)workflow_runas.CallingUser),
    SyncWorkflowLogOnFailure = true,
    TriggerOnCreate = true,
    CreateStage = new OptionSetValue((int)workflow_stage.Postoperation),
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English
};
_workflowId = _serviceProxy.Create(workflow);

Le workflow en temps réel contient des propriétés supplémentaires définies que le workflow asynchrone n’a pas :

Attribut de workflow Description
Category Définir sur WorkflowCategory.Workflow.
RunAs Spécifie l’exécution du workflow sous le contexte de sécurité du propriétaire de workflow (workflow_runas.Owner) ou l’utilisateur connecté (workflow_runas.CallingUser).
SyncWorkflowLogOnError Lorsque 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.
CreateStage, DeleteStage ou UpdateStage Identifie le pipeline d’exécution d’événement en cas d’exécution du workflow : avant l’opération principale (workflow_stage.Preoperation) ou après (workflow_stage.Postoperation). Vous devez faire correspondre la phase à l’événement déclencheur pour l’opération attendue. Par exemple, si TriggerOnUpdate est true, vous devez également définir UpdateStage.

Les workflows en temps réel ne peuvent pas être exécutés lors de récupération. En dehors des récupérations, le reste des messages des services web pris en charge correspondent à l’un des trois événements pris en charge. Par exemple, une opération d’attribution ou de définition d’état est au final la même chose qu’une mise à jour.
Mode Il s’agit du mode d’exécution. Définir sur WorkflowMode.Realtime.
Rank Vous pouvez ordonner l’exécution des plug-ins et des workflows en temps réel en une phase en définissant un classement. Tous les plug-ins ou workflows en temps réel du rang 1 s’exécutent avant ceux du rang 2, etc.
Xaml Définir sur le code XAML qui définit le workflow en temps réel.

Vous trouverez l’exemple de code complet pour créer un workflow en temps réel dans la rubrique Exemple : créer un workflow en temps réel dans le code.

Convertir un workflow asynchrone en un workflow en temps réel, et vice-versa

Vous pouvez convertir des workflows asynchrones en workflows en temps réel et vice-et-versa à l’aide de UpdateRequest sans avoir besoin de réécrire les workflows, tant que les workflows asynchrones ne contiennent aucune activité de différé ou d’attente. Vous pouvez également effectuer la conversion interactivement via l’application web. Le workflow doit être à l’état de brouillon (non activé) avant que la conversion ne soit effectuée.

Convertir un workflow asynchrone en un workflow en temps réel

  1. Créez une UpdateRequest pour le workflow.

  2. Définissez la propriété Mode du workflow sur WorkflowMode.Realtime.

  3. Définissez CreateStage, UpdateStage ou DeleteStage du workflow comme approprié. Par exemple, si votre workflow a TriggerOnDelete de défini, alors définissez également la propriété DeleteStage.

  4. Appelez la méthode Execute en passant la demande de mise à jour en tant que paramètre.

Convertir un workflow en temps réel en un workflow asynchrone

  1. Créez une UpdateRequest pour le workflow.

  2. Définissez la propriété Mode du workflow sur WorkflowMode.Background.

  3. Appelez la méthode Execute en passant la demande de mise à jour en tant que paramètre.

Gestion des erreurs et annulation/restauration

Une activité de workflow qui s’exécute pendant la transaction de base de données et qui transmet une exception à la plateforme annule l’opération principale. Cela entraîne une restauration de l’opération principale si elle s’est déjà produite. S’ajoutent également les plug-ins inscrits pré-événementiels ou post-événementiels ou les workflows en temps réel qui n’ont pas encore été réexécutés. Aucun workflow asynchrone qui est déclenché par le même événement ne s’exécutera.

Si vous incluez une activité (classe TerminateWorkflow) avec l’option annulée dans votre workflow, vous pourrez ajouter un message d’état personnalisé (propriété Reason ) à cette activité contenant une seule ligne de texte à afficher à l’utilisateur dans la boîte de dialogue Erreur du processus d’entreprise.

Si SyncWorkflowLogOnError est défini sur true, les erreurs de workflow en temps réel sont enregistrés dans les enregistrements d’entité ProcessSession.

Mettre en package un workflow en temps réel pour une distribution

Pour distribuer votre workflow de sorte à l’importer dans une organisation Dynamics 365 Customer Engagement (on-premises), ajoutez votre workflow à une solution Dynamics 365 Customer Engagement (on-premises). 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 Conditionner et distribuer des extensions.

Voir aussi

Écrire des workflows pour automatiser les processus d’entreprise
Créer vos propres actions
Pipeline d’exécution des événements
Écrire des plug-ins pour étendre les processus d’entreprise