Практическое руководство. Создание и развертывание действий рабочих процессов в изолированных решениях

В данном разделе рассматривается создание и развертывание настраиваемого действия рабочего процесса в решении для песочницы.

Дата последнего изменения: 13 апреля 2011 г.

Применимо к: SharePoint Foundation 2010

Доступно на сайте SharePoint Online

Развернув настраиваемое действие, его можно использовать в декларативном конструкторе рабочих процессов (например, в Microsoft SharePoint Designer).

СоветСовет

Другой пример приведен в статье How to: Create a Sandboxed Workflow Action.

Если требуется предоставить настраиваемое действие рабочего процесса пользователям семейства веб-сайтов, работающим с SharePoint Designer, а разрешений на установку фермы вам не предоставлено, действие можно установить в решение для песочницы. При установке в решение для песочницы процессы создания настраиваемого действия рабочего процесса и его установки отличаются от аналогичных для фермы в двух аспектах:

  • Должен быть создан настраиваемый класс и метод, вызываемый обработчиком рабочих процессов и выполняющийся в изолированном рабочем процессе. Метод будет представлять собой активность рабочего процесса настраиваемого действия рабочего процесса.

  • Декларативная разметка, определяющая действие рабочего процесса для SharePoint Designer, развертывается в базу данных контента в манифесте компонента, а не в файловую систему интерфейсных веб-серверов в ACTIONS-файле, и разметка WorkflowActions, используемая в манифесте компонента, несколько отличается от разметки WorkflowInfo в ACTIONS-файле.

Создание метода действия

  1. Создайте проект SharePoint в Microsoft Visual Studio. Подойдет любой тип проекта, допускаемый решением для песочницы, включая Пустое решение SharePoint (не допускаются: Модель подключения к бизнес-данным, Шаблон сайта, Визуальная веб-часть, Последовательный рабочий процесс и Рабочий процесс конечного автомата).

  2. Дважды щелкните FEATURE-файл в окне Обозреватель решений, чтобы открыть Конструктор компонентов.

  3. В конструкторе компонентов задайте для параметра Область значение Сайт.

  4. Добавьте в проект элемент Класс.

  5. Присвойте классу и пространству имен понятные имена и добавьте операторы using для объектов System.Collections, Microsoft.SharePoint и Microsoft.SharePoint.UserCode.

  6. Объявите в классе метод, в котором будет содержаться логика настраиваемого действия рабочего процесса. Метод должен:

    • быть public;

    • быть static;

    • возвращать объект Hashtable;

    • принимать в качестве первого параметра объект SPUserCodeWorkflowContext (дополнительные параметры допускаются без ограничений).

    Ниже приведен пример кода, который к этому моменту уже должен быть написан.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Collections;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.UserCode;
    
    namespace Contoso.SharePoint.Workflow.Actions
    {
        class ListCreation
        {
            public static Hashtable CreateList(SPUserCodeWorkflowContext context, String listTitle, String listDescription, String listType)
            {
    
            }
        }
    }
    
  7. Задайте логику действия в методе.

    Важное примечаниеВажно!

    Метод будет выполняться в изолированном рабочем процессе и, соответственно, должен соответствовать ограничениям, применяющимся к таким процессам. К примеру, код не может обращаться к любым объектам, расположенным вне текущего семейства веб-сайтов, считывать данные из файловой системы сервера или записывать их в нее. Дополнительные сведения см. в статье Ограничения для изолированных решений

    Приведенный ниже код представляет собой развитие предыдущего примера.

    public static Hashtable CreateList(SPUserCodeWorkflowContext context, String listTitle, String listDescription, String listType)
    {
        using (SPSite siteCollection = new SPSite(context.SiteUrl))
        {
            SPWeb currentWeb = siteCollection.OpenWeb(context.WebUrl);  
            SPListTemplateCollection availableListTypes = currentWeb.ListTemplates;
            SPListTemplate listTemplate = availableListTypes[listType];
            Guid listID = currentWeb.Lists.Add(listTitle, listDescription, listTemplate);
            Hashtable result = new Hashtable();
            result["ListID"] = listID.ToString();
            return result;
        }
    }
    

