Практическое руководство. Создание действияHow to: Create an Activity

Действия являются базовой единицей режима работы в WFWF.Activities are the core unit of behavior in WFWF. Логика выполнения действия может быть реализована в управляемом коде или с помощью других действий.The execution logic of an activity can be implemented in managed code or it can be implemented by using other activities. В этом разделе показано создание двух действий.This topic demonstrates how to create two activities. Первое действие - простое действие с использованием кода для реализации логики выполнения.The first activity is a simple activity that uses code to implement its execution logic. Реализация второго действия определяется с помощью других действий.The implementation of the second activity is defined by using other activities. Эти действия используются в следующих шагах учебника.These activities are used in following steps in the tutorial.

Примечание

Чтобы скачать завершенную версию учебника, см. раздел Windows Workflow Foundation (WF45), учебник "Приступая к работе".To download a completed version of the tutorial, see Windows Workflow Foundation (WF45) - Getting Started Tutorial.

Создание проекта библиотеки действийCreate the activity library project

  1. Откройте Visual Studio и выберите New > проекта из файл меню.Open Visual Studio and choose New > Project from the File menu.

  2. В новый проект диалогового окна в разделе установленные категорию Visual C# > рабочего процесса (или Visual Basic > рабочего процесса).In the New Project dialog, under the Installed category, select Visual C# > Workflow (or Visual Basic > Workflow).

    Примечание

    Если вы не видите рабочего процесса Категория шаблона, может потребоваться установить Windows Workflow Foundation компонент Visual Studio.If you don't see the Workflow template category, you may need to install the Windows Workflow Foundation component of Visual Studio. Выберите открыть установщик Visual Studio ссылку в левой части новый проект диалоговое окно.Choose the Open Visual Studio Installer link on the left-hand side of the New Project dialog. В Visual Studio Installer, выберите отдельные компоненты вкладки. Затем в разделе действия разработки категорию Windows Workflow Foundation компонента.In Visual Studio Installer, select the Individual components tab. Then, under the Development activities category, select the Windows Workflow Foundation component. Выберите изменить для установки компонента.Choose Modify to install the component.

  3. Выберите библиотеки действий шаблона проекта.Select the Activity Library project template. Тип NumberGuessWorkflowActivities в имя поле и нажмите кнопку ОК.Type NumberGuessWorkflowActivities in the Name box and then click OK.

  4. Щелкните правой кнопкой мыши Activity1.xaml в обозревателе решений и выберите удалить.Right-click Activity1.xaml in Solution Explorer and choose Delete. Нажмите кнопку ОК для подтверждения.Click OK to confirm.

Создание действия ReadIntCreate the ReadInt activity

  1. Выберите Добавление нового элемента из проекта меню.Choose Add New Item from the Project menu.

  2. В установленные > общих элементов выберите рабочего процесса.In the Installed > Common Items node, select Workflow. Выберите действие кода из рабочего процесса списка.Select Code Activity from the Workflow list.

  3. Тип ReadInt в имя поле и нажмите кнопку добавить.Type ReadInt into the Name box and then click Add.

  4. Замените существующее определение ReadInt следующим определением.Replace the existing ReadInt definition with the following definition.

    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.",
                    "BookmarkName");
            }
    
            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
    

    Примечание

    Действие ReadInt является производным от NativeActivity<TResult>, а не от CodeActivity, которое задается по умолчанию для шаблона действия кода.The ReadInt activity derives from NativeActivity<TResult> instead of CodeActivity, which is the default for the code activity template. CodeActivity<TResult> можно использовать, если действие возвращает один результат, который предоставляется с помощью аргумента Result. Однако CodeActivity<TResult> не поддерживает использование закладок, поэтому используется NativeActivity<TResult>.CodeActivity<TResult> can be used if the activity provides a single result, which is exposed through the Result argument, but CodeActivity<TResult> does not support the use of bookmarks, so NativeActivity<TResult> is used.

