Workflow Reflection Utility, exemple
L'utilitaire de réflexion de workflow est un outil extensible permettant d'extraire des informations liées à un workflow depuis un assembly. La hiérarchie de chaque workflow, les règles déclaratives et les services locaux requis sont affichés dans une arborescence. Cela facilite la navigation dans la structure du workflow compilé. En outre, chaque workflow de l'assembly peut être affiché au format XAML dans le Bloc-notes ou sur une aire de conception réhébergée. Enfin, un évaluateur de règles déclaratives basé sur la substitution permet à l'utilisateur d'effectuer une analyse hypothétique des expressions contenues.
Utilisation de l'exemple
Suivez ces étapes pour générer, exécuter et configurer l'exemple.
Pour générer l'exemple
Téléchargez l'exemple en cliquant sur Télécharger l'exemple dans cette rubrique.
L'exemple de projet est alors extrait sur votre disque dur local.
Cliquez sur Démarrer, pointez sur Programmes, puis sur Microsoft Windows SDK et cliquez sur Environnement de commande.
Accédez au répertoire source de l'exemple.
À l'invite de commandes, tapez MSBUILD <Nom du fichier solution>.
Pour exécuter l'exemple
- Dans la fenêtre Invite de commandes du Kit de développement SDK, exécutez le fichier .exe dans le dossier WorkflowReflectionUtility\bin\debug, situé sous le dossier principal de l'exemple.
Pour charger un assembly dans l'utilitaire de réflexion de workflow :
Lancez le programme WorkflowReflectionUtility.exe
Dans le menu Fichier, sélectionnez Ouvrir.
Sélectionnez l'assembly qui contient le contenu de workflow que vous souhaitez explorer, puis cliquez sur Ouvrir.
Lorsque l'assembly est chargé, parcourez l'arborescence en développant les nœuds.
Certains nœuds comportent des menus contextuels. C'est le cas de WorkflowNode, qui prend en charge la consultation au format XAML dans le Bloc-notes ou l'affichage du workflow sur une aire de conception réhébergée.
Fichier de configuration
L'utilitaire de réflexion de workflow est contrôlé par un fichier de configuration de l'application. Ce fichier contient une section WorkflowReflectionUtilitySection, qui ajoute un ou plusieurs objets ReflectionComponent à la collection de composants. S'il manque le fichier de configuration, l'utilitaire revient à une version programmatique codée en dur du fichier configuration par défaut.
Par défaut, l'utilitaire de réflexion de workflow est configuré pour afficher tous les workflows contenus dans l'assembly. Pour chaque workflow, il affiche toutes les règles déclaratives, toutes les interfaces DataExchangeService utilisées, ainsi que la hiérarchie des activités. L'évaluateur d'expressions de règles basé sur la substitution est accessible via le menu contextuel pour les nœuds de l'arborescence de règles déclaratives. Vous pouvez accéder aux modes concepteur et XAML en utilisant le menu contextuel pour les nœuds de l'arborescence de workflow.
Configuration par défaut
Voici la configuration par défaut :
<configuration>
<configSections>
<section name="WorkflowReflectionUtilitySettings" type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowReflectionUtilitySection, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</configSections>
<WorkflowReflectionUtilitySettings showAssemblyResolveExplanation="true">
<components>
<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.AssemblyComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RuleComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.XomlContextMenuComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RequiredServiceInterfacesComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RuleEvaluatorComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowDesignerViewComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowActivitiesComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</components>
</WorkflowReflectionUtilitySettings>
</configuration>
Extensibilité
L'utilitaire de réflexion de workflow a été conçu à des fins d'extensibilité. Pour ajouter davantage de fonctionnalités à cet outil, vous devez ajouter un nouveau composant dérivé de WorkflowReflectionComponent qui contient deux méthodes abstraites :
public abstract void Initialize(InitializationContext context);
public abstract void PerformReflection(ReflectionContext context);
Méthode Initialize
La méthode Initialize est appelée lors du lancement de l'utilitaire. Elle permet au composant de se configurer pour s'exécuter au moment de la réflexion. InitializationContext.AddChild est utilisé pour ajouter le composant actuel comme enfant de certains types de composants existants. Après l'initialisation, les appels à cette méthode génèrent une arborescence de composants qui représente les étapes prises pour effectuer la réflexion sur l'assembly. Par exemple, AssemblyComponent s'ajoute comme enfant de RootComponent, tandis que WorkflowComponent s'ajoute comme enfant d'AssemblyComponent. Cela crée la structure d'appel suivante au moment de la réflexion : Racine > Assembly > Workflow. Il n'existe aucune limite quant au nombre d'enfants qu'un composant peut avoir. Il n'existe aucune limite au nombre de parents pouvant être ajoutés à un composant enfant particulier.
InitializationContext.AddImage est utilisé pour ajouter une image à la liste de celles qui peuvent être affichées dans l'arborescence. Chaque image est mise en cache selon le type de propriétaire et le nom de chaîne. Ces deux valeurs sont utilisées comme clés pour récupérer l'index ImageList pour l'image au moment de la réflexion.
Méthode PerformReflection
La méthode PerformReflection est utilisée pour effectuer le travail proprement dit lorsqu'un assembly est chargé. ReflectionContext fournit au composant des accesseurs pour l'assembly, le nœud d'arborescence actuel et l'arborescence entière. En outre, ReflectionContext fournit des méthodes pour obtenir tous les composants enfants, obtenir des index d'image mis en cache précédemment et créer un contexte cloné.
À titre d'exemple, nous pouvons explorer RuleComponent. RuleComponent s'ajoute comme enfant de WorkflowComponent et ajoute une image mise en cache au moment de l'initialisation. Au moment de la réflexion, le composant accède au nœud de l'arborescence actuel (lequel est un WorkflowNode) afin d'obtenir le type de workflow. Il se reflète alors sur ce type pour rechercher toutes les règles déclaratives et ajouter des nœuds pour chacune d'entre elles. Pour chaque nœud ajouté, il appelle la méthode WorkflowReflectionComponent.InvokeChildComponents avec un ReflectionContext cloné qui contient le nœud de règle nouvellement ajouté.
Ce modèle général peut être utilisé pour ajouter des menus contextuels aux nœuds, modifier le texte des nœuds, réorganiser les nœuds et ajouter des nœuds enfants. Pour obtenir des exemples et des informations supplémentaires, consultez le fichier OutOfBoxComponents.cs.
Configuration du nouveau composant
Les nouveaux composants doivent être ajoutés au fichier de configuration pour pouvoir être exécutés. Pour connaître la structure complète du fichier de configuration, consultez la section "Fichier de configuration" dans cette rubrique.
Le nouveau nœud composant ressemble à ce qui suit :
<add type="[AssemblyQualifiedName of component]"/>
Par exemple :
<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.AssemblyComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
Voir aussi
Autres ressources
Exemples d'applications
Exemples de Windows Workflow Foundation
Copyright ©2007 par Microsoft Corporation. Tous droits réservés.