Создание разметки WorkflowActions

  1. Добавьте в проект элемент Пустой элемент из шаблонов SharePoint 2010 среды Visual Studio.

  2. Откройте файл Elements.xml из окна Обозреватель решений.

  3. Добавьте в элемент Elements дочерний элемент WorkflowActions.

  4. Добавьте в элемент WorkflowActions дочерний элемент Action и присвойте значения его атрибутам. Пример приведен ниже.

    <Action Name="Create a List" 
            SandboxedFunction="true" 
            Assembly="$SharePoint.Project.AssemblyFullName$" 
            ClassName="Contoso.SharePoint.Workflow.Actions.ListCreation" 
            FunctionName="CreateList" 
            AppliesTo="all" 
            UsesCurrentItem="true"
            Category="Contoso Actions">
    </ Action>
    
  5. Добавьте в элемент Actions дочерний элемент RuleDesigner и присвойте значение его атрибуту Sentence.

    <RuleDesigner Sentence="Create a %1 list named %2, and described as %3">
    
    </RuleDesigner>
    
  6. В каждое изменяющееся поле в Sentence добавьте дочерний элемент FieldBind и присвойте значения его атрибутам.

    <RuleDesigner Sentence="Create a %1 list named %2, and described as %3">
      <FieldBind Id="1" Field="listType" DesignerType="Text" Text="list type"/>
      <FieldBind Id="2" Field="listTitle" DesignerType="Text" Text="list name"/>
      <FieldBind Id="3" Field="listDescription" DesignerType="Text" Text="description"/>
    </RuleDesigner>
    
    ПримечаниеПримечание

    Как можно было заметить, в приведенном выше примере RuleDesigner объект Hashtable, возвращаемый методом действия, не используется; возвращаемое значение можно использовать в правиле. При его использовании в элементе RuleDesigner для него должен присутствовать элемент FieldBind. Например, в атрибут Sentence элемента Action можно добавить "Result: %4" и дополнительный элемент FieldBind следующим образом: <FieldBind Id="4" Field="result" DesignerType="Text" Text="ID of new list"/>.

    Предупреждающая заметкаВнимание!

    Добавлять элемент FieldBind для параметров, на которые отсутствуют ссылки в атрибуте Sentence, не следует (подобное действие не помешает развернуть действие рабочего процесса, но при попытке пользователей использовать это действие в рабочем процессе возникнет ошибка, которую они не смогут устранить).

  7. Поскольку обработчик рабочих процессов вызывает метод настраиваемого действия, а не сам код, ему нужно предоставить данные о параметрах метода. Добавьте в элемент Action элемент Элемент Parameters (WorkflowActions).

  8. Первым определяемым параметром всегда должен быть обязательный SPUserCodeWorkflowContext; его разметка не меняется и продемонстрирована в следующем примере.

    <Parameters>
      <Parameter Name="__Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext, Microsoft.SharePoint.WorkflowActions" Direction="In" DesignerType="Hide" />
    </Parameters>
    

    Обратите внимание, что тип определяется как Microsoft.SharePoint.WorkflowActions.WorkflowContext, а не Microsoft.SharePoint.UserCode.SPUserCodeWorkflowContext. Причина — обработчик рабочих процессов создает объект SPUserCodeWorkflowContext из значений свойств объекта WorkflowContext.

  9. Для каждого из элементов FieldBind, добавленных в элемент RuleDesigner, добавьте еще один элемент Parameter. Значение атрибута Name элемента Parameter должно совпадать со значением атрибута Field соответствующего элемента FieldBind. Ниже приведено дальнейшее развитие примера.

    <Parameters>
      <Parameter Name="__Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext, Microsoft.SharePoint.WorkflowActions" Direction="In" DesignerType="Hide" />
      <Parameter Name="listType" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox"/>
      <Parameter Name="listTitle" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox" />
      <Parameter Name="listDescription" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox" />
    </Parameters>
    
    ПримечаниеПримечание

    При наличии элемента FieldBind для возвращаемого значения у него также должен быть элемент Parameter. Значение атрибута направления Direction элемента Parameter должно быть равно "Out"; пример: <Parameter Name="result" Type="System.String, mscorlib" Direction="Out" DesignerType="ParameterNames" />

  10. Постройте и упакуйте решение, создайте пакет решения SharePoint (WSP-файл) и предоставьте его администраторам семейства веб-сайтов.

Развертывание действия рабочего процесса в семействе веб-сайтов

  • Установка и развертывание решения для песочницы производится администратором семейства веб-сайтов (путем установки решения в коллекцию решений семейства). Процесс проходит в два этапа:

    1. Администратор семейства веб-сайтов передает пакет решения в коллекцию.

    2. Администратор семейства веб-сайтов развертывает пакет (в рамках решения для песочницы этот процесс называется "активацией"). На этом этапе все компоненты пакета активируются автоматически. Если в семействе веб-сайтов зарегистрированы компоненты проверки решений, они также выполняются на этапе активации (развертывания).

    Если решение проходит проверку и не заблокировано администратором фермы, оно готово к использованию в рамках семейства веб-сайтов.

