Рекомендации по созданию настраиваемых действий в Service Manager Authoring ToolGuidelines for creating custom activities in the Service Manager Authoring Tool

Важно!

Эта версия Service Manager достигла конца поддержки, рекомендуется выполнить обновление до Service Manager 2019.This version of Service Manager has reached the end of support, we recommend you to upgrade to Service Manager 2019.

Service Manager автоматизирует разнообразные ИТ-процессы.Service Manager automates a variety of information technology (IT) processes. Например, для процесса управления инцидентами Service Manager включает в себя различные автоматизированные шаги, например автоматические уведомления для пользователей при создании инцидентов или их устранении и автоматическую маршрутизацию инцидентов в различные очереди на основе классификации.For the Incident Management process, for example, Service Manager includes various automated steps, such as automated notifications to users when incidents are created or resolved and automatic routing of incidents to various queues, based on categorization. Данная автоматизация реализуется при помощи рабочих процессов, определенных для различных решений и использует функции Windows Workflow Foundation (WF) для описания, выполнения и отслеживания автоматизированных операций.This automation is implemented by using workflows that are defined for the various solutions, and it uses Windows Workflow Foundation (WF) capabilities to describe, execute, and track the automated operations.

Клиенты и партнеры могут расширить стандартную автоматизацию, определяя новые рабочие процессы и добавляя их в общий процесс.Customers and partners can extend the included automation by defining new workflows and adding them into a process. Рабочие процессы могут быть запланированы выполняться с определенным графиком или при соблюдении определенного условия в базе данных (например, при создании инцидента или при его переходе в определенное состояние, такое как Активный или Разрешен).Workflows can be set to occur on a fixed schedule or on a specified condition occurring in the database, for example, when an incident is created or when it changes to a specified state, such as Active or Resolved.

Service Manager Authoring Tool предоставляет простой в использовании метод создания новых рабочих процессов.The Service Manager Authoring Tool provides an easy-to-use method of creating new workflows. Он предоставляет библиотеку различных действий рабочего процесса, таких как "Создание инцидента" и "Обновление инцидента", а также использующий операцию перетаскивания графический конструктор, который можно использовать для упорядочивания этих действий в последовательности рабочего процесса.It provides a library of different workflow activities, such as creating an incident or updating an incident, and a drag-and-drop graphical designer that you can use to arrange these workflow activities into a workflow sequence. Затем средство Authoring Tool компилирует новый рабочий процесс в набор определений, кода и содержимого пакетов управления.The Authoring Tool then compiles the new workflow into a set of definitions, code, and management pack content. Когда эта информация импортируется в Service Manager, она интегрирует новый рабочий процесс в указанное решение.When this information is imported into Service Manager, it integrates the new workflow into the specified solution.

Понимание того, что происходит в фоновом средстве разработки, может помочь более опытным пользователям.Understanding what is going on behind the scenes of the Authoring Tool can benefit more advanced users. Во-первых, клиенты и партнеры могут использовать эти сведения для расширения библиотеки действий рабочего процесса в Service Manager с действиями рабочего процесса, которые применяются к их конкретным процессам.First, customers and partners can use this information to extend the workflow activity library in Service Manager with workflow activities that apply to their specific processes. Во-вторых, разработчики могут использовать эти сведения для создания пользовательских или расширенных рабочих процессов, совместимых с Service Manager, с помощью соответствующего средства разработки, например системы разработки Microsoft Visual Studio.Secondly, developers can use this information to build custom or advanced workflows that are compatible with Service Manager by using their development tool of choice, such as the Microsoft Visual Studio development system.

Действия рабочего процесса и класс WorkflowActivityBaseWorkflow activities and the WorkflowActivityBase class

Рабочие процессы Service Manager используют действия WF.Service Manager workflows use WF activities. Для плавной работы с инструментом Authoring Tool эти действия являются производными от базового класса WorkflowActivityBase, который принадлежит пространству имен Microsoft. EnterpriseManagement. Workflow. Common .To work smoothly with the Authoring Tool, these activities derive from the base class WorkflowActivityBase, which belongs to the Microsoft.EnterpriseManagement.Workflow.Common namespace. Базовый класс WorkflowActivityBase представляет свойства и методы, недоступные в универсальном базовом классе Activity для действий WF.The WorkflowActivityBase base class introduces properties and methods that are not available in the generic Activity base class for WF activities. Дополнительные сведения об определении действий WF с помощью базового класса универсального действия см. в разделе класс действия.For more information about how to define WF activities by using the generic Activity base class, see Activity Class.

