Sharepoint 2013: Автоматическая переадресация задач согласования (рабочих процесса)

Стояла задача, реализовать механизм автоматической переадресации задач согласования на других сотрудников (примеру, на период нахождения их в отпуске). Как это должно выглядеть: сотрудник, перед выходом в отпуск, в параметрах своего профиля указывает замещающего его сотрудника и с этого момента все назначаемые на него задачи будут переадресовываться на заместителя. Под катом мой вариант решения.

Этапы реализации

  • В параметрах профиля дать возможность сотрудникам указать заменяющего их пользователя (отдельное поле)
  • Написать sql-функцию, которая бы принимала в качестве параметра почтовый адрес сотрудника, а возвращала имя замещающего его сотрудника (в случае, если заместитель не указан, возвращала переданный почтовый адрес).
  • В задачах рабочих процессов, при назначении, SQL запросом вызывать функцию для исполнителя (Текущая задача:Кому назначено (почтовый адрес)) , а результат указывать в качестве исполнителя.

Реализация

1. Добавить поле Переадресация задачи в профиле пользователя

  1. В Центр администрирования Sharepoint 2013 -> Управление приложениями -> Управление приложениями службами -> Приложение-служба профилей пользователей -> Управление свойствами пользователей
  2. Вместо того, чтобы создавать новое поле я просто переименовал одно из существующих, но неиспользуемое. Это поле Помощник (Assistant). Навел на поле и выбрал Изменить 
    p.s. по понятным причинам, меню редактирования полей не отображалось в Internet Explorer и мне пришлось открыть эту страницу в другом браузере (Google Chrome).
  3. Помимо названия поля необходимо задать еще и видимость и доступность внесения изменений:

2. Написать SQL функцию

Функция будет принимать в качестве входного параметра почтовый адрес пользователя, а возвращать значение указанное в поле Переадресация задачи его профиля. Данные с профиля пользователей хранятся в таблице UserProfileValue и каждое поле имеет свой идентификатор. Не сложным способом удалось выяснить, что идентификатор моего поля равен 21. Далее код функции:

CREATE FUNCTION [dbo].[F_GetDeputyByEmail] (
 @userName nvarchar(255)
) returns nvarchar(255)

BEGIN

DECLARE @result nvarchar(255)

SELECT @result=isNull(CAST(UPV.PropertyVal as nvarchar(255)),'')
FROM [SP13_Profile_DB].[dbo].[UserProfile_Full] UPF
left join [SP13_Profile_DB].[dbo].[UserProfileValue] UPV  on UPV.PropertyID = 21 and UPV.RecordID=UPF.[RecordID]
where Email like '%'+@userName+'%';

RETURN @result
 
END

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

3. Вызов функции из задачи рабочего процесса

  • В рабочем процессе добавить Настраиваемый рабочий процесс
  • В свойствах настраиваемого рабочего процесса перейти в раздел Изменение поведения одной задачи
  • В блоке При откладывании задачи добавить действие SQL запрос (вернуть поле Кому назначено как Почтовый адрес):
SELECT [dbo].[F_GetDeputyByEmail]('[%Текущая задача: Кому назначено%]')
  • Результат записать в переменную actLogin
  • Добавить условие Если actLogin Не пусто то 
  • При выполнении условия добавить действие Переназначить на [%actLogin%]

Важно помнить, что необходимо будет обновить все рабочие процессы. И еще то, что переадресация не будет доступна для уже запущенных ранее процессов.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Чтобы убедиться, что вы являетесь человеком, а не спам-ботом, введите ответ в нижеследующее окно, основанное на инструкциях, содержащихся на графике.