Добрый день всем! Сегодня я бы хотел поделиться небольшим примером автоматизации процесса создания заявок на выход новых сотрудников с использованием продуктов Microsoft SharePoint, PowerApps, Power Automate и Teams. При реализации данного процесса не потребуется покупка отдельных пользовательских планов PowerApps и Power Automate, достаточно будет подписки Office365 E1/E3/E5. На сайте SharePoint создадим списки и столбцы, PowerApps поможет сделать форму, а Power Automate предоставит возможности для настройки логики бизнес-процессов. Итоговый процесс подключим к команде MS Teams. Давайте не будем терять время и посмотрим, что из этого выйдет.

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

Теперь, давайте сделаем форму для списка «Заявки на выход сотрудника» с использованием PowerApps. В итоговом виде она будет выглядеть вот так:

В поле «Сотрудник» осуществляется выбор из перечня пользователей Office 365, «Дата выхода» указывается из календаря, «Подразделение» указывается из справочника подразделений, а «HR» выбирается из справочника «HR по подразделениям»:

Но необходимо сделать так, чтобы перечень HR, доступных для выбора, фильтровался по указанному на форме подразделению. Воспользуемся формулой для фильтрации данных в PowerApps. Для свойства «Items» поля «HR» пишем:

Дополнительно, на форме можно сделать небольшие настройки значения по умолчанию для поля Статус. Для свойства «Default» поля «Статус» пишем:

Если открывается форма создания элемента, то в поле «Статус» будет записано значение «Новая», иначе, в поле статус на форме будет произведена подстановка значения из столбца SharePoint для текущего элемента.
Одной из проблем PowerApps является невозможность легко получить данные из групп SharePoint. В связи с этим не удается легко настроить видимость/доступность полей или объектов на форме если вы хотели завязаться на вхождение пользователя в группу SharePoint. Но можно совершить обходной маневр. Специально для этого мы с Вами заранее создали список Администраторы:

В данном списке присутствует поле «Сотрудник» с типом «Пользователь или группа», отображаемое только на форме и поле «Название», в которое пишется имя выбранного сотрудника, отображаемое только в представлении списка. Теперь, давайте, в PowerApps провернем небольшой трюк. Например, можно настроить доступность любого поля на условие наличия текущего пользователя в списке Администраторы. Находим свойство «Display Mode» поля «Дата выхода» и пишем:

Согласно данной формуле, если в списке Администраторы есть хотя бы один сотрудник, логин которого совпадает с логином текущего пользователя, то поле будет доступно на редактирование, иначе, на просмотр. Для большей надежности приводим логин к нижнему регистру, а то всякие случаи бывают.
Вы могли заметить, что в заголовке формы есть кнопка «Действия над заявкой»:

Данная кнопка будет осуществлять переход на другой экран, где, для удобства, собраны все возможные действия над заявкой:

После нажатия на каждую кнопку открывается дополнительное окно действий, например, если выбрано действие «Отменить заявку», то открывается дополнительное окно с возможностью ввода комментария:

После нажатия на кнопку «Подтвердить» меняется статус заявки, причем, это возможно сделать даже без запуска Power Automate потока. Воспользуемся функцией «Patch» для свойства «OnSelect» кнопки:

С помощью функции Patch мы обновляем элемент списка заявок, отфильтровав его по идентификатору текущего элемента. Осуществляем смену значения поля «Статус» и производим переход на основной экран. Для остальных кнопок действий логика аналогичная.
Осталось настроить поток согласования. Сделаем его в самом простом виде.
Наш поток согласования будет запускаться автоматически при создании заявки. В ходе выполнения будет происходить смена статуса заявки, получение руководителя подразделения и отправка почтового уведомления о новой заявке руководителю. Для определения руководителя у нас есть справочник «Подразделения»:

Создаем Power Automate поток:

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

Нажатие кнопки «Согласовать» или «Отклонить» также приводит к запуску Power Automate потока, который производит смену статуса заявки и отправку почтового уведомления специалисту HR:

Процесс готов.
И финальный штрих – организация совместной работы с данным процессом. Для этого подключаем процесс к команде MS Teams:

Теперь, у всех участников команды MS Teams, есть доступ к процессу выхода новых сотрудников на отдельной вкладке.
Конечно, в логике потока можно предусмотреть многоступенчатое согласование, плюс есть возможность использовать компонент Approvals для назначения задач Power Automate. Также можно настроить отчеты и сформировать уведомления, которые будут отправляться в чат-бота Microsoft Teams. Но об этом в следующих статьях. Спасибо за внимание и хорошего всем дня!