Преимущества использования класса WorkflowActivityBaseBenefits of using the WorkflowActivityBase class

Пользователи могут импортировать действия WF из библиотеки действий Visual Studio, а также работать с этими действиями на панелисоздания средств разработки.Users can import WF activities from the Visual Studio activity library, and they can work with those activities in the Authoring ToolAuthoring pane. Однако эти действия демонстрируют такое же поведение, как в проектировочной среде Visual Studio.However, those activities behave in the same way as they do in the Visual Studio Design environment. Они не имеют настроек, встроенных в библиотеку действий Service Manager.They do not have the customizations that are built into the Service Manager activity library.

Примечание

Не все действия Visual Studio WF были протестированы на совместимость с инструментом Authoring Tool, и некоторые действия WF Visual Studio могут работать неправильно в средстве Authoring Tool.Not all Visual Studio WF activities have been tested for compatibility with the Authoring Tool, and some Visual Studio WF activities might not run correctly in the Authoring Tool.

В представленной ниже таблице перечислены различия в поведении действий WF, основанных на базовом классе WorkflowActivityBase и действий WF, основанных на универсальном базовом классе Activity .The following table lists the differences in behavior between WF activities that are based on the WorkflowActivityBase base class and WF activities that are based on the generic Activity base class.

СценарийScenario Действие WF средства Authoring Tool (базовый классWorkflowActivityBase )Authoring Tool WF activity (WorkflowActivityBase base class) Действие WF из Visual Studio (базовый классActivity )Visual Studio WF activity (Activity base class)
Пользователь привязывает свойства действия (для Service Manager свойств объекта или свойств из других действий).User binds activity properties (to Service Manager object properties or to properties from other activities). Вызывает диалоговое окно привязать свойство к , настроенное для Service Manager пользователей.Calls the Bind property to dialog box that is customized for Service Manager users. Вызывает диалоговое окно Привязать свойство к , предназначенное для разработчиков.Calls the Bind property to dialog box that is intended for developers.
Пользователь добавляет действие к действию Петля For-Each .User adds the activity to a For-Each Loop activity. Добавляет свойства Propertytobind (индекс петли) и CurrentItem, необходимые для участия в операциях петли (CurrentItem является внутренним свойством).Adds the properties Propertytobind (the loop index) and CurrentItem, which are required to take part in loop-specific operations (CurrentItem is an internal property). Ведет себя одинаково при каждой итерации петли и не взаимодействует со свойством, индексирующим петлю.Behaves in the same way for each iteration of the loop, and does not interact with the property that indexes the loop.

Важно!

Из-за настроек, необходимых для конструктора рабочих процессов средства Authoring Tool, действия, основанные на классе WorkFlowActivityBase , не работают должным образом в среде разработки рабочих процессов Visual Studio.Because of the customizations that are required for the Authoring Tool workflow designer, activities that are based on the WorkFlowActivityBase class do not function as expected in the Visual Studio workflow design environment.

Пользователи могут создавать настраиваемые действия WF в Visual Studio для использования в средстве Authoring Tool.Users can build custom WF activities in Visual Studio for use in the Authoring Tool. Однако, чтобы воспользоваться преимуществами пользовательского поведения средства разработки, пользовательские действия должны основываться на классе WorkflowActivityBase , а не на классе Activity .However, to take advantage of the custom design-time behavior of the Authoring Tool, custom activities must be based on the WorkflowActivityBase class instead of the Activity class.

Действия рабочего процесса и автоматические действия Service ManagerWorkflow activities and Service Manager automated activities

Действия WF могут взаимодействовать с другим типом действия, Service Manager действиями, которые используются Service Manager рабочими элементами.WF activities can interact with a different type of activity, the Service Manager activities that are used by Service Manager work items. Рабочие элементы являются одним из основных типов объектов, которые Service Manager использует.Work items are one of the main types of objects that Service Manager uses. Рабочие элементы используются для отслеживания рабочих единиц, таких как Инциденты, Запросы на обслуживание, Запросы на изменениеи пр.Work items track units of work, such as Incidents, Service Requests, Change Requests, and other units of work. Большинство рабочих элементов состоит из одного или нескольких действий Service Manager.Most work items comprise one or more Service Manager activities. Например, Запрос на изменение обычно содержит не менее двух действий: Проверка и Выполнение изменения .For example, a Change Request typically includes at least two activities: a Review activity and a Change Execution activity. Рабочий элемент обычно выполняет эти операции по порядку.The work item typically executes these activities in order.

