Создание изолированного действия рабочего процесса для SharePoint Online

Для SharePoint Online можно создавать рабочие процессы в SharePoint Designer 2010, либо действия рабочих процессов в Visual Studio 2010, которые после развертывания будут доступны в SharePoint Designer.

Действие рабочего процесса для SharePoint Online представляет собой изолированное решение, благодаря чему развертывание решений происходит без вмешательства администратора фермы.

Механизм работы, описанный ниже, применим и к SharePoint 2010.

Действие рабочего процесса

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

Для начала нужно создать пустой проект SharePoint 2010 и дать ему название. После клика на ОК развернуть созданный проект как изолированное решение на своем локальном сайте (рис. 1).

image

Рис. 1. Окно развертывания нового проекта

Далее создадим класс в проекте, который представляет собой действие рабочего процесса.

Первым делом нужно сделать вновь созданный класс публичным. Далее добавить в него метод, который возвращает Hashtable, а в качестве первого параметра принимает объект типа SPUserCodeWorkflowContext, при этом список входных параметров не ограничен одним объектом.

Следующий метод решает поставленную задачу

  1. public Hashtable SuspendWorkflow(SPUserCodeWorkflowContext context, string hours)
  2. {
  3.     Hashtable ht = new Hashtable();
  4.  
  5.     try
  6.     {
  7.         using (SPSite site = new SPSite(context.CurrentWebUrl))
  8.         {
  9.             SPWeb web = site.OpenWeb(context.WebUrl);
  10.  
  11.             Int32 NumberOfHours = Int32.Parse(hours);
  12.  
  13.             if (NumberOfHours < 0 || NumberOfHours > 120)
  14.             {
  15.                 SPWorkflow.CreateHistoryEvent(web, context.WorkflowInstanceId, 0,
  16.                     web.CurrentUser, TimeSpan.Zero, «Задержка указана неверно»,
  17.                     «Указанное время не входит в диапазон от 1 до 120 часов», string.Empty);
  18.             }
  19.             else
  20.             {
  21.                 Thread.Sleep(NumberOfHours * 3600 * 1000);
  22.             }
  23.             ht[«Result»] = «Success»;
  24.         }
  25.     }
  26.     catch (Exception)
  27.     {
  28.         ht[«Result»] = «Failure»;
  29.     }
  30.  
  31.     return ht;
  32. }

Можно заметить, что в качестве второго параметра в метод передается количество часов, на которое нужно приостановить выполнение рабочего процесса. Также было установлено ограничение на допустимое время задержки.

Определение действия для SharePoint Designer

Создадим определение действия для SharePoint Designer 2010, для чего добавим в проект Пустой элемент (в шаблонах проектов для SharePoint 2010). Остальные действия нужно выполнять в файле Elements.xml.

Ниже представлено содержимое Elements.xml

  1. <?xml version=«1.0« encoding=«utf-8«?>
  2. <Elements xmlns=«http://schemas.microsoft.com/sharepoint/«>
  3.   <WorkflowActions>
  4.     <Action
  5.       Name=«Приостановить рабочий процесс»
  6.       SandboxedFunction=«true»
  7.       Assembly=«$SharePoint.Project.AssemblyFullName$»
  8.       ClassName=«CustomActivity.Activity»
  9.       FunctionName=«SuspendWorkflow»
  10.       AppliesTo=«all»
  11.       UsesCurrentItem=«true»
  12.       Category=«Основные действия«>
  13.       <RuleDesigner
  14.         Sentence=«Приостановить исполнение рабочего процесса на %1«>
  15.         <FieldBind
  16.           Field=«hours»
  17.           Text=«Часов»
  18.           Id=«1»
  19.           DesignerType=«TextBox« />
  20.       </RuleDesigner>
  21.       <Parameters>
  22.         <Parameter
  23.           Name=«__Context»
  24.           Type=«Microsoft.SharePoint.WorkflowActions.WorkflowContext,
  25.                     Microsoft.SharePoint.WorkflowActions»
  26.           Direction=«In»
  27.           DesignerType=«Hide« />
  28.         <Parameter
  29.           Name=«hours»
  30.           Type=«System.String, mscorlib»
  31.           Direction=«In»
  32.           DesignerType=«ParameterNames»
  33.           Description=«Время для приостановки рабочего процесса в часах« />
  34.         <Parameter
  35.           Name=«Result»
  36.           Type=«System.String, mscorlib»
  37.           Direction=«Out»
  38.           DesignerType=«ParameterNames»
  39.           Description=«Результат»/>
  40.       </Parameters>
  41.     </Action>
  42.   </WorkflowActions>
  43. </Elements>

Рассмотрим подробнее структуру файла. Первым делом добавляется элемент WorkflowActions и далее Action (количество парных элементов соответствует количеству действий). Элемент Action содержит имя (Name) и категорию (Category) действия, которые будут видны в SharePoint Designer 2010. Далее указывается сборка (Assembly), класс (ClassName) и метод (FunctionName).

Элемент AppliesTo указывает, к чему можно применить действие – список, библиотека или список и библиотека. UseCurrentItem указывает, можно ли редактировать текущий элемент списка или библиотеки.

Элемент RuleDesigner определяет предложение, которое появится в SharePoint Designer (рис. 2).

image

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

И, наконец, элемент Parameters нужен для определения входных и выходных параметров действия.

Развертывание решения

Запакуем решение в WSP файл (в меню Build выберем Package). В параметрах семейства веб-сайтов SharePoint Online есть группа Коллекции (рис. 3).

image

Рис. 3. Группа Коллекции в параметрах семейства сайтов

Кликаем на Решения, далее на ленте выбираем Отправить решение и указываем путь к запакованному решению. Сразу же будет предложено активировать решение, после чего действие станет доступно для работы в SharePoint Designer 2010.

image

Рис. 4. Окно активации решения

Итак, в статье рассматривалось создание действия рабочего процесса. Алгоритм применим как к SharePoint 2010, так и к SharePoint Online.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s