Procédure : créer une activité
Les activités sont l'unité principale de comportement dans WF. La logique d'exécution d'une activité peut être implémentée en code managé ou à l'aide d'autres activités. Cette rubrique indique comment créer deux activités. La première activité est une activité simple qui utilise le code pour implémenter la logique d'exécution. L'implémentation de la deuxième activité est définie à l'aide d'autres activités. Ces activités sont utilisées dans les procédures du didacticiel.
Créer le projet de bibliothèque d’activités
Ouvrez Visual Studio et choisissez Nouveau>Projet dans le menu Fichier.
Dans la boîte de dialogue Nouveau projet, sous la catégorie Installé, sélectionnez Visual C#>Workflow (ou Visual Basic>Workflow).
Remarque
Si vous ne voyez pas la catégorie de modèle de Workflow, vous devrez peut-être installer le composant Windows Workflow Foundation de Visual Studio. Cliquez sur le lien Ouvrir Visual Studio Installer dans la partie gauche de la boîte de dialogue Nouveau projet. Dans Visual Studio Installer, sélectionnez l’onglet Composants individuels. Ensuite, sous la catégorie Activités de développement , sélectionnez le composant Windows Workflow Foundation. Choisissez Modifier pour installer le composant.
Sélectionnez le modèle de projet Bibliothèque d’activités . Entrez
NumberGuessWorkflowActivities
dans la zone Nom, puis cliquez sur OK.Cliquez avec le bouton droit sur Activity1.xaml dans l'Explorateur de solutions, puis choisissez Supprimer. Cliquez sur OK pour confirmer.
Créer l’activité ReadInt
Choisissez Ajouter un nouvel élément dans le menu Projet .
Dans le nœud Installé>Éléments communs, sélectionnez Workflow. Sélectionnez Activité du code dans la liste Workflow.
Entrez
ReadInt
dans la zone Nom, puis cliquez sur Ajouter.Remplacez la définition
ReadInt
existante par la définition suivante.public sealed class ReadInt : NativeActivity<int> { [RequiredArgument] public InArgument<string> BookmarkName { get; set; } protected override void Execute(NativeActivityContext context) { string name = BookmarkName.Get(context); if (string.IsNullOrEmpty(name)) { throw new ArgumentException("BookmarkName cannot be an Empty string.", "context"); } context.CreateBookmark(name, new BookmarkCallback(OnReadComplete)); } // NativeActivity derived activities that do asynchronous operations by calling // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext // must override the CanInduceIdle property and return true. protected override bool CanInduceIdle { get { return true; } } void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state) { this.Result.Set(context, Convert.ToInt32(state)); } }
Public NotInheritable Class ReadInt Inherits NativeActivity(Of Integer) <RequiredArgument()> Property BookmarkName() As InArgument(Of String) Protected Overrides Sub Execute(ByVal context As NativeActivityContext) Dim name As String name = BookmarkName.Get(context) If name = String.Empty Then Throw New Exception("BookmarkName cannot be an Empty string.") End If context.CreateBookmark(name, New BookmarkCallback(AddressOf OnReadComplete)) End Sub ' NativeActivity derived activities that do asynchronous operations by calling ' one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext ' must override the CanInduceIdle property and return True. Protected Overrides ReadOnly Property CanInduceIdle As Boolean Get Return True End Get End Property Sub OnReadComplete(ByVal context As NativeActivityContext, ByVal bookmark As Bookmark, ByVal state As Object) Result.Set(context, Convert.ToInt32(state)) End Sub End Class
Notes
L'activité
ReadInt
dérive de NativeActivity<TResult> au lieu de CodeActivity, qui est la valeur par défaut pour le modèle d'activité de code. CodeActivity<TResult> peut être utilisé si l'activité fournit un résultat unique, exposé via l'argument Result, mais CodeActivity<TResult> ne prenant pas en charge l'utilisation de signets, NativeActivity<TResult> est utilisé.
Créer l’activité Prompt
Appuyez sur Ctrl+Maj+B pour générer le projet. La génération du projet permet d'utiliser l'activité
ReadInt
dans ce projet pour générer l'activité personnalisée de cette étape.Choisissez Ajouter un nouvel élément dans le menu Projet .
Dans le nœud Installé>Éléments communs, sélectionnez Workflow. Sélectionnez Activité dans la liste Flux de travail.
Entrez
Prompt
dans la zone Nom, puis cliquez sur Ajouter.Double-cliquez sur Prompt.xaml dans l’Explorateur de solutions pour l’afficher dans le concepteur s’il n’est pas déjà affiché.
Cliquez sur Arguments dans la partie inférieure gauche du concepteur d'activités pour afficher le volet Arguments.
Cliquez sur Créer un argument.
Tapez
BookmarkName
dans la zone Nom , sélectionnez Entrée dans la liste déroulante Direction , sélectionnez Chaîne dans la liste déroulante Type d’argument, puis appuyez sur Entrée pour enregistrer l’argument.Cliquez sur Créer un argument.
Tapez
Result
dans la zone Nom située sous l’argumentBookmarkName
nouvellement ajouté, sélectionnez Out dans la liste déroulante Direction, sélectionnez Int32 dans la liste déroulante Type d’argument, puis appuyez sur Entrée.Cliquez sur Créer un argument.
Tapez
Text
dans la zone Nom , sélectionnez Entrée dans la liste déroulante Direction , sélectionnez Chaîne dans la liste déroulante Type d’argument, puis appuyez sur Entrée pour enregistrer l’argument.Ces trois arguments sont liés aux arguments correspondants des activités WriteLine et
ReadInt
ajoutées à l'activitéPrompt
dans les étapes suivantes.Cliquez sur Arguments dans la partie inférieure gauche du concepteur d'activités pour fermer le volet Arguments.
Faites glisser une activité Sequence de la section Organigramme de la Boîte à outils et déposez-la sur l'étiquette Déposer l'activité ici du concepteur de workflow Prompt.
Conseil
Si la fenêtre Boîte à outils ne s'affiche pas, sélectionnez Boîte à outils dans le menu Afficher.
Faites glisser une activité WriteLine à partir de la section Primitives de la Boîte à outils et déposez-la sur l’étiquette Déposer l'activité ici de l’activité Séquence.
Liez l’argument Text de l’activité WriteLine à l’argument Text de l’activité Prompt en tapant
Text
dans l’expression Entrer une expression C# ou Entrer une zone d’expression VB dans la fenêtre Propriétés, puis appuyez deux fois sur la touche de tabulation. Cela ferme la fenêtre de liste des membres IntelliSense et enregistre la valeur de propriété en déplaçant la sélection en dehors de la propriété. Cette propriété peut également être définie en tapantText
dans la zone Entrer une expression C# ou Entrer une zone d’expression VB sur l’activité elle-même.Conseil
Si la fenêtre Propriétés ne s’affiche pas, sélectionnez Fenêtre Propriétés dans le menu Afficher.
Faites glisser une activité ReadInt à partir de la section NumberGuessWorkflowActivities de la Boîte à outils et déposez-la dans l’activité Séquence afin qu’elle suive l’activité WriteLine.
Liez l’argument BookmarkName de l’activité ReadInt à l’argument BookmarkName de l’activité Invite en tapant
BookmarkName
dans la zone Entrer une expression VB à droite de l’argument BookmarkName dans la fenêtre Propriétés, puis appuyez deux fois sur la touche de tabulation pour fermer la fenêtre des membres de la liste IntelliSense et enregistrer la propriété.Liez l’argument Result de l’activité ReadInt à l’argument Result de l’activité Prompt en tapant
Result
dans la zone Entrer une expression VB à droite de l’argument Result dans la fenêtre Propriétés, puis appuyez deux fois sur la touche de tabulation.Appuyez sur Ctrl+Maj+B pour générer la solution.
Étapes suivantes
Pour obtenir des instructions sur la procédure de création d'un workflow à l'aide de ces activités, consultez l'étape suivante du didacticiel, Procédure : créer un workflow.