При создании рабочего элемента первое действие Service Manager становится активным и остается активным, пока Service Manager (или пользователь) выполняет любую работу, которую представляет действие.When a work item is created, the first Service Manager activity becomes active and remains active while Service Manager (or the user) carries out whatever work the activity represents. После завершения этой работы Service Manager помечает первое действие как завершенное и активирует следующее действие в последовательности.When that work finishes, Service Manager marks the first activity as Completed and activates the next activity in the sequence. Когда завершающее действие в последовательности помечается как завершенное, Service Manager помечает весь рабочий элемент как завершенный.When the final activity in the sequence is marked as Completed, Service Manager marks the entire work item as Completed.

Некоторые Service Manager действия могут выполняться вручную, например действие проверки запроса на изменение.Some Service Manager activities can be executed manually, such as the Review activity of a Change Request. Другие действия Service Manager могут быть автоматизированы, например действие, которое отправляет пользователю сообщение электронной почты.Other Service Manager activities can be automated, such as an activity that sends an email to a user. Действие Выполнение изменения****запроса на изменение может быть автоматизировано.The Change Execution activity of a Change Request can be automated. Service Manager использует рабочие процессы WF для автоматизации Service Manager действий.Service Manager uses WF workflows to automate Service Manager activities.

Пример. действие "задать состояние действия" для "завершено"Example: The Set Activity Status to Completed activity

В этом примере действия рабочего процесса WF в Service Manager используется действие WF " задать состояние действия ".This example of a WF workflow activity in Service Manager uses the Set Activity Status to Completed WF activity. Это действие WF обычно представляет последний шаг в рабочем процессе, который реализует автоматическое действие Service Manager и устанавливает состояние этого действия в значение завершено.This WF activity typically represents the last step in a workflow that implements an automated Service Manager activity, and it sets the status of that activity to Completed. Установка данного статуса заставляет систему перейти к следующему действию в рабочем элементе, и данный процесс повторяется до тех пор, пока не будет выполнено последнее действие в рабочем элементе.Setting this status triggers the system to move to the next activity in the work item, and this process repeats until the last activity in the work item is completed.

Действие Назначить действию состояние "выполнено " принимает один вход, идентификатор действия, который определяет действие Service Manager, которое необходимо выполнить. Затем действие WF подключается к серверу управления Service Manager, получает указанное действие Service Manager из базы данных, устанавливает для его состояния значение Completed, а затем сохраняет его обратно в базу данных.The Set Activity Status to Completed activity takes one input, Activity ID, which identifies the Service Manager activity on which to act. The WF activity then connects to the Service Manager management server, retrieves the specified Service Manager activity from the database, sets its status to Completed, and then saves it back to the database. Большинство примеров кода, включенных в данный пример, взяты из файла SetActivityStatusToCompleted.cs — базового файла, описывающего действие Назначить действию состояние "Выполнено" .Most of the code samples that are included in this example come from the SetActivityStatusToCompleted.cs file, an underlying file that describes the Set Activity Status to Completed activity.

Инициализация примера действия WFInitialize the example WF activity

Первый раздел файла SetActivityStatusToCompleted.cs содержит операторы декларации и инициализации.The first section of the SetActivityStatusToCompleted.cs file contains the declaration and initialization statements. Данное действие основано на классе WorkflowActivityBase , оно использует проверяющий класс SetActivityStatusToCompletedValidator и проектный класс WorkflowActivityBaseDesigner.This activity is based on the WorkflowActivityBase class, and it uses the validator class SetActivityStatusToCompletedValidator and the designer class WorkflowActivityBaseDesigner.

Класс WorkflowActivityBaseDesigner содержит настройки, описанные в предыдущем разделе ("Преимущества использования класса WorkflowActivityBase").The WorkflowActivityBaseDesigner class contains the customizations that are described in the previous section, "Benefits of Using the WorkflowActivityBase Class." Этот класс поддерживает дальнейшее расширение и настройку.You can further extend and customize this class.

Первый раздел определения данного образца действия содержит следующий код:The first section of the activity definition for this example activity includes the following code:

