Partager via


Utilisation de la balise de workflow

Windows Workflow Foundation fournit aux concepteurs et aux développeurs une méthode déclarative de créatop, de workflows en utilisant le langage XAML (eXtensible Application Markup Language) pour créer des fichiers source de balisage. Ces fichiers de balisage peuvent être compilés dans un type de workflow, chargés directement dans le moteur d'exécution de workflow au moment de l'exécution, ou encore compilés dans un type de workflow avec fichiers code-behind implémentés en C# ou en Visual Basic. Cela signifie que les fichiers de balisage de workflow peuvent être compilés ou non, en fonction des besoins de l'entreprise et de la nécessité ou non d'appliquer une logique d'implémentation supplémentaire. L'utilisation de balise de workflow avec des fichiers logiques code-behind est semblable à la procédure de séparation, par ASP.NET, des fichiers de présentation et des fichiers logiques.

Pour obtenir un exemple de chargement direct d'un fichier de balisage de workflow dans le moteur d'exécution de workflow, consultez la section Exécution des workflows de la rubrique Création d'une application hôte de workflow.

Outre la création d'un workflow dans la balise de workflow, vous pouvez également utiliser la balise de workflow lorsque vous rendez votre workflow persistant à l'aide d'un service WorkflowPersistenceService ; en effet, lorsque les workflows par programme sont sérialisés avec le WorkflowMarkupSerializer, ils deviennent des balises de workflow. Pour plus d'informations, consultez Comment : sérialiser des workflows et Services de persistance Windows Workflow.

Structure de base

La structure de base de la balise de workflow contient le noeud racine, qui indique le type de workflow, suivi des activités enfants figurant dans ce workflow en tant que sous-éléments imbriqués. La balise de workflow est basée sur un sous-ensemble d'éléments et attributs XAML ; par conséquent, la structure des fichiers de balisage de workflow est semblable à celle d'un fichier XAML. Par exemple, chaque élément du workflow est représenté sous forme de noeuds constitués d'activités composites ou du workflow lui-même. La relation entre les noeuds est la même que lorsque vous créez des workflows via un langage de programmation (tel que C# ou Visual Basic).

Éléments et attributs

Comme indiqué précédemment, chaque élément d'un fichier de balisage de workflow correspond à un composant de workflow. Les noms de ces éléments sont les mêmes que ceux des types d'activité utilisés lorsque vous créez des workflows par programme. Par exemple, l'activité IfElseActivity est représentée par l'élément <IfElseActivity>. Cela s'applique également aux activités personnalisées.

La déclaration de membres d'activité s'effectue comme indiqué dans l'exemple suivant :

<SampleActivity Property1="PropValue" Method="CustomMethod" Event="EventHandlerMethod"/>

Le langage XAML permet également d'insérer le code procédural dans un fichier de balisage de workflow à l'aide de l'élément de directive x:Code. Le code doit être placé dans une section CDATA afin que le compilateur puisse compiler le code au lieu de le considérer comme une balise XAML déclarative. L'exemple suivant illustre l'utilisation de cet élément au sein d'une section CDATA.

<CodeActivity x:Name="codeActivity1" ExecuteCode="methodName1">
  <x:Code><![CDATA[
      void methodName1(object sender, EventArgs e) 
      {
      }
  ]]></x:Code>
</CodeActivity>
NoteRemarque :

L'élément de directive x:Code ne peut être utilisé que dans les fichiers de balisage de workflow compilés.

Le tableau suivant décrit les attributs communs de balise de workflow.

Attribut Description

x:Array

Tableau de types.

x:Class

Nom de la classe de workflow, y compris l'espace de noms. La classe portant ce nom est créée au moment de la compilation du workflow.

x:Name

Nom d'une activité. Correspond à la propriété Activity.Name.

x:Type

Référence de type.

x:Null

Valeur null.

xmlns:x

Espace de noms du schéma XAML.

xmlns

Espace de noms du schéma du XAML du workflow.

NoteRemarque :

Si vous utilisez un fichier de balisage non compilé XAML pour créer un workflow, l'attribut x:Class ne doit pas figurer dans le fichier XAML. Cet attribut n'est valide que lorsque le workflow est compilé.

NoteRemarque :

Si l'espace de noms racine d'une application VB est modifié après la création d'un fichier de balisage de workflow, l'attribut x:Class de ce workflow doit également être mis à jour.

Exemple

Les éléments suivants constituent un exemple de fichier de balisage de workflow utilisé avec un fichier code-behind qui contient la logique d'implémentation des différents gestionnaires d'événements du workflow.

<SequentialWorkflowActivity x:Class="XAMLWorkflow.Workflow1" x:Name="Workflow1" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/workflow">
    <IfElseActivity x:Name="ifElseActivity1">
        <IfElseBranchActivity x:Name="ifElseBranchActivity1">
            <IfElseBranchActivity.Condition>
                <CodeCondition Condition="EvalCondition" />
            </IfElseBranchActivity.Condition>
            <CodeActivity x:Name="codeActivity1" ExecuteCode="codeActivity1_ExecuteCode" />
            <FaultHandlersActivity x:Name="faultHandlersActivity1">
                <FaultHandlerActivity x:Name="faultHandlerActivity1" Fault="{ActivityBind Workflow1,Path=faultHandlerProp}" FaultType="{x:Type System.NullReferenceException}">
                    <CodeActivity x:Name="codeActivity3" ExecuteCode="codeActivity3_ExecuteCode" />
                </FaultHandlerActivity>
            </FaultHandlersActivity>
        </IfElseBranchActivity>
        <IfElseBranchActivity x:Name="ifElseBranchActivity2">
            <CodeActivity x:Name="codeActivity2" ExecuteCode="codeActivity2_ExecuteCode" />
        </IfElseBranchActivity>
    </IfElseActivity>
</SequentialWorkflowActivity>

Vous devez implémenter les gestionnaires d'événements Condition et ExecuteCode pour que cet exemple soit compilé avec succès, comme dans l'exemple suivant :

Private Sub EvalCondition(ByVal sender As Object, ByVal e As ConditionalEventArgs)End Sub
Private Sub codeActivity1_ExecuteCode(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Private Sub codeActivity2_ExecuteCode(ByVal sender As Object, ByVal e As EventArgs)
End Sub
private void EvalCondition(object sender, ConditionalEventArgs e) { }
private void codeActivity1_ExecuteCode(object sender, EventArgs e) { }
private void codeActivity2_ExecuteCode(object sender, EventArgs e) { }
NoteRemarque :

Si vous utilisez un fichier de balisage non compilé XAML pour créer un workflow, vous devez utiliser l'extension de balisage ActivityBind pour définir toutes les propriétés de dépendance de type gestionnaire d'événements ; sinon, elles ne seront pas appelées lors de l'exécution. Consultez l'exemple ci-dessous :

<CodeActivity x:Name="codeActivity1" ExecuteCode="{ActivityBind Name=Activity12, Path=codeActivity1_ExecuteCode}" />

Voir aussi

Référence

System.Windows.Markup

Concepts

Utilisation d'activités personnalisées avec la balise de workflow
Utilisation de règles avec une balise de workflow
Comment : sérialiser des workflows
Vue d'ensemble de la sérialisation

Autres ressources

Markup Samples
Développement de workflows

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.