Многие организации внедрили SharePoint, чтобы улучшить взаимодействие между своими специалистами, обрабатывающими информацию. Эти организации часто используют SharePoint для хранения информации в списках и библиотеках документов, поддерживая выполняемый вручную бизнес-процесс. Хотя хранение этой информации в SharePoint действительно способствует гораздо более эффективной коллективной работе с ней, значительного прироста производительности труда специалистов, обрабатывающих информацию, можно добиться за счет автоматизации бизнес-процессов в рамках SharePoint, представив их в форме рабочих процессов SharePoint.
С выпуском Office 365 приложение SharePoint Online дает организациям многие из тех же преимуществ в коллективной работе, что и SharePoint, в то же время обеспечивая все выгоды использования ПО как сервиса (Software as a Service, SaaS) на основе облака. SharePoint Online поддерживает рабочие процессы как декларативные рабочие процессы, встроенные в SharePoint Designer 2010 и развертываемые в виде решений, выполняемых в изолированной программной среде (sandbox solutions) (изолированных решений). Если операции встроенных рабочих процессов не удовлетворяют требованиям вашего решения, вы можете создать собственные операции рабочего процесса, используя Visual Studio 2010, и развернуть их в SharePoint Online через изолированные решения.
В этой статье я дам обзор поддержки рабочих процессов в SharePoint Online, создам декларативный рабочий процесс с помощью SharePoint Designer 2010, дополню этот процесс собственной операцией и разверну его в облаке как изолированное решение в SharePoint Online.
Информацию о сходстве и различиях в разработке для SharePoint Online и SharePoint 2010 см. в моей статье «Коллективная работа в облаке с применением SharePoint Online» в мартовском номере за 2011 г. по ссылке (bit.ly/spodevmsdn). Дополнительные сведения о SharePoint Online и Office 365, в том числе о регистрации пробной учетной записи, см. на сайте office365.com.
Обзор разработки для SharePoint Online
SharePoint Online позволяет создавать решения в области коллективной работы, используя те же навыки и инструменты, что и при разработке для SharePoint 2010, в том числе Visual Studio 2010, SharePoint Designer 2010, C# или Visual Basic, а также SharePoint API и SDK. Хотя в разработке для SharePoint 2010 и SharePoint Online много схожего, существуют и различия, которые влияют на то, какие решения можно создавать и как они создаются.
SharePoint Online поддерживает только изолированные решения, а значит, нельзя развертывать рабочие процессы на основе кода, включая решения на основе проектов Sequential Workflow и State Machine Workflow. Однако рабочие процессы, построенные с применением SharePoint Designer 2010, поддерживаются, так как они являются декларативными, и их можно развертывать либо непосредственно в SharePoint Online, либо через Solution Gallery, используя файлы пакетов. Более того, эти декларативные рабочие процессы можно расширять с помощью изолированных решений, создаваемых в Visual Studio 2010 для поддержки дополнительных операций, отсутствующих в готовом виде в SharePoint Designer 2010.
Эта статья будет опираться на концепции и решение, рассмотренные в моей предыдущей статье. Прочитайте сначала ту статью, следуя инструкциям по подготовке вашей среды разработки для SharePoint Online и созданию решения-примера для закупок, чтобы получить базовое представление о концепциях разработки, ориентированной на SharePoint Online. Чтобы проиллюстрировать поддержку рабочих процессов в SharePoint Online, я расширю пример из предыдущей статьи, включив в него решение на основе рабочего процесса.
Обзор SharePoint Designer 2010
SharePoint Designer 2010 позволяет опытным пользователям и разработчикам настраивать SharePoint 2010 без написания кода. SharePoint Designer 2010 также поддерживает SharePoint Online, но с учетом различий в функциональности SharePoint 2010 и SharePoint Online, например поддержки BCS и внешних списков. SharePoint Designer 2010 — отличный инструмент для управления артефактами в SharePoint и навигации между ними, работы с данными и настройки внешнего вида ваших сайтов SharePoint. Он дает возможность создавать собственные рабочие процессы, которые развертываются как часть более универсального решения в области коллективной работы. Вы можете узнать больше о возможностях SharePoint Designer 2010, посмотрев видеоролик «Introducing SharePoint Designer 2010 for SharePoint Online» (bit.ly/spdspointro). SharePoint Designer 2010 — бесплатный программный продукт, поддерживающих как 32-разрядные (bit.ly/spd201032), так и 64-разрядные версии (bit.ly/spd201064).
Решение в области закупок
В примерах в этой статье я буду опираться на процесс закупок в вымышленной компании Contoso Corp., о котором я рассказывал в предыдущей статье, и добавлю рабочий процесс SharePoint для автоматизации рассмотрения заявок на закупки. Когда заявка требует утверждения, пользователь будет запускать рабочий процесс и предоставлять обоснование для данных закупок. Рабочий процесс инициирует процесс рассмотрения и создает задачу для группы Approvers с детальными сведениями о закупках. После утверждения или отклонения пользователю высылается ответ по электронной почте. Затем рабочий процесс анализирует тип заявки и в случае одобренной заявки на командировку (например, для поездки на техническую конференцию) создает подсайт для пользователя, чтобы тот мог заполнить форму отчета о поездке и загрузить слайды. С этой целью я добавлю поле RequestType в Non-Standard Business Purchase Requests.
Я обновил проект PurchaseMgr из предыдущей статьи, чтобы включить это поле RequestType. Если вы следовали той статье, то можете удалить предыдущий пакет и развернуть новый (который можно скачать для этой статьи) или добавить требуемое поле RequestType в список Non-Standard Purchase Requests, выбрав Travel, Equipment и Service Request. Я начну с кода из этой статьи (bit.ly/spoworkmsdncode) и распакую его в каталог Documents\Visual Studio 2010\Projects\SPOMSDN_Workflow на своем локальном компьютере. Затем я разверну PurchasingMgr.wsp в Solution Gallery набора сайтов в своей локальной среде разработки для SharePoint 2010 (в моем случае по ссылке http://o365dpe.contoso.com/sites/spomsdnmag) и активирую на сайте Purchasing функцию Purchasing Manager–Content Types and Lists (http://o365dpe.contoso.com/sites/spomsdnmag/purchasing).
Создание рабочего процесса
Приступая к созданию своего рабочего процесса, я открываю сайт Purchasing в локальной среде разработки для SharePoint 2010; для этого я запускаю SharePoint Designer 2010, выбираю File | Sites | Open Site и ввожу URL сайта (http://o365dpe.contoso.com/sites/spomsdnmag/purchasing). В секции Navigation я выбираю Workflows, чтобы увидеть текущий опубликованный рабочий процесс и ленту Workflows, как показано на рис. 1.
Рис. 1. Рабочие процессы в SharePoint Designer 2010
SharePoint Online поддерживает, действующий на конкретный список, Site Workflows, работающий с указанным сайтом, и Reusable Workflows, который впоследствии можно связывать со списком или определенным типом контента. Мне нужна возможность распространения своего рабочего процесса в составе более универсального решения, поэтому я создаю Reusable Workflow — единственный тип рабочих процессов, поддерживающий распространение.
При создании рабочего процесса в SharePoint Designer можно выбрать несколько вариантов. Я могу создать собственный рабочий процесс на основе одного из встроенных (в том числе Approval, Collect Feedback или Collection Signatures) с помощью кнопки Copy & Modify, импортировать диаграмму Visio 2010 на основе шаблона Microsoft SharePoint Workflow, щелкнув кнопку Import from Visio, или создать его с нуля, используя группу New на вкладке Workflows ленты. Я выберу последний вариант, щелкнув кнопку Reusable Workflow в группе New ленты. В диалоге Create Reusable Workflow присваиваем имя рабочему процессу «Non-Standard Business Purchase Request Approval» и выбираем Purchasing Manager — Non-Standard Business Purchase Request Content Type, чтобы связать этот рабочий процесс с моим типом контента (рис. 2).
Рис. 2. Повторно используемый рабочий процесс, связанный с типом контента
Далее заходим на страницу свойств рабочего процесса Non-Standard Business Purchase Request Approval, щелкнув Workflow Settings в группе Manage на вкладке Workflows.
В группе Settings я выбираю Show workflow visualization on status page, чтобы мои пользователи получали визуальное представление состояние каждого экземпляра рабочего процесса в реальном времени. Задействуем параметры в группе Start Options, чтобы сделать этот рабочий процесс управляемым человеком: сбрасываем флажок Disable manual start option и устанавливаем флажок Disable automatic start on item creation/change option. Сделав наоборот, вы создадите рабочий процесс, управляемый компьютером.
Во многих ситуациях информация, необходимая для построения рабочего процесса, хранится не в списке или библиотеке, а в переменных и столбцах, специфичных для рабочего процесса. Для этого используйте группу Variables на вкладке Workflows ленты, как описано в табл. 1.
Табл. 1. Переменные рабочего процесса
Тип переменной | Описание |
Initiation Form Parameter | Параметр, в котором хранятся данные, собранные от пользователя в момент запуска рабочего процесса или сопоставления со списком |
Local Variables | Закрытые переменные для хранения данных, используемых при обработке рабочего процесса |
Association Columns | Столбцы, добавляемые в список, когда рабочий процесс сопоставляется со списком; это обеспечивает гарантированный базовый набор столбцов для повторно используемых рабочих процессов |
В данном случае я хочу собирать обоснования для закупок при запуске рабочего процесса, чтобы предоставлять эту информацию руководителям, принимающим решение по таким заявкам. Для этого выбираем Variables | Initiation Form Parameters | Add… и создаем параметр Business Rationale в диалоге Add Field; затем щелкаем кнопки Next и Finish.
Реализация рабочего процесса в SharePoint Designer
В этот момент я готов начать реализацию рабочего процесса, поэтому нажимаю кнопку Editor в группе Edit на вкладке Workflow Settings. Это приводит к переключению в дизайнер рабочих процессов — SharePoint Designer 2010, где у меня появляется возможность реализовать собственный рабочий процесс, используя параметры Condition, Action и Step в группе Insert на вкладке Workflow ленты (рис. 4).
Рис. 4. Workflow Designer — раздел Insert
Стадии (steps) используются для организации условий (conditions) и операций (actions) в рабочий процесс и для управления тем, как выполняются эти условия и операции (табл. 2).
Табл. 2. Типы стадий
Тип стадии | Описание |
Step | Стадии используются для организации условий и операций в рабочий процесс. Все условия и операции должны быть выполнены до того, как начнется выполнение следующей стадии. Допускается вложение стадий |
Impersonation Step | Рабочий процесс выполняется с разрешениями пользователя, который его запускает вручную или автоматически. Стадии типа Impersonation Step выполняются с разрешениями автора рабочего процесса. Impersonation Step можно добавить только как первую стадию рабочего процесса. В эту стадию допускается вложение других стадий |
Parallel Block | Когда стадии добавляются в Parallel Block, они выполняются параллельно, а не последовательно |
Например, на рис. 4 Step 2 будет выполнена с разрешениями автора рабочего процесса, тогда как Step 1 — с разрешениями пользователя, запустившего рабочий процесс (вручную или автоматически). Стадии 5 и 6 будут выполняться параллельно, а стадии 3 и 4 — последовательно.
Рис. 6. Влияние стадий на выполнение рабочего процесса
В моем рабочем процессе всего одна стадия. Чтобы документировать, что именно делают условия и операции на этой стадии, я изменяю заголовок, щелкнув текст «Step 1» и введя «Request Purchase Approval». Затем я щелкаю внутри стадии, чтобы курсор появился там, где нужно добавить условия и операции.
Операции выполняются в рамках рабочего процесса и могут, например, начинать процесс рассмотрения, модифицировать элемент списка, отправлять электронную почту и др. Полный список поддерживаемых операций см. в справочнике по SharePoint Designer 2010 (bit.ly/spd2010act). В данном случае я хочу начинать процесс рассмотрения заявки на закупку, поэтому в разделе Insert выбираю из раскрывающегося списка Action операцию Start Approval Process. Это приводит к появлению в дизайнере блока текста с гиперссылками, позволяющими определить операцию выбором каждой ссылки и указанием дополнительной информации, как показано на рис. 5.
Рис. 5. Добавление операции Start Approval Process
Щелкнув ссылку Approval, можно настроить задачу рассмотрения заявки, в том числе изменить обработку этой задачи и ее результаты. Нажатием кнопки Back можно вернуться в редактор. Через ссылку «these users» указывается, кто будет участвовать в процессе рассмотрения заявки. В диалоге Select Task Process Participants выберите группу Approvers в качестве Participants и задайте заголовок задачи, как показано на рис. 6. В окно Instructions я хочу добавить более подробные сведения о конкретном элементе и обоснование, помогающее в принятии решения. Например, чтобы включить заголовок элемента списка, щелкните кнопку Add or Change Lookup, выберите Current Item в Data Source и Title в Field from source.
Рис. 6. Настройка задачи Approval
В законченном виде эта задача выглядит, как на рис. 7.
Рис. 7. Настроенная задача Approval
В этой точке выполнения рабочий процесс остановится до тех пор, пока данная задача не сообщит об одобрении или отклонении заявки или не истечет время ожидания, если был указан крайний срок выполнения этой задачи. Для управления потоком выполнения я буду использовать условия.
Условия управляют логикой рабочего процесса на основе значений его переменных или полей. Например, если элемент одобрен, нужно отправить заявителю сообщение по электронной почте и создать сайт в том случае, когда типом заявки является Travel. Если элемент отклонен, требуется отправить сообщение по электронной почте и удалить элемент. Для этого поместите курсор под процесс рассмотрения, щелкните раскрывающийся список Condition и выберите If any value equals any value. Далее щелкните гиперссылку "value" и нажмите кнопку, чтобы на экране появился диалог Define Workflow Lookup. В Data source выберите Workflow Variables and Parameters, а в Field from source — Variable: IsItemApproved. Эта переменная добавляется в рабочий процесс при добавлении задачи Start Approval Process.
Затем щелкните ссылку "equals" и выберите equals из раскрывающегося списка. Щелкните ссылку "value" и выберите Yes из раскрывающего списка. Под этим условием разместите блок Else-If, чтобы можно было выполнять операцию при отклонении элемента. Добавьте в обе ветви операции Send и Email и используйте String Builder для настройки заголовка сообщения электронной почты, как показано на рис. 8.
Рис. 8. Сообщение электронной почты в случае одобрения
Теперь добавьте условие "If current item field equals value" под условием If и используйте в качестве базового поле RequestType, чтобы можно было создать новый подсайт в том случае, когда заявка относится к командировке. Тогда окно дизайнера будет выглядеть, как на рис. 9.
Рис. 9. Условный поток выполнения рабочего процесса
Чтобы создать сайт для заявок Travel, нужно создать собственную операцию рабочего процесса, так как подобная операция не встроена в SharePoint Designer 2010. Для этого сохраните рабочий процесс, закройте SharePoint Designer 2010 и откройте Visual Studio 2010.
Создание собственной операции рабочего процесса в Visual Studio 2010
Вы можете добавлять собственные операции рабочих процессов в SharePoint Designer 2010, используя Visual Studio 2010 и изолированные решения. Эти операции могут выполнять любые задачи, допустимые в изолированном решении, что придает дополнительную гибкость рабочим процессам SharePoint Online.
В Visual Studio 2010 выберите File | New Project и в диалоге New Project укажите сначала шаблоны SharePoint 2010, а потом шаблон Empty SharePoint Template. В поле Name введите PurchasingMgrActions, в качестве Location задайте Documents\Visual Studio 2010\Projects\SPOMSDN_Workflow\ и щелкните OK. В мастере SharePoint Customization Wizard укажите адрес локального сайта разработки (http://o365dpe.contoso.com/sites/spomsdnmag/purchasing), выберите Deploy as a sandboxed solution и щелкните Finish.
В Solution Explorer щелкните правой кнопкой мыши проект PurchasingMgrActions, выберите Add | Class…, присвойте классу имя CreateSiteAction и щелкните OK. Класс CreateSiteAction предоставляет метод, колторый будет вызываться рабочим процессом для создания нового сайта. Добавьте необходимые выражения using и реализуйте метод CreateSite, как показано на рис. 10.
Рис. 10. Реализация метода CreateSite
using System;
using System.Collections;
using Microsoft.SharePoint;
using Microsoft.SharePoint.UserCode;
namespace SPDCustomWorkflowActions
{
public class CreateSiteActivity
{
public Hashtable CreateSite(SPUserCodeWorkflowContext
context, string siteName)
{
Hashtable results = new Hashtable();
try
{
using (SPSite site = new SPSite(context.CurrentWebUrl))
{
using (SPWeb web = site.OpenWeb())
{
web.Webs.Add(
siteName,
"Trip Report: " + siteName,
string.Empty,
1033,
"STS",
false,
false);
}
}
results["success"] = true;
results["exception"] = string.Empty;
}
catch (Exception e)
{
results = new Hashtable();
results["exception"] = e.ToString();
results["success"] = false;
}
return results;
}
}
}
Метод CreateSite соответствует сигнатуре методов для собственных операций; он принимает SPUserCodeWorkflowContext для доступа к контексту, в котором выполняется рабочий процесс, и другие нужные вам параметры (в данном случае — имя создаваемого сайта). Этот метод получает доступ к набору сайтов (SPSite) и сайту (SPWeb) через контекст и создает новый сайт вызовом метода SPWeb.Webs.Add. Результаты возвращаются в переменной results типа Hashtable.
Чтобы добавить CreateSiteAction в раскрывающийся список Actions, нужно развернуть файл Elements.xml с вашей функцией (Feature) для описания операции дизайнеру SharePoint Designer 2010. Я добавлю этот файл в проект PurchasingMgrActions, щелкнув его правой кнопкой мыши в Solution Explorer и открыв Add | New Item…, а затем выбрав SharePoint 2010 в Installed Templates и указав шаблон Empty Element Template. Присвойте элементу имя CreateSiteActionDefinition и щелкните OK. Это определение создается реализацией элемента Action в элементах WorkflowActions, как показано на рис. 11.
Рис. 11. Определение операции создания сайта через Elements.xml
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<WorkflowActions>
<Action Name="Create Site"
SandboxedFunction="true"
Assembly="$SharePoint.Project.AssemblyFullName$"
ClassName="PurchasingMgrActions.CreateSiteAction"
FunctionName="CreateSite"
AppliesTo="all"
UsesCurrentItem="true"
Category="Purchasing Manager Workflow Actions">
<RuleDesigner Sentence="Create Site with name %1 (
exceptions logged to %2)">
<FieldBind Field="siteName" Text="Site Name" Id="1"
DesignerType="TextBox" />
<FieldBind Field="exception" Text="Exception" Id="2"
DesignerType="ParameterNames" />
</RuleDesigner>
<Parameters>
<Parameter Name="__Context"
Type="Microsoft.SharePoint.WorkflowActions.
WorkflowContext, Microsoft.SharePoint.
WorkflowActions"
Direction="In"
DesignerType="Hide" />
<Parameter Name="siteName"
Type="System.String, mscorlib"
Direction="In"
DesignerType="TextBox"
Description="Name of the site to create" />
<Parameter Name="exception"
Type="System.String, mscorlib"
Direction="Out"
DesignerType="ParameterNames"
Description="Exception encountered"/>
</Parameters>
</Action>
</WorkflowActions>
</Elements>
Элемент Action и его атрибуты описывают сборку, класс и метод, который будет вызываться при выполнении данной операции в рабочем процессе. В нашем случае будет вызываться методCreateSiteAction.CreateSite. Элемент RuleDesigner и его элементы FieldBind определяют текст, показываемый в дизайнере рабочих процессов, а также имена и типы полей, отображаемых как гиперссылки в этом тексте. Элемент Parameters и его дочерние элементы Parameter определяют, как передаются и возвращаются элементы RuleDesigner\FieldBind при вызове CreateSiteAction.CreateSite. Например, параметр __Context имеет тип WorkflowContext и используется для передачи контекста в вызов без отображения в дизайнере (значение атрибута DesigerType устанавливается в "Hide"). Параметр siteName будет принимать значение от привязки поля siteName. Связывание осуществляется присваиванием одинаковых имен полю и параметру. Исключения будут передаваться через параметр exception и в поле exception по той же причине.
Прежде чем проверять собственную операцию, я открою Feature1 и присвою ей заголовок "Purchasing Manager Workflow Actions", чтобы сделать его более описательным, и изменю ее область действия (scope) на Site, как того требуют собственные операции рабочих процессов.
Развертывание решения на основе рабочего процесса в SharePoint Online
Чтобы проверить собственную операцию, щелкните правой кнопкой мыши проект PurchasingMgrActions в Solution Explorer и выберите Package для упаковки решения. Затем загрузите PurchasingMgrActions.wsp в Solution Gallery в набор сайтов локальной разработки (http://o365dpe.contoso.com/sites/spomsdnmag) для развертывания собственной операции рабочего процесса.
Теперь, когда я открою SharePoint Designer 2010 и свой рабочий процесс Non-Standard Business Purchase Request Workflow Approval в редакторе рабочих процессов, моя операция появится в раскрывающемся списке Action в категории Purchasing Manager Workflows, как показано на рис. 12.
Рис. 12. Собственная операция Create Site в дизайнере рабочих процессов
Как только вы присвоите переменной Site Name значение Current Item:Title, рабочий процесс закончен и готов к тестированию (рис. 13).
Рис. 13. Законченный рабочий процесс
Перед тестированием мне нужно опубликовать рабочий процесс на моем сайте локальной разработки и сопоставить его с моим списком. Для публикации выбираем Publish в разделе Save ленты. Закончив публикацию, переходим к списку Non-Standard Business Purchase Requests на сайте локальной разработки, открываем вкладку List и выбираем Workflow Settings в разделе Settings ленты. Под These workflows are configured to run on items of this type я выбираю Purchasing Manager — Non-Standard Business Purchase Requests и щелкаю ссылку "Add a workflow". Теперь я выбираю рабочий процесс Non-Standard Business Purchase Request Approval в качестве шаблона, присваиваю рабочему процессу имя Non-Standard Business Purchase Approval и щелкаю кнопкиNext и Save.
В этот момент мой рабочий процесс можно запустить. Выберите первый элемент в списке, укажите Workflows в разделе Workflows ленты и щелкните рабочий процесс Non-Standard Business Purchase Approval для запуска. После этого будет предложено ввести текст обоснования заявки, как определено в Business Rationale Initiation Form Parameter.
Я предоставляю обоснование и щелкаю кнопку Start для запуска рабочего процесса. Затем я могу перейти на страницу Workflows для данного элемента и выбрать выполняемый рабочий процесс, чтобы увидеть страницу Workflow Information, на которой также изображается блок-схема процесса. Когда заявка утверждается, блок-схема обновляется, как показано на рис. 14.
(click to zoom)
Рис. 14. Страница Workflow Information с блок-схемой рабочего процесса
Теперь перейдем на Site Actions | View All Site Content и увидим, что сайт создан.
Теперь я готов к распространению своего решения на основе рабочего процесса в SharePoint Online. Чтобы создать файл пакета для рабочего процесса Non-Standard Business Purchase Request, откройте рабочий процесс в SharePoint Designer 2010 и выберите Save As Template в разделе Manage ленты для сохранения рабочего процесса в библиотеке Site Assets. После этого из библиотеки Site Assets можно брать файлы пакетов PurchasingMgr.wsp (или модифицировать существующий список, если он уже развернут), PurchasingMgrActions.wsp и Non-Standard Business Purchase Request Approval.wsp и загружать их в Solution Gallery на вашем наборе сайтов SharePoint Online. Заметьте, что функции (features) нужно активировать именно в таком порядке на основе зависимостей между функциями (это можно автоматизировать). После активации функции рабочего процесса на сайте и сопоставления этого рабочего процесса со списком, его можно протестировать в SharePoint Online по той же схеме.
Заключение
Автоматизация бизнес-процесс через рабочие процессы в SharePoint Online еще больше увеличивает эффективность коллективной работы и выходит далеко за рамки простого хранения информации в SharePoint Online. В этой статье я показал, как реализовать рабочий процесс в SharePoint Designer 2010, расширить его собственной операцией, созданной в Visual Studio, а затем распространить в виде пакетов, генерируемых SharePoint Designer 2010 и Visual Studio 2010. Приглашаю вас поглубже окунуться в разработку рабочих процессов для SharePoint Online.