namespace Microsoft.ServiceManager.WorkflowAuthoring.ActivityLibrary
{
    // ---------------------------------------------------------------------
    /// <summary>
    /// Activity to set an activity's status to complete
    /// </summary>
    // ---------------------------------------------------------------------
    [ToolboxItem(typeof(ActivityToolboxItem))]
    [ActivityValidator(typeof(Validators.SetActivityStatusToCompletedValidator))]
    [Designer(typeof(WorkflowActivityBaseDesigner))]
    public sealed partial class SetActivityStatusToCompleted : WorkflowActivityBase
    {

Входные свойства для примера действия WFInput properties for the example WF activity

Код объявляет одно свойство, ActivityId, как свойство зависимостей.The code declares one property, ActivityId, as a dependency property. Это означает, что данное свойство может быть привязано к параметрам, определенным на уровне рабочего процесса.This means that this property can be bound to parameters that are defined at the workflow level. В этом случае идентификатор действия Service Manager передается в рабочий процесс в качестве параметра рабочего процесса и помещается в это действие в качестве входных данных.In this case, the ID of the Service Manager activity is passed in to the workflow as a workflow parameter, and it flows into this activity as an input.

  // --------------------------------------------------------------------------------
  /// <summary>
  /// Dependency Property for ActivityId property
  /// </summary>
  // --------------------------------------------------------------------------------
  public static DependencyProperty ActivityIdProperty =
      DependencyProperty.Register("ActivityId", typeof(String), typeof(SetActivityStatusToCompleted));

  // --------------------------------------------------------------------------------
  /// <summary>
  /// Activity ID
  /// </summary>
  // --------------------------------------------------------------------------------
  [Browsable(true)]
  [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
  public string ActivityId
  {
      get
      {
          return (string)this.GetValue(ActivityIdProperty);
      }
      set
      {
          this.SetValue(ActivityIdProperty, value);
      }
}

Поведение выполнения в примере действия WFExecution behavior in the example WF activity

Метод Execute осуществляет фактическую деятельность данного действия WF.The Execute method does the actual work of this WF activity. В области метода Execute действие WF выполняет следующие операции:Within the scope of the Execute method, the WF activity does the following:

  • Определяет, работает ли оно внутри действия Петля For-Each , и если так, устанавливает соответствующие свойства действия WF.Detects whether it is operating within a For-Each Loop activity, and, if so, sets the appropriate WF activity properties.

  • Подключается к указанному серверу управления Service Manager и создает объект EnterpriseManagementGroup .Connects to the specified Service Manager management server and creates an EnterpriseManagementGroup object.

  • Использует свойство ActivityId для получения идентифицированного действия Service Manager из базы данных.Uses the ActivityId property to get the identified Service Manager activity from the database.

  • Находит определение класса для действия Service Manager, получает свойство Status полученного действия Service Manager и присваивает свойству значение списка завершенных перечислений.Finds the class definition of the Service Manager activity, gets the Status property of the retrieved Service Manager activity, and sets the property to the Completed enumeration list value.

  • Фиксирует изменения в действии Service Manager.Commits the changes to the Service Manager activity.

  • Использует метод TrackData (входит в инфраструктуру WF) для сохранения сведений о наблюдении за выполнением и состоянием действия WF.Uses the TrackData method (part of the WF infrastructure) to log tracking information about the execution and status of the WF activity.

        // --------------------------------------------------------------------------------
        /// <summary>
        /// The execute method will have the implementation to set the activity status to complete.
        /// </summary>
        // --------------------------------------------------------------------------------
        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            try
            {
                // Initialize the current item if the activity contained within the For-Each loop
                base.Execute(executionContext);

                // Validate Parameters
                if (String.IsNullOrEmpty(ActivityId))
                {
                    throw new ArgumentNullException("ActivityId");
                }

                string SMServer = "localhost";

                Guid TaskGuid = new Guid(ActivityId);
                EnterpriseManagementGroup _mg = new EnterpriseManagementGroup(SMServer);

                EnterpriseManagementObject Activity = _mg.EntityObjects.GetObject
                    <EnterpriseManagementObject>(TaskGuid, ObjectQueryOptions.Default);

                ManagementPack SystemMP = _mg.ManagementPacks.GetManagementPack(
                    SystemManagementPack.System);
                ManagementPack ActivityMP = _mg.ManagementPacks.GetManagementPack(
                    Resources.ActivityManagementMP, SystemMP.KeyToken, SystemMP.Version);

                ManagementPackClass activityClass = _mg.EntityTypes.GetClass(
                    Resources.WorkItemActivityClass, ActivityMP);

                ManagementPackProperty status = activityClass.PropertyCollection["Status"];
                ManagementPackEnumeration Completed =
                    _mg.EntityTypes.GetEnumeration("ActivityStatusEnum.Completed", ActivityMP);

                Activity[status].Value = Completed;
                Activity.Commit();
            }
            catch (ArgumentNullException argNullException)
            {
                // Log to Tracking Service
                TrackData(argNullException.ToString());

                throw;
            }
            catch (EnterpriseManagementException mgmtException)
            {
                TrackData(mgmtException.ToString());
                throw;
            }

            return ActivityExecutionStatus.Closed;
        }
    }
}

