Практическое руководство. Создание и развертывание действий рабочих процессов в изолированных решениях
В данном разделе рассматривается создание и развертывание настраиваемого действия рабочего процесса в решении для песочницы.
Дата последнего изменения: 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-файле.
Создание метода действия
Создайте проект SharePoint в Microsoft Visual Studio. Подойдет любой тип проекта, допускаемый решением для песочницы, включая Пустое решение SharePoint (не допускаются: Модель подключения к бизнес-данным, Шаблон сайта, Визуальная веб-часть, Последовательный рабочий процесс и Рабочий процесс конечного автомата).
Дважды щелкните FEATURE-файл в окне Обозреватель решений, чтобы открыть Конструктор компонентов.
В конструкторе компонентов задайте для параметра Область значение Сайт.
Добавьте в проект элемент Класс.
Присвойте классу и пространству имен понятные имена и добавьте операторы using для объектов System.Collections, Microsoft.SharePoint и Microsoft.SharePoint.UserCode.
Объявите в классе метод, в котором будет содержаться логика настраиваемого действия рабочего процесса. Метод должен:
быть 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) { } } }
Задайте логику действия в методе.
Важно! Метод будет выполняться в изолированном рабочем процессе и, соответственно, должен соответствовать ограничениям, применяющимся к таким процессам. К примеру, код не может обращаться к любым объектам, расположенным вне текущего семейства веб-сайтов, считывать данные из файловой системы сервера или записывать их в нее. Дополнительные сведения см. в статье Ограничения для изолированных решений
Приведенный ниже код представляет собой развитие предыдущего примера.
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
Добавьте в проект элемент Пустой элемент из шаблонов SharePoint 2010 среды Visual Studio.
Откройте файл Elements.xml из окна Обозреватель решений.
Добавьте в элемент Elements дочерний элемент WorkflowActions.
Добавьте в элемент 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>
Добавьте в элемент Actions дочерний элемент RuleDesigner и присвойте значение его атрибуту Sentence.
<RuleDesigner Sentence="Create a %1 list named %2, and described as %3"> </RuleDesigner>
В каждое изменяющееся поле в 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, не следует (подобное действие не помешает развернуть действие рабочего процесса, но при попытке пользователей использовать это действие в рабочем процессе возникнет ошибка, которую они не смогут устранить).
Поскольку обработчик рабочих процессов вызывает метод настраиваемого действия, а не сам код, ему нужно предоставить данные о параметрах метода. Добавьте в элемент Action элемент Элемент Parameters (WorkflowActions).
Первым определяемым параметром всегда должен быть обязательный 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.
Для каждого из элементов 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" />
Постройте и упакуйте решение, создайте пакет решения SharePoint (WSP-файл) и предоставьте его администраторам семейства веб-сайтов.
Развертывание действия рабочего процесса в семействе веб-сайтов
Установка и развертывание решения для песочницы производится администратором семейства веб-сайтов (путем установки решения в коллекцию решений семейства). Процесс проходит в два этапа:
Администратор семейства веб-сайтов передает пакет решения в коллекцию.
Администратор семейства веб-сайтов развертывает пакет (в рамках решения для песочницы этот процесс называется "активацией"). На этом этапе все компоненты пакета активируются автоматически. Если в семействе веб-сайтов зарегистрированы компоненты проверки решений, они также выполняются на этапе активации (развертывания).
Если решение проходит проверку и не заблокировано администратором фермы, оно готово к использованию в рамках семейства веб-сайтов.
Проверка действия рабочего процесса
Откройте веб-сайт, на котором активирован компонент решения.
В меню Действия сайта выберите команду Изменить в SharePoint Designer.
Создайте рабочий процесс с новым действием рабочего процесса и проверьте его. Ниже приведены инструкции по проверке действия рабочего процесса, созданного в примере, приведенном в этом разделе.
Открыв веб-сайт со списком Извещения в SharePoint Designer, щелкните Рабочие процессы в области навигации.
В раскрывающемся списке Рабочий процесс списка на ленте выберите пункт Извещения.
В поле Имя диалогового окна Создание рабочего процесса списка укажите строку Возвращение с отраслевой выставки и нажмите кнопку ОК.
В рабочей области конструирования рабочих процессов в раскрывающемся списке Условие на ленте выберите пункт Если значение поля текущего элемента равно указанному значению. Условие Если поле равно значению появляется на шаге 1.
Щелкните ссылку поле и выберите пункт Название в раскрывающемся списке.
Щелкните ссылку равно и выберите пункт заканчивается на в раскрывающемся списке.
Щелкните ссылку значение, введите в открывшееся текстовое поле строку отраслевая выставка и нажмите клавишу ВВОД.
Щелкните область (Начните ввод текста... под условием, чтобы переместить на нее фокус.
Щелкните Действие на ленте. В раскрывающемся списке появится созданная категория Contoso Actions (действия Contoso) и новое действие, Create a list (создать список).
Выберите пункт Create a list. Появится "предложение", заданное в элементе Action.
Щелкните ссылку тип списка, введите в открывшееся текстовое поле строку Контакты и нажмите клавишу ВВОД.
Щелкните ссылку имя списка и нажмите кнопку с многоточием (...), чтобы открыть диалоговое окно Построитель строк.
Введите в текстовое поле строку Контакты, встреченные на (в конце строки должен быть пробел).
Нажмите кнопку Добавить или изменить подстановку. Откроется диалоговое окно Подстановка для строки.
В раскрывающемся списке Источник данных выберите пункт Текущий элемент.
В раскрывающемся списке Поле из источника выберите пункт Название.
Нажмите кнопку ОК, чтобы закрыть текущее диалоговое окно; затем нажмите кнопку ОК еще раз, чтобы закрыть окно Построитель строк.
Щелкните ссылку описание и нажмите кнопку с многоточием (...), чтобы открыть диалоговое окно Построитель строк.
Введите в текстовое поле строку Эти контакты получены в ходе (в конце строки должен быть пробел).
Нажмите кнопку Добавить или изменить подстановку. Откроется диалоговое окно Подстановка для строки.
В раскрывающемся списке Источник данных выберите пункт Текущий элемент.
В раскрывающемся списке Поле из источника выберите пункт Название.
Нажмите кнопку ОК, чтобы закрыть текущее диалоговое окно; затем нажмите кнопку ОК еще раз, чтобы закрыть окно Построитель строк.
Итак, действие должно приобрести вид Create a Контакты list named Контакты, встреченные на [%Current Item:Title%], and described as Эти контакты получены в ходе [%Current Item:Title%].
Щелкните Поиск ошибок на ленте и устраните их (при их наличии).
Щелкните Параметры рабочих процессов на ленте.
В области Параметры запуска установите флажок Автоматически запускать рабочий процесс при создании элемента.
Щелкните Сохранить на ленте.
Щелкните Опубликовать на ленте.
Закройте SharePoint Designer.
Откройте в браузере веб-сайт, на который был опубликован рабочий процесс и перейдите к списку Извещения.
Щелкните Добавить извещение.
В качестве Названия введите Берлинская отраслевая выставка и нажмите кнопку Сохранить.
Обновите страницу списка Извещения. В списке должен появиться новый столбец, Возвращение с отраслевой выставки, а состояние нового элемента должно быть равно Выполняющаяся задача или Завершено.
Обновляйте страницу до тех пор, пока состояние рабочего процесса Возвращение с отраслевой выставки не изменится на Завершено.
Щелкните Списки или Весь контент сайта в области навигации. Должен появиться новый список, Контакты, встреченные на Берлинская отраслевая выставка с описанием Эти контакты получены в ходе Берлинская отраслевая выставка.
См. также
Концепции
Что можно реализовать в изолированном решении