Проверка действия рабочего процесса

  1. Откройте веб-сайт, на котором активирован компонент решения.

  2. В меню Действия сайта выберите команду Изменить в SharePoint Designer.

  3. Создайте рабочий процесс с новым действием рабочего процесса и проверьте его. Ниже приведены инструкции по проверке действия рабочего процесса, созданного в примере, приведенном в этом разделе.

    1. Открыв веб-сайт со списком Извещения в SharePoint Designer, щелкните Рабочие процессы в области навигации.

    2. В раскрывающемся списке Рабочий процесс списка на ленте выберите пункт Извещения.

    3. В поле Имя диалогового окна Создание рабочего процесса списка укажите строку Возвращение с отраслевой выставки и нажмите кнопку ОК.

    4. В рабочей области конструирования рабочих процессов в раскрывающемся списке Условие на ленте выберите пункт Если значение поля текущего элемента равно указанному значению. Условие Если поле равно значению появляется на шаге 1.

    5. Щелкните ссылку поле и выберите пункт Название в раскрывающемся списке.

    6. Щелкните ссылку равно и выберите пункт заканчивается на в раскрывающемся списке.

    7. Щелкните ссылку значение, введите в открывшееся текстовое поле строку отраслевая выставка и нажмите клавишу ВВОД.

    8. Щелкните область (Начните ввод текста... под условием, чтобы переместить на нее фокус.

    9. Щелкните Действие на ленте. В раскрывающемся списке появится созданная категория Contoso Actions (действия Contoso) и новое действие, Create a list (создать список).

    10. Выберите пункт Create a list. Появится "предложение", заданное в элементе Action.

    11. Щелкните ссылку тип списка, введите в открывшееся текстовое поле строку Контакты и нажмите клавишу ВВОД.

    12. Щелкните ссылку имя списка и нажмите кнопку с многоточием (...), чтобы открыть диалоговое окно Построитель строк.

    13. Введите в текстовое поле строку Контакты, встреченные на (в конце строки должен быть пробел).

    14. Нажмите кнопку Добавить или изменить подстановку. Откроется диалоговое окно Подстановка для строки.

    15. В раскрывающемся списке Источник данных выберите пункт Текущий элемент.

    16. В раскрывающемся списке Поле из источника выберите пункт Название.

    17. Нажмите кнопку ОК, чтобы закрыть текущее диалоговое окно; затем нажмите кнопку ОК еще раз, чтобы закрыть окно Построитель строк.

    18. Щелкните ссылку описание и нажмите кнопку с многоточием (...), чтобы открыть диалоговое окно Построитель строк.

    19. Введите в текстовое поле строку Эти контакты получены в ходе (в конце строки должен быть пробел).

    20. Нажмите кнопку Добавить или изменить подстановку. Откроется диалоговое окно Подстановка для строки.

    21. В раскрывающемся списке Источник данных выберите пункт Текущий элемент.

    22. В раскрывающемся списке Поле из источника выберите пункт Название.

    23. Нажмите кнопку ОК, чтобы закрыть текущее диалоговое окно; затем нажмите кнопку ОК еще раз, чтобы закрыть окно Построитель строк.

      Итак, действие должно приобрести вид Create a Контакты list named Контакты, встреченные на [%Current Item:Title%], and described as Эти контакты получены в ходе [%Current Item:Title%].

    24. Щелкните Поиск ошибок на ленте и устраните их (при их наличии).

    25. Щелкните Параметры рабочих процессов на ленте.

    26. В области Параметры запуска установите флажок Автоматически запускать рабочий процесс при создании элемента.

    27. Щелкните Сохранить на ленте.

    28. Щелкните Опубликовать на ленте.

    29. Закройте SharePoint Designer.

    30. Откройте в браузере веб-сайт, на который был опубликован рабочий процесс и перейдите к списку Извещения.

    31. Щелкните Добавить извещение.

    32. В качестве Названия введите Берлинская отраслевая выставка и нажмите кнопку Сохранить.

    33. Обновите страницу списка Извещения. В списке должен появиться новый столбец, Возвращение с отраслевой выставки, а состояние нового элемента должно быть равно Выполняющаяся задача или Завершено.

    34. Обновляйте страницу до тех пор, пока состояние рабочего процесса Возвращение с отраслевой выставки не изменится на Завершено.

    35. Щелкните Списки или Весь контент сайта в области навигации. Должен появиться новый список, Контакты, встреченные на Берлинская отраслевая выставка с описанием Эти контакты получены в ходе Берлинская отраслевая выставка.

См. также

Концепции

Что можно реализовать в изолированном решении

Ограничения для изолированных решений

Архитектура изолированных решений