Поведение проверки в примере действия WFValidation behavior in the example WF activity

Файл SetActivityStatusToCompletedValidator.cs определяет проверочное поведение действия WF.The SetActivityStatusToCompletedValidator.cs file defines the validation behavior of the WF activity. Данное поведение определяет, каким образом конструктор указывает, является ли определение действия WF полным или требуется дополнительно указать одно или несколько входных значений.This behavior defines how the designer indicates whether this WF activity is fully defined or if it still requires one or more inputs to be defined. Средство Authoring Tool указывает на ошибку проверки, аналогичную Visual Studio, с помощью значка красного восклицательного знака (!) в действии рабочего процесса в области разработки .The Authoring Tool indicates a validation error similarly to Visual Studio by using a red exclamation point (!) icon on the workflow activity in the Authoring pane.

namespace Microsoft.ServiceManager.WorkflowAuthoring.ActivityLibrary.Validators
{
    // --------------------------------------------------------------------------------
    /// <summary>
    /// Validator for the SetActivityStatusToCompleted activity
    /// </summary>
    // --------------------------------------------------------------------------------
    internal class SetActivityStatusToCompletedValidator : ActivityValidator
    {
        // --------------------------------------------------------------------------------
        /// <summary>
        /// Validator for the SetActivityStatusToCompleted activity
        /// </summary>
        // --------------------------------------------------------------------------------
        public override ValidationErrorCollection Validate(ValidationManager manager, object obj)
        {
            // Performing default validation
            ValidationErrorCollection errorColl = base.Validate(manager, obj);

            SetActivityStatusToCompleted setActivityStatusToCompletedObj =
                (SetActivityStatusToCompleted)obj;

            // Check if validation is happening during compilation of activity and
            // not during the hosting of an activity
            if (setActivityStatusToCompletedObj.Parent == null)
            {
                return errorColl;
            }

            string propertyName = Common.GetPropertyName(setActivityStatusToCompletedObj);

            // Add validation error if ActivityId is null or empty
            if (setActivityStatusToCompletedObj.ActivityId == null
                &&
                setActivityStatusToCompletedObj.GetBinding(SetActivityStatusToCompleted.ActivityIdProperty) == null
                &&
                String.Compare(propertyName, "ActivityId", false, CultureInfo.InvariantCulture) != 0)
            {
                errorColl.Add(new ValidationError(
                    Resources.SetActivityStatusToCompleted_ActivityId_DesignTimeValidation, 10, false));
            }

            return errorColl;
        }
    }
}

Использование примера действия WF в рабочем процессеUse the example WF activity in a workflow

Действие Назначить действию состояние "выполнено " включено в панель инструментов "действия " по умолчанию средства Authoring Tool.The Set Activity Status to Completed activity is included in the Authoring Tool default Activities Toolbox pane. Дополнительные сведения о добавлении настраиваемых действий в панель элементов действий см. в разделе Установка сборки настраиваемых действий.For more information about adding custom activities to the Activities Toolbox pane, see How to Install a Custom Activity Assembly.

С помощью панели Создание и Настройка средства Authoring Tool можно создавать рабочие процессы способом, аналогичным интерфейсу Visual Studio Workflow Design.You can use the authoring pane of the Authoring Tool to author workflows in a manner that is similar to using the Visual Studio workflow design interface. Однако средство Authoring Tool предоставляет следующие преимущества:However, the Authoring Tool offers the following benefits:

  • Рабочие процессы могут разрабатываться пользователями без навыков разработки, им не придется работать с кодом напрямую.Users without development skills can build workflows; they do not have to work with code directly.

  • Когда пользователь сохраняет рабочий процесс в средстве Authoring Tool, средство создает соответствующий код Visual C# и XOML и компилирует его в DLL-файл.When a user saves a workflow in the Authoring Tool, the tool generates the corresponding Visual C# and XOML code and compiles it into a .dll file. Средство также интегрирует рабочий процесс с пакетом управления, который может напрямую взаимодействовать с Service Manager.The tool also integrates the workflow with a management pack that can interact directly with Service Manager.