На первом этапе создаем списки и реквизиты. Нам потребуются списки:
- Заявки на выход сотрудников
- Подразделения
- HR по подразделениям
- Администраторы
Каждый список в дальнейшем сыграет свою роль, и мы увидим какую именно. Создаем реквизиты и настраиваем меню навигации:

PowerApps
Теперь, давайте сделаем форму для списка «Заявки на выход сотрудника» с использованием PowerApps. В итоговом виде она будет выглядеть вот так:

В поле «Сотрудник» осуществляется выбор из перечня пользователей Office 365, «Дата выхода» указывается из календаря, «Подразделение» указывается из справочника подразделений, а «HR» выбирается из справочника «HR по подразделениям»:

Но необходимо сделать так, чтобы перечень HR, доступных для выбора, фильтровался по указанному на форме подразделению. Воспользуемся формулой для фильтрации данных в PowerApps. Для свойства «Items» поля «HR» пишем:

Дополнительно, на форме можно сделать небольшие настройки значения по умолчанию для поля Статус. Для свойства «Default» поля «Статус» пишем:

Если открывается форма создания элемента, то в поле «Статус» будет записано значение «Новая», иначе, в поле статус на форме будет произведена подстановка значения из столбца SharePoint для текущего элемента.
Одной из проблем PowerApps является невозможность легко получить данные из групп SharePoint. В связи с этим не удается легко настроить видимость/доступность полей или объектов на форме если вы хотели завязаться на вхождение пользователя в группу SharePoint. Но можно совершить обходной маневр. Специально для этого мы с Вами заранее создали список Администраторы:

В данном списке присутствует поле «Сотрудник» с типом «Пользователь или группа», отображаемое только на форме и поле «Название», в которое пишется имя выбранного сотрудника, отображаемое только в представлении списка. Теперь, давайте, в PowerApps провернем небольшой трюк. Например, можно настроить доступность любого поля на условие наличия текущего пользователя в списке Администраторы. Находим свойство «Display Mode» поля «Дата выхода» и пишем:

Согласно данной формуле, если в списке Администраторы есть хотя бы один сотрудник, логин которого совпадает с логином текущего пользователя, то поле будет доступно на редактирование, иначе, на просмотр. Для большей надежности приводим логин к нижнему регистру, а то всякие случаи бывают.
Вы могли заметить, что в заголовке формы есть кнопка «Действия над заявкой»:

Данная кнопка будет осуществлять переход на другой экран, где, для удобства, собраны все возможные действия над заявкой:

После нажатия на каждую кнопку открывается дополнительное окно действий, например, если выбрано действие «Отменить заявку», то открывается дополнительное окно с возможностью ввода комментария:

После нажатия на кнопку «Подтвердить» меняется статус заявки, причем, это возможно сделать даже без запуска Power Automate потока. Воспользуемся функцией «Patch» для свойства «OnSelect» кнопки:

С помощью функции Patch мы обновляем элемент списка заявок, отфильтровав его по идентификатору текущего элемента. Осуществляем смену значения поля «Статус» и производим переход на основной экран. Для остальных кнопок действий логика аналогичная.
Осталось настроить поток согласования. Сделаем его в самом простом виде.
Power Automate
Наш поток согласования будет запускаться автоматически при создании заявки. В ходе выполнения будет происходить смена статуса заявки, получение руководителя подразделения и отправка почтового уведомления о новой заявке руководителю. Для определения руководителя у нас есть справочник «Подразделения»:

Создаем Power Automate поток:

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

Нажатие кнопки «Согласовать» или «Отклонить» также приводит к запуску Power Automate потока, который производит смену статуса заявки и отправку почтового уведомления специалисту HR:

Процесс готов.
Teams
И финальный штрих – организация совместной работы с данным процессом. Для этого подключаем процесс к команде MS Teams:

Теперь, у всех участников команды MS Teams, есть доступ к процессу выхода новых сотрудников на отдельной вкладке.
Конечно, в логике потока можно предусмотреть многоступенчатое согласование, плюс есть возможность использовать компонент Approvals для назначения задач Power Automate. Также можно настроить отчеты и сформировать уведомления, которые будут отправляться в чат-бота Microsoft Teams. Но об этом в следующих статьях. Спасибо за внимание и хорошего всем дня!