Создание действия PromptCreate the Prompt activity

  1. Нажмите клавишу Ctrl+Shift+B для сборки проекта.Press Ctrl+Shift+B to build the project. При сборке проекта включается действие ReadInt, которое будет использоваться для построения пользовательского действия, начиная с этого шага.Building the project enables the ReadInt activity in this project to be used to build the custom activity from this step.

  2. Выберите Добавление нового элемента из проекта меню.Choose Add New Item from the Project menu.

  3. В установленные > общих элементов выберите рабочего процесса.In the Installed > Common Items node, select Workflow. Выберите действия из рабочего процесса списка.Select Activity from the Workflow list.

  4. Тип Prompt в имя поле и нажмите кнопку добавить.Type Prompt into the Name box and then click Add.

  5. Дважды щелкните Prompt.xaml в обозревателе решений чтобы отобразить его в конструкторе, если он еще не отображается.Double-click Prompt.xaml in Solution Explorer to display it in the designer if it is not already displayed.

  6. Нажмите кнопку аргументы в нижнем левом углу конструктора действий для отображения аргументы области.Click Arguments in the lower-left side of the activity designer to display the Arguments pane.

  7. Нажмите кнопку создать аргумент.Click Create Argument.

  8. Тип BookmarkName в имя выберите в из направление стрелку раскрывающегося списка выберите строка из Тип аргумента стрелку раскрывающегося списка и нажмите клавишу ввод чтобы сохранить аргумент.Type BookmarkName into the Name box, select In from the Direction drop-down list, select String from the Argument type drop-down list, and then press Enter to save the argument.

  9. Нажмите кнопку создать аргумент.Click Create Argument.

  10. Тип Result в имя окно, в котором находится под только что добавленного BookmarkName аргумента выберите Out из направление раскрывающемся списке выберите Int32 из тип аргумента стрелку раскрывающегося списка и нажмите клавишу ввод.Type Result into the Name box that is underneath the newly added BookmarkName argument, select Out from the Direction drop-down list, select Int32 from the Argument type drop-down list, and then press Enter.

  11. Нажмите кнопку создать аргумент.Click Create Argument.

  12. Тип Text в имя выберите в из направление стрелку раскрывающегося списка выберите строка из Тип аргумента стрелку раскрывающегося списка и нажмите клавишу ввод чтобы сохранить аргумент.Type Text into the Name box, select In from the Direction drop-down list, select String from the Argument type drop-down list, and then press Enter to save the argument.

    Эти три аргумента связаны с соответствующими аргументами действий WriteLine и ReadInt, которые добавляются к действию Prompt на следующих этапах.These three arguments are bound to the corresponding arguments of the WriteLine and ReadInt activities that are added to the Prompt activity in the following steps.

  13. Нажмите кнопку аргументы в нижнем левом углу конструктора действий, чтобы закрыть аргументы области.Click Arguments in the lower-left side of the activity designer to close the Arguments pane.

  14. Перетащите последовательности действия из поток управления раздел элементов и сбросьте его в Перетащите сюда действие метку Prompt конструктора действий.Drag a Sequence activity from the Control Flow section of the Toolbox and drop it onto the Drop activity here label of the Prompt activity designer.

    Совет

    Если элементов окно не отображается, выберите элементов из представление меню.If the Toolbox window is not displayed, select Toolbox from the View menu.

  15. Перетащите WriteLine действия из примитивы раздел элементов и сбросьте его в Перетащите сюда действие метку Последовательности действия.Drag a WriteLine activity from the Primitives section of the Toolbox and drop it onto the Drop activity here label of the Sequence activity.

  16. Привязать текст аргумент WriteLine действие текст аргумент Prompt действия, введя Text в введите выражение C# или введите выражение VB поле свойства окна, а затем нажмите клавишу вкладке ключ два раза.Bind the Text argument of the WriteLine activity to the Text argument of the Prompt activity by typing Text into the Enter a C# expression or Enter a VB expression box in the Properties window, and then press the Tab key two times. При этом окно элементов списка технологии IntelliSense закрывается, а значение свойства сохраняется посредством перемещения выбора вне свойства.This dismisses the IntelliSense list members window and saves the property value by moving the selection off the property. Это свойство также можно задать, введя Text в введите выражение C# или введите выражение VB поле в самом действии.This property can also be set by typing Text into the Enter a C# expression or Enter a VB expression box on the activity itself.

    Совет

    Если окно "Свойства" не отображается, выберите окно "Свойства" из представление меню.If the Properties Window is not displayed, select Properties Window from the View menu.

  17. Перетащите ReadInt действия из NumberGuessWorkflowActivities раздел элементов и поместите его последовательности действия, чтобы оно следовало WriteLine действия.Drag a ReadInt activity from the NumberGuessWorkflowActivities section of the Toolbox and drop it in the Sequence activity so that it follows the WriteLine activity.

  18. Привязать BookmarkName аргумент ReadInt действие BookmarkName аргумент Prompt действия, введя BookmarkName в введите выражение VB поле справа от BookmarkName аргумента в окно "Свойства", а затем нажмите клавишу Вкладке два раза, чтобы закрыть окно элементов списка IntelliSense и сохранить свойство ключа.Bind the BookmarkName argument of the ReadInt activity to the BookmarkName argument of the Prompt activity by typing BookmarkName into the Enter a VB expression box to the right of the BookmarkName argument in the Properties Window, and then press the Tab key two times to close the IntelliSense list members window and save the property.

  19. Привязать результат аргумент ReadInt действие результат аргумент Prompt действия, введя Result в введите выражение VB поле справа от результат аргумента в окно "Свойства", а затем нажмите клавишу вкладке ключа два раза.Bind the Result argument of the ReadInt activity to the Result argument of the Prompt activity by typing Result into the Enter a VB expression box to the right of the Result argument in the Properties Window, and then press the Tab key two times.

  20. Нажмите клавишу Ctrl+Shift+B для сборки решения.Press Ctrl+Shift+B to build the solution.

Следующие шагиNext steps

Инструкции по созданию рабочего процесса с помощью этих действий см. Далее в этом руководстве, как: Создание рабочего процесса.For instructions on how to create a workflow by using these activities, see the next step in the tutorial, How to: Create a Workflow.

См. такжеSee also