Код Visual C# для рабочего процессаVisual C# Code for the workflow

В следующем примере показан код Visual C#, создаваемый средством Authoring Tool для примера рабочего процесса, который использует действие Назначить действию состояние "завершено ".The following sample shows the Visual C# code that the Authoring Tool generates for an example workflow that uses the Set Activity Status to Completed activity. Этот код объявляет простой последовательный рабочий процесс, SetActivityStatusToCompleteWF, имеющий один параметр рабочего процесса — свойство зависимостей ActivityId.This code declares a simple sequential workflow, SetActivityStatusToCompleteWF, that has one workflow parameter, the dependency property ActivityId. Значение ActivityID устанавливается определениями пакета управления, показанными дальше в данном примере.The value of ActivityID is determined by the management pack definitions that are shown later in this example. При выполнении рабочего процесса Service Manager определяет значение и передает его в рабочий процесс.When the workflow runs, Service Manager identifies the value and passes it into the workflow.

namespace WorkflowAuthoring
{
    using System;
    using System.ComponentModel;
    using System.ComponentModel.Design;
    using System.Workflow.ComponentModel.Design;
    using System.Workflow.ComponentModel;
    using System.Workflow.ComponentModel.Serialization;
    using System.Workflow.ComponentModel.Compiler;
    using System.Drawing;
    using System.Collections;
    using System.Workflow.Activities;
    using System.Workflow.Runtime;

    public partial class SetActivityStatusToCompleteWF : System.Workflow.Activities.SequentialWorkflowActivity
    {

        public static DependencyProperty ActivityIdProperty = DependencyProperty.Register("ActivityId", typeof(string), typeof(SetActivityStatusToCompleteWF));

        [System.ComponentModel.DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)]
        [System.ComponentModel.BrowsableAttribute(true)]
        [System.ComponentModel.CategoryAttribute("Misc")]
        public string ActivityId
        {
            get
            {
                return ((string)(this.GetValue(ActivityIdProperty)));
            }
            set
            {
                this.SetValue(ActivityIdProperty, value);
            }
        }
    }
}

Код XOML для рабочего процессаXOML code for the workflow

WF использует формат XOML для некоторых определений рабочего процесса.WF uses the XOML format for some of the workflow definitions. В случае с примером рабочего процесса средство Authoring Tool создает файл SetActivityStatusToCompleteWF. XOML со следующим содержимым:In the case of the example workflow, the Authoring Tool creates the file SetActivityStatusToCompleteWF.xoml with the following content:

<SequentialWorkflowActivity x:Class="WorkflowAuthoring.SetActivityStatusToCompleteWF" x:Name="SetActivityStatusToCompleteWF" xmlns:ns0="clr-namespace:Microsoft.ServiceManager.WorkflowAuthoring.ActivityLibrary;Assembly=Microsoft.ServiceManager.WorkflowAuthoring.ActivityLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/workflow">
<ns0:SetActivityStatusToCompleted ActivityId="{ActivityBind SetActivityStatusToCompleteWF,Path=ActivityId}" x:Name="setActivityStatusToCompleted1" PropertyToBind="{x:Null}" />
</SequentialWorkflowActivity>

SetActivityStatusToCompleteWF.xoml объявляет, что рабочий процесс, SetActivityStatusToCompleteWFвыполняет одно действие — Назначить действию состояние "Выполнено".SetActivityStatusToCompleteWF.xoml declares that the workflow, SetActivityStatusToCompleteWF, runs one workflow activity, Set Activity Status To Completed. У этого действие имеется один входной параметр, ActivityId, получающий свое значение из свойства ActivityId в рабочем процессе.That activity has one input parameter, ActivityId, which gets its value from the ActivityId property of the workflow.

Объявление рабочего процесса и его условия триггера в пакете управленияDeclare the workflow and its trigger condition in a management pack

