Рабочие процессы SharePoint – двухэтапное согласование документа.

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

В настоящей статье я распишу один из самых востребованных процессов – двухэтапное согласование документа, например сотрудник (user1) делает отчет, который передается на согласование непосредственному руководителю (user2), и если user2 дает согласие документ передается к user3, который также может принять либо отклонить документ.

Если user2 одобряет документ, уведомляются user1 и user4 (user4 это предполагаемый руководитель user3).

Если user2 отклоняет документ, уведомляется только user4.

Если user3 одобряет документ, уведомляются user2 и user4, если отклоняет, уведомляется user2.

Схема нехитрая, интуитивно понятная и годится практически для любого предприятия. Тем не менее, это демо, и для реального внедрения нужно добавлять и корректировать некоторые факторы.

Я не буду использовать готовые шаблоны SharePoint Enterprise, т.к. это не даст ни универсальности применения, ни понимания.

Использовать я буду SharePoint Designer и писать только руками. Объяснения я сделаю максимально лаконичными, отвечающими на вопрос “Как?”, а теоретическую часть Вы всегда можете найти в открытых источниках. Visual Studio я не использую, т.к. для поставленной цели SharePoint Designer подходит более чем.

В качестве тестовой среды я буду использовать как Office 365 на платформе 2010, так и SharePoint 2013 Enterprise для того чтобы показать как можно больше. Описание нового в построении процессов на платформе SharePoint 2013 выходит за рамки данной статьи т.к. заслуживает отдельной, которую я рано или поздно напишу.

Итак, создадим новый повторно используемый процесс, назовем его test1 и будем использовать для любого типа контента:

Снимок экрана 2013-03-08 в 18.00.33

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

В качестве действия для первого шага будем получать решение от user2 с выводом в новую переменную Решение user2 (var):

Снимок экрана 2013-03-08 в 19.40.48

Решение будем делать с помощью Мастера создания задач:

Снимок экрана 2013-03-08 в 19.42.45

В качестве задачи у нас будет “Выбор из меню”:

Снимок экрана 2013-03-08 в 19.43.55

Снимок экрана 2013-03-08 в 19.44.31

..и “Многострочный текст”:

Снимок экрана 2013-03-08 в 19.46.10

Снимок экрана 2013-03-08 в 19.46.21

Для корректной передачи информации на следующий шаг, создадим Действие “Задать переменную рабочего процесса”.

Для первого значения создадим новую переменную “Рецензия User2” c типом “Идентификатор элементов списка”:

Снимок экрана 2013-03-08 в 20.00.08

В качестве второго значения будем использовать такую функцию:

Снимок экрана 2013-03-08 в 20.02.59

Теперь переходим ко второму шагу и создадим Условие “Если любое значение равно указанному значению”, и в качестве первого значения укажем такую функцию:

Снимок экрана 2013-03-08 в 20.07.06

.. а в качестве равно укажем “Одобряю”:

Снимок экрана 2013-03-08 в 20.08.25

В качестве первого Действия выполним отправку почты:

Снимок экрана 2013-03-09 в 12.17.26

Затем выполним действие получения решения от User3, по аналогии с получением решения от User2. Также сделаем и с переменной:

Снимок экрана 2013-03-09 в 12.37.17

.. Но если решение User2 буде отрицательным, мы должны будем отправить письмо-уведомление User4, для этого добавим к условию ветвь Else If :

Снимок экрана 2013-03-09 в 12.59.23

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

Добавим Условие если любое значение равно указанному значению и в качестве первого значения введем такую функцию:

Снимок экрана 2013-03-09 в 13.06.10

А в качестве второго значения “Одобряю”. Действие будет отправка письма User2 и User4.

Добавим к условию альтернативную ветвь Else If , а в качестве действия отправка письма User2.

Таким образом, весь процесс выглядит вот так:

Снимок экрана 2013-03-09 в 14.31.42

Проверим, сохраним и опубликуем рабочий процесс. Даже если проверка прошла успешно, публикация может не состояться, обратите внимание на связи веток Else If, они должны быть такие же как на моем скриншете.

Затем залогинимся на наш портал с правами администратора и добавим процесс к библиотеке, введем приемлемое имя, созададим новый список задач и журнал :

Снимок экрана 2013-03-09 в 14.37.13

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

Снимок экрана 2013-03-09 в 17.17.29

Теперь зайдем на портал под User1 и начнем отработку сценария с запуска рабочего процесса вручную:

Снимок экрана 2013-03-09 в 17.25.49

Снимок экрана 2013-03-09 в 17.26.41

Заглянем в почтовый ящик User2 и убедимся что пришло уведомление:

Снимок экрана 2013-03-09 в 17.33.25

Откроем задачу, примем решение, напишем комментарий и завершим задачу:

Снимок экрана 2013-03-09 в 17.35.32

.. после чего зайдем на почту  User3 и убедимся что он получил подтверждение о том что User2 дал положительный ответ и вторым письмом получил приглашение дать свою рецензию:

Снимок экрана 2013-03-09 в 17.44.53

Предположим что User3 отправляет документ на доработку:

Снимок экрана 2013-03-09 в 17.49.23

Как и планировалось, об этом получает уведомление User2:

Снимок экрана 2013-03-09 в 17.52.39

Предположим что User4 хочет посмотреть как выполняется процесс, для этого он заходит в нужную библиотеку и кликает на состояние рабочего процесса:

Снимок экрана 2013-03-09 в 17.56.32

.. где видит подробную информацию о выполненных действиях:

Снимок экрана 2013-03-09 в 17.58.51

Например нажав на Решение User3 можно будет увидеть:

Снимок экрана 2013-03-09 в 18.02.01

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

Надеюсь озвученная информация будет полезной, а если нужна будет помощь — используйте форму на главной странице моего сайта.