Sdílet prostřednictvím


Postupy: Vytvoření aktivity

Aktivity jsou základní jednotkou chování ve WF. Logiku provádění aktivity je možné implementovat ve spravovaném kódu nebo ji lze implementovat pomocí jiných aktivit. Toto téma ukazuje, jak vytvořit dvě aktivity. První aktivita je jednoduchá aktivita, která používá kód k implementaci své logiky spouštění. Implementace druhé aktivity je definována pomocí jiných aktivit. Tyto aktivity se používají v následujících krocích v kurzu.

Vytvoření projektu knihovny aktivit

  1. Otevřete Visual Studio a v nabídce Soubor zvolte Nový>projekt.

  2. V dialogovém okně Nový projekt v kategorii Nainstalováno vyberte Visual C#>Workflow (nebo Visual Basic>Workflow).

    Poznámka:

    Pokud kategorii Šablony pracovního postupu nevidíte, možná budete muset nainstalovat komponentu Windows Workflow Foundation sady Visual Studio. Na levé straně dialogového okna Nový projekt zvolte odkaz Otevřít Instalační program pro Visual Studio. V Instalační program pro Visual Studio vyberte kartu Jednotlivé součásti. Potom v kategorii Aktivity vývoje vyberte komponentu Windows Workflow Foundation. Zvolte Změnit a nainstalujte komponentu.

  3. Vyberte šablonu projektu Knihovny aktivit. Zadejte NumberGuessWorkflowActivities do pole Název a klepněte na tlačítko OK.

  4. Klikněte pravým tlačítkem na Activity1.xaml v Průzkumník řešení a zvolte Odstranit. Potvrďte kliknutím na tlačítko OK .

Vytvoření aktivity ReadInt

  1. V nabídce Projekt zvolte Přidat novou položku.

  2. V uzlu Nainstalované>společné položky vyberte Pracovní postup. V seznamu pracovních postupů vyberte aktivitukódu.

  3. Zadejte ReadInt do pole Název a klepněte na tlačítko Přidat.

  4. Nahraďte existující ReadInt definici následující definicí.

    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 ArgumentException("BookmarkName cannot be an Empty string.",
                    "BookmarkName")
            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
    

    Poznámka:

    Aktivita ReadInt je odvozena od NativeActivity<TResult> místo CodeActivity, což je výchozí hodnota pro šablonu aktivity kódu. CodeActivity<TResult> lze použít, pokud aktivita poskytuje jeden výsledek, který je vystaven prostřednictvím argumentu Result , ale CodeActivity<TResult> nepodporuje použití záložek, takže NativeActivity<TResult> se používá.

Vytvoření aktivity Výzvy

  1. Stisknutím kombinace kláves Ctrl+Shift+B sestavte projekt. Sestavení projektu umožňuje ReadInt , aby se aktivita v tomto projektu použila k sestavení vlastní aktivity z tohoto kroku.

  2. V nabídce Projekt zvolte Přidat novou položku.

  3. V uzlu Nainstalované>společné položky vyberte Pracovní postup. V seznamu Pracovních postupů vyberte aktivitu.

  4. Zadejte Prompt do pole Název a klepněte na tlačítko Přidat.

  5. Poklikáním na Prompt.xaml v Průzkumník řešení ho zobrazíte v návrháři, pokud ještě není zobrazen.

  6. Kliknutím na Argumenty v levém dolním rohu návrháře aktivit zobrazte podokno Argumenty .

  7. Klikněte na Vytvořit argument.

  8. Zadejte BookmarkName do pole Název, vyberte V rozevíracím seznamu Směr, v rozevíracím seznamu Typ argumentu vyberte Řetězec a stisknutím klávesy Enter argument uložte.

  9. Klikněte na Vytvořit argument.

  10. Zadejte Result do pole Název, které je pod nově přidaným BookmarkName argumentem, vyberte v rozevíracím seznamu Směr možnost Ven, z rozevíracího seznamu Typ argumentu vyberte Int32 a stiskněte Enter.

  11. Klikněte na Vytvořit argument.

  12. Zadejte Text do pole Název, vyberte V rozevíracím seznamu Směr, v rozevíracím seznamu Typ argumentu vyberte Řetězec a stisknutím klávesy Enter argument uložte.

    Tyto tři argumenty jsou vázány na odpovídající argumenty WriteLine a ReadInt aktivity, které jsou přidány do Prompt aktivity v následujících krocích.

  13. Kliknutím na Argumenty v levém dolním rohu návrháře aktivit zavřete podokno Argumenty .

  14. Přetáhněte aktivitu sekvence z části Tok řízení na panelu nástrojů a přetáhněte ji na popisek aktivity Drop zde v návrháři aktivit výzvy.

    Tip

    Pokud se okno Panel nástrojů nezobrazí, vyberte v nabídce Zobrazení sadu nástrojů.

  15. Přetáhněte aktivitu WriteLine z části Primitives panelu nástrojů a přetáhněte ji na popisek aktivity Drop zde popisek aktivity Sequence.

  16. Vytvořte vazbu textového argumentu aktivity WriteLine s argumentem Text aktivity výzvy zadáním Text do výrazu Enter a C# nebo Zadejte pole výrazu VB v okně Vlastnosti a potom dvakrát stiskněte klávesu Tab. Tím se zavře okno členů seznamu IntelliSense a uloží se hodnota vlastnosti přesunutím výběru mimo vlastnost. Tuto vlastnost lze nastavit také zadáním Text výrazu Enter a C# nebo zadáním pole výrazu VB u samotné aktivity.

    Tip

    Pokud se okno Vlastnosti nezobrazí, v nabídce Zobrazení vyberte oknoVlastnosti.

  17. Přetáhněte aktivitu ReadInt z části NumberGuessWorkflowActivities v sadě nástrojů a přesuňte ji do aktivity Sekvence tak, aby se řídí aktivitou WriteLine.

  18. Vytvořte vazbu argumentu BookmarkName aktivity ReadInt na argument BookmarkName aktivity výzvy zadáním BookmarkName do pole Pro zadání výrazu VB napravo od argumentu BookmarkName v okně Vlastnosti a potom stiskněte klávesu Tab dvakrát zavřete okno členů seznamu IntelliSense a uložte vlastnost.

  19. Vytvořte vazbu argumentu Výsledek aktivity ReadInt s argumentem Výsledek aktivity Výzvy zadáním Result do pole Pro zadání výrazu VB napravo od argumentu Výsledek v okně Vlastnosti a potom stiskněte klávesu Tab dvakrát.

  20. Stisknutím kombinace kláves Ctrl+Shift+B sestavte řešení.

Další kroky

Pokyny k vytvoření pracovního postupu pomocí těchto aktivit najdete v dalším kroku kurzu Postupy: Vytvoření pracovního postupu.

Viz také