Options pour la création d'activités dans WF
.NET Framework 4.6.1 fournit plusieurs options pour créer des activités personnalisées. Le choix de la méthode à utiliser pour créer une activité donnée dépend de quelles fonctionnalités d’exécution sont nécessaires.
Choix de la classe d'activité de base à utiliser pour créer des activités personnalisées
Le tableau suivant répertorie les fonctionnalités disponibles dans les classes de base d'activités personnalisées.
Classe d'activité de base | Fonctionnalités disponibles |
---|---|
Activity | Compose des groupes d'activités fournies par le système et personnalisées dans une activité composite. |
CodeActivity | Implémente les fonctionnalités impératives en fournissant une méthode Execute qui peut être remplacée. Donne également accès au suivi, aux variables et aux arguments. |
NativeActivity | Fournit toutes les fonctionnalités de CodeActivity, plus celles nécessaires pour abandonner l'exécution d'une activité, annuler l'exécution d'une activité enfant, utiliser des signets, ainsi que planifier des activités, des actions d'activité et des fonctions. |
DynamicActivity | Fournit une approche DOM pour créer des activités qui servent d'interface avec le concepteur WF et les fonctionnalités d'exécution via ICustomTypeDescriptor, ce qui permet de créer d'autres activités sans définir de nouveaux types. |
Création d'activités à l'aide d'Activity
Les activités qui dérivent de Activity composent les fonctionnalités en assemblant d'autres activités existantes. Ces activités peuvent être des activités personnalisées existantes et des activités de la bibliothèque d’activités .NET Framework 4.6.1. Assembler ces activités est la méthode la plus simple pour créer des fonctionnalités personnalisées. Cette approche est généralement utilisée pour la création de workflows dans un environnement de conception visuelle.
Activités de création à l'aide de CodeActivity ou AsyncCodeActivity
Les activités qui dérivent de CodeActivity ou AsyncCodeActivity peuvent implémenter les fonctionnalités impératives en remplaçant la méthode Execute par un code impératif personnalisé. Le code personnalisé est exécuté lorsque l'activité est exécutée par le runtime. Les activités créées de cette façon ont accès aux fonctionnalités personnalisées, mais elles n’ont pas accès à toutes les fonctionnalités d’exécution, notamment celles offrant un accès total à l’environnement d’exécution, la capacité de planifier des activités enfants, la création de signets ou la prise en charge des méthodes Cancel ou Abort. Lorsqu'un CodeActivity est exécuté, il a accès à une version réduite de l'environnement d'exécution (via la classe CodeActivityContext ou AsyncCodeActivityContext). Les activités créées à l'aide de CodeActivity ont accès à la résolution des arguments et des variables, aux extensions et au suivi. La planification d'activités asynchrones peut être réalisée à l'aide de AsyncCodeActivity.
Création d'activités à l'aide de NativeActivity
Les activités qui dérivent de NativeActivity, comme celles qui dérivent de CodeActivity, créent des fonctionnalités impératives en remplaçant la méthode Execute, mais elles ont également accès à toutes les fonctionnalités d'exécution de workflow via le contexte NativeActivityContext passé dans la méthode Execute. Ce contexte prend en charge la planification et l'annulation des activités enfants, l'exécution des objets ActivityAction et objets ActivityFunc<TResult>, la circulation des transactions dans un workflow, l'appel de processus asynchrones, l'annulation et l'abandon de l'exécution, l'accès aux propriétés d'exécution et aux extensions, ainsi que l'utilisation des signets (descripteurs pour reprendre les workflows mis en pause).
Création d'activités à l'aide de DynamicActivity
Contrairement aux trois autres types d'activité, les nouvelles fonctionnalités ne sont pas créées en dérivant de nouveaux types de DynamicActivity (la classe est scellée), mais plutôt en assemblant les fonctionnalités dans les propriétés Properties et Implementation à l'aide d'un modèle DOM (Document Object Model) de l'activité.
Création d'activités qui retournent un résultat
De nombreuses activités doivent retourner un résultat après leur exécution. Pour ce faire, il est possible de toujours définir un OutArgument<T> personnalisé sur une activité ; il est néanmoins recommandé d'utiliser à la place Activity<TResult>, ou de dériver de CodeActivity<TResult> ou NativeActivity<TResult>. Chacune de ces classes de base a un OutArgument<T> nommé Result (Résultat) que votre activité peut utiliser comme valeur de retour. Les activités qui retournent un résultat ne doivent être utilisées que si un seul résultat doit être retourné à partir d'une activité ; si plusieurs résultats doivent être retournés, des membres OutArgument<T> distincts doivent être utilisés à la place.