Service Manager не может использовать изолированный DLL-файл рабочего процесса; Рабочий процесс должен быть интегрирован с пакетом управления.Service Manager cannot use an isolated workflow .dll file; the workflow must be integrated with a management pack. Пакет управления определяет, когда рабочий процесс должен запускаться и какие входные значения использовать.The management pack defines when the workflow should run and what input values to use. В то же время, когда он создает код рабочего процесса и компилирует DLL-файл рабочего процесса, средство Authoring Tool добавляет сведения, связанные с рабочим процессом, в пакет управления.At the same time that it generates the workflow code and compiles the workflow .dll file, the Authoring Tool adds the workflow-related information to a management pack.

Образец рабочего процесса ( SetActivityStatusToCompleteWF) сопоставлен с образцом пакета управления — Woodgrove.AutomatedActivity.AddComputerToGroupMP.xml.The example workflow, SetActivityStatusToCompleteWF, is associated with an example management pack, named Woodgrove.AutomatedActivity.AddComputerToGroupMP.xml. Этот пакет управления расширяет процесс управления изменениями с помощью нового автоматизированного действия Service Manager.This management pack extends the Change Management process with a new automated Service Manager activity. Когда новое действие становится активным в ходе операции управления изменениями, оно активирует рабочий процесс SetActivityStatusToCompleteWF .When the new activity becomes active during a change management operation, it triggers the SetActivityStatusToCompleteWF workflow.

Пакет управления определяет триггер рабочего процесса (при изменении состояния нового действия Service Manager) и определяет значение, используемое для свойства ActivityId (уникальный идентификатор нового действия Service Manager).The management pack defines the trigger of the workflow (when the new Service Manager activity changes state), and it defines the value to use for the ActivityId property (the unique identifier of the new Service Manager activity). При запуске рабочий процесс изменяет состояние нового действия Service Manager на завершено.When the workflow runs, it changes the status of the new Service Manager activity to Completed. Обратите внимание, что в обычном рабочем процессе это был бы последний шаг, следующий за какой-либо задачей, выполняемой другими определенными в рабочем процессе действиями WF.Note that in a normal workflow, this would be the last step following some other task that is performed by other WF activities in the workflow.

Раздел Monitoring в пакете управления содержит определение Rule для рабочего процесса.The Monitoring section of the management pack contains the Rule definition for the workflow. Само определение Rule поделено на две части: элемент DataSource и элемент WriteAction .In turn, the Rule definition has two parts, the DataSource element and the WriteAction element.

В примере рабочего процесса элемент DataSource содержит элемент Subscription , который указывает, что рабочий процесс должен выполняться, когда экземпляр класса AddComputerToGroup (настраиваемый класс Service Manager) меняет состояние на активное.In the case of the example workflow, the DataSource element contains a Subscription element, which specifies that the workflow should run when an instance of the AddComputerToGroup class (a custom Service Manager class) changes state to Active.

<Monitoring>
    <Rules>
        <Rule ID="SetActivityToCompleteRule" Enabled="true" Target="SystemCenterLibrary!Microsoft.SystemCenter.SubscriptionWorkflowTarget" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
            <Category>Notification</Category>
            <DataSources>
                <DataSource ID="DS" TypeID="Subscriptions!Microsoft.SystemCenter.CmdbInstanceSubscription.DataSourceModule">
                    <Subscription>
                        <InstanceSubscription Type="$MPElement[Name='AddComputerToGroup']$">
                            <UpdateInstance><Criteria><Expression><SimpleExpression>
                                <ValueExpression>
                                    <Property State="Post">$Context/Property[Type='Activity!System.WorkItem.Activity']/Status$</Property>
                                </ValueExpression>
                                <Operator>Equal</Operator>
                                <ValueExpression>
                                    <Value>$MPElement[Name='Activity!ActivityStatusEnum.Active']$</Value>
                                </ValueExpression>
                            </SimpleExpression></Expression></Criteria></UpdateInstance>
                        </InstanceSubscription>
                        <StartWatermark>1</StartWatermark>
                        <PollingIntervalInSeconds>60</PollingIntervalInSeconds>
                        <BatchSize>100</BatchSize>
                    </Subscription>
                </DataSource>
            </DataSources>
        </Rule>
    </Rules>
</Monitoring>

Элемент WriteAction (а именно Microsoft.EnterpriseManagement.SystemCenter.Subscription.WindowsWorkflowTaskWriteAction) определяет, что нужно делать при соблюдении условия активации.The WriteAction element (specifically, Microsoft.EnterpriseManagement.SystemCenter.Subscription.WindowsWorkflowTaskWriteAction) defines what to do when the trigger condition is met. В рамках данного элемента элемент Subscription идентифицирует запускаемый файл сборки (SetActivityStatusToCompleteWF.dll) и класс в сборке, представляющий рабочий процесс ( WorkflowTypeName).Within this element, a Subscription element identifies the workflow assembly file to run (SetActivityStatusToCompleteWF.dll) and the class in the assembly that represents the workflow, WorkflowTypeName.

Элемент Subscription также включает элемент WorkflowParameter , который определяет свойство ActivityId и, используя синтаксис $Data/басеманажедентитид $, привязывает его к уникальному идентификатору Service Manager действия, записанного в элементе DataSource .The Subscription element also includes a WorkflowParameter element, which defines the ActivityId property and, using the syntax $Data/BaseManagedEntityId$, binds it to the unique identifier of the Service Manager activity that is recorded in the DataSource element.

Элемент WriteAction также содержит необязательные сведения конфигурации рабочего процесса, например, сколько повторных попыток следует предпринимать при сбое рабочего процесса, насколько часто предпринимать их, а также максимальное количество секунд работы рабочего процесса перед его завершением.The WriteAction element also stores optional configuration details for the workflow, such as how many retries to perform if the workflow fails, how frequently to retry, and the maximum time in seconds that a workflow should run before it is shut off.

<WriteActions>
    <WriteAction ID="WA" TypeID="Subscriptions!Microsoft.EnterpriseManagement.SystemCenter.Subscription.WindowsWorkflowTaskWriteAction">
        <Subscription>
            <WindowsWorkflowConfiguration>
                <AssemblyName>SetActivityStatusToCompleteWF</AssemblyName>
                <WorkflowTypeName>WorkflowAuthoring.SetActivityStatusToCompleteWF</WorkflowTypeName>
                <WorkflowParameters>
                    <WorkflowParameter Name="ActivityId" Type="string">
                        $Data/BaseManagedEntityId$
                    </WorkflowParameter>
                </WorkflowParameters>
                <RetryExceptions></RetryExceptions>
                <RetryDelaySeconds>60</RetryDelaySeconds>
                <MaximumRunningTimeSeconds>300</MaximumRunningTimeSeconds>
            </WindowsWorkflowConfiguration>
        </Subscription>
    </WriteAction>
</WriteActions>

Импорт пакета управленияImport the management pack

Чтобы рабочий процесс выполнялся на определенном сервере управления Service Manager, все файлы, связанные с рабочим процессом, должны находиться на этом сервере.For the workflow to run on a particular Service Manager management server, all of the files that are related to the workflow must reside on that server. Эти файлы включают в себя:These files include the following:

  • Файлы сборки действий WF.The WF activity assembly files. Если вы используете только Service Manager действия WF, по умолчанию устанавливаются соответствующие файлы.If you are using only the Service Manager WF activities, by default, the appropriate files are installed. Если вы используете пользовательские действия, см. статью как установить сборку настраиваемых действий.If you are using custom activities, see How to Install a Custom Activity Assembly.

  • Файл сборки рабочего процесса, в данном случае — SetActivityStatusToCompleteWF.dll.The workflow assembly file, in this case, SetActivityStatusToCompleteWF.dll. Необходимо вручную скопировать этот файл на сервер управления Service Manager.You must manually copy this file to the Service Manager management server.

  • Файл пакета управления, в данном случае — Woodgrove.AutomatedActivity.AddComputerToGroupMP.xml.The management pack file, in this case, Woodgrove.AutomatedActivity.AddComputerToGroupMP.xml. Необходимо вручную скопировать этот файл на сервер управления Service Manager.You must manually copy this file to the Service Manager management server.

Когда все файлы будут установлены, импортируйте пакет управления в Service Manager.When all of the files are in place, import the management pack into Service Manager. Это можно сделать с помощью средства командной строки mpimport.exe или консоли Service Manager.You can do this by using the mpimport.exe command-line tool or the Service Manager console. После импорта пакета управления рабочий процесс готов к выполнению в любой момент — как только будет соблюдено определенное для него активирующее условие.After you have imported the management pack, the workflow is ready to run whenever the condition that is defined as its trigger is met.

Дальнейшие действияNext steps