Добрый день всем! Сегодня я бы хотел поделиться небольшим примером автоматизации процесса создания заявок на выход новых сотрудников с использованием продуктов Microsoft SharePoint, PowerApps, Power Automate и Teams. При реализации данного процесса не потребуется покупка отдельных пользовательских планов PowerApps и Power Automate, достаточно будет подписки Office365 E1/E3/E5. На сайте SharePoint создадим списки и столбцы, PowerApps поможет сделать форму, а Power Automate предоставит возможности для настройки логики бизнес-процессов. Итоговый процесс подключим к команде MS Teams. Давайте не будем терять время и посмотрим, что из этого выйдет.
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
На первом этапе создаем списки и реквизиты. Нам потребуются списки:
Каждый список в дальнейшем сыграет свою роль, и мы увидим какую именно. Создаем реквизиты и настраиваем меню навигации:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
Теперь, давайте сделаем форму для списка «Заявки на выход сотрудника» с использованием PowerApps. В итоговом виде она будет выглядеть вот так:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
В поле «Сотрудник» осуществляется выбор из перечня пользователей Office 365, «Дата выхода» указывается из календаря, «Подразделение» указывается из справочника подразделений, а «HR» выбирается из справочника «HR по подразделениям»:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
Но необходимо сделать так, чтобы перечень HR, доступных для выбора, фильтровался по указанному на форме подразделению. Воспользуемся формулой для фильтрации данных в PowerApps. Для свойства «Items» поля «HR» пишем:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
Дополнительно, на форме можно сделать небольшие настройки значения по умолчанию для поля Статус. Для свойства «Default» поля «Статус» пишем:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
Если открывается форма создания элемента, то в поле «Статус» будет записано значение «Новая», иначе, в поле статус на форме будет произведена подстановка значения из столбца SharePoint для текущего элемента.
Одной из проблем PowerApps является невозможность легко получить данные из групп SharePoint. В связи с этим не удается легко настроить видимость/доступность полей или объектов на форме если вы хотели завязаться на вхождение пользователя в группу SharePoint. Но можно совершить обходной маневр. Специально для этого мы с Вами заранее создали список Администраторы:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
В данном списке присутствует поле «Сотрудник» с типом «Пользователь или группа», отображаемое только на форме и поле «Название», в которое пишется имя выбранного сотрудника, отображаемое только в представлении списка. Теперь, давайте, в PowerApps провернем небольшой трюк. Например, можно настроить доступность любого поля на условие наличия текущего пользователя в списке Администраторы. Находим свойство «Display Mode» поля «Дата выхода» и пишем:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
Согласно данной формуле, если в списке Администраторы есть хотя бы один сотрудник, логин которого совпадает с логином текущего пользователя, то поле будет доступно на редактирование, иначе, на просмотр. Для большей надежности приводим логин к нижнему регистру, а то всякие случаи бывают.
Вы могли заметить, что в заголовке формы есть кнопка «Действия над заявкой»:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
Данная кнопка будет осуществлять переход на другой экран, где, для удобства, собраны все возможные действия над заявкой:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
После нажатия на каждую кнопку открывается дополнительное окно действий, например, если выбрано действие «Отменить заявку», то открывается дополнительное окно с возможностью ввода комментария:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
После нажатия на кнопку «Подтвердить» меняется статус заявки, причем, это возможно сделать даже без запуска Power Automate потока. Воспользуемся функцией «Patch» для свойства «OnSelect» кнопки:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
С помощью функции Patch мы обновляем элемент списка заявок, отфильтровав его по идентификатору текущего элемента. Осуществляем смену значения поля «Статус» и производим переход на основной экран. Для остальных кнопок действий логика аналогичная.
Осталось настроить поток согласования. Сделаем его в самом простом виде.
Наш поток согласования будет запускаться автоматически при создании заявки. В ходе выполнения будет происходить смена статуса заявки, получение руководителя подразделения и отправка почтового уведомления о новой заявке руководителю. Для определения руководителя у нас есть справочник «Подразделения»:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
Создаем Power Automate поток:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
В ходе выполнения данного потока руководитель подразделения получает почтовое уведомление о создании новой заявки и может перейти по ссылке, чтобы принять решение, нажав на кнопку:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
Нажатие кнопки «Согласовать» или «Отклонить» также приводит к запуску Power Automate потока, который производит смену статуса заявки и отправку почтового уведомления специалисту HR:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
Процесс готов.
И финальный штрих – организация совместной работы с данным процессом. Для этого подключаем процесс к команде MS Teams:
![](/web/20211201093657im_/https://habr.com/img/image-loader.svg)
Теперь, у всех участников команды MS Teams, есть доступ к процессу выхода новых сотрудников на отдельной вкладке.
Конечно, в логике потока можно предусмотреть многоступенчатое согласование, плюс есть возможность использовать компонент Approvals для назначения задач Power Automate. Также можно настроить отчеты и сформировать уведомления, которые будут отправляться в чат-бота Microsoft Teams. Но об этом в следующих статьях. Спасибо за внимание и хорошего всем дня!
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/e-/by/t1/e-byt1bfrywvuok7gx25kggbvj8.png)
На первом этапе создаем списки и реквизиты. Нам потребуются списки:
- Заявки на выход сотрудников
- Подразделения
- HR по подразделениям
- Администраторы
Каждый список в дальнейшем сыграет свою роль, и мы увидим какую именно. Создаем реквизиты и настраиваем меню навигации:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/hw/jt/gh/hwjtghqjoqtymuuvhezpyvggsck.png)
PowerApps
Теперь, давайте сделаем форму для списка «Заявки на выход сотрудника» с использованием PowerApps. В итоговом виде она будет выглядеть вот так:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/2e/zy/wo/2ezywokrmvzpfm_5vxbx1u4lzj8.png)
В поле «Сотрудник» осуществляется выбор из перечня пользователей Office 365, «Дата выхода» указывается из календаря, «Подразделение» указывается из справочника подразделений, а «HR» выбирается из справочника «HR по подразделениям»:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/ni/aj/e8/niaje8qtx9zko2sk9c6x2wx5g7o.png)
Но необходимо сделать так, чтобы перечень HR, доступных для выбора, фильтровался по указанному на форме подразделению. Воспользуемся формулой для фильтрации данных в PowerApps. Для свойства «Items» поля «HR» пишем:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/qk/o-/p7/qko-p70_444xwyltuxby8fqduko.png)
Дополнительно, на форме можно сделать небольшие настройки значения по умолчанию для поля Статус. Для свойства «Default» поля «Статус» пишем:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/b4/zg/ic/b4zgic7k4bvev-uadqina0ni4ey.png)
Если открывается форма создания элемента, то в поле «Статус» будет записано значение «Новая», иначе, в поле статус на форме будет произведена подстановка значения из столбца SharePoint для текущего элемента.
Одной из проблем PowerApps является невозможность легко получить данные из групп SharePoint. В связи с этим не удается легко настроить видимость/доступность полей или объектов на форме если вы хотели завязаться на вхождение пользователя в группу SharePoint. Но можно совершить обходной маневр. Специально для этого мы с Вами заранее создали список Администраторы:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/bn/3m/se/bn3mseql4chpxozeu_gbtacxyqy.png)
В данном списке присутствует поле «Сотрудник» с типом «Пользователь или группа», отображаемое только на форме и поле «Название», в которое пишется имя выбранного сотрудника, отображаемое только в представлении списка. Теперь, давайте, в PowerApps провернем небольшой трюк. Например, можно настроить доступность любого поля на условие наличия текущего пользователя в списке Администраторы. Находим свойство «Display Mode» поля «Дата выхода» и пишем:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/2e/0m/8d/2e0m8dqb8ydddbxeod7zedmknui.png)
Согласно данной формуле, если в списке Администраторы есть хотя бы один сотрудник, логин которого совпадает с логином текущего пользователя, то поле будет доступно на редактирование, иначе, на просмотр. Для большей надежности приводим логин к нижнему регистру, а то всякие случаи бывают.
Вы могли заметить, что в заголовке формы есть кнопка «Действия над заявкой»:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/wp/0b/wc/wp0bwcymw4vo7wg_gkegu0qg50s.png)
Данная кнопка будет осуществлять переход на другой экран, где, для удобства, собраны все возможные действия над заявкой:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/to/0s/wk/to0swknwraznhohevjatxjoh06y.png)
После нажатия на каждую кнопку открывается дополнительное окно действий, например, если выбрано действие «Отменить заявку», то открывается дополнительное окно с возможностью ввода комментария:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/cf/c8/wg/cfc8wgn2v64qdqq3-pugswtxmti.png)
После нажатия на кнопку «Подтвердить» меняется статус заявки, причем, это возможно сделать даже без запуска Power Automate потока. Воспользуемся функцией «Patch» для свойства «OnSelect» кнопки:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/s5/l4/yj/s5l4yjpdm_2uedemovmggtq9_8g.png)
С помощью функции Patch мы обновляем элемент списка заявок, отфильтровав его по идентификатору текущего элемента. Осуществляем смену значения поля «Статус» и производим переход на основной экран. Для остальных кнопок действий логика аналогичная.
Осталось настроить поток согласования. Сделаем его в самом простом виде.
Power Automate
Наш поток согласования будет запускаться автоматически при создании заявки. В ходе выполнения будет происходить смена статуса заявки, получение руководителя подразделения и отправка почтового уведомления о новой заявке руководителю. Для определения руководителя у нас есть справочник «Подразделения»:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/sb/vc/7h/sbvc7hsibhkxeyikwhsulhunmge.png)
Создаем Power Automate поток:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/vx/u9/i0/vxu9i0iosnwmf4qj331z1hxusli.png)
В ходе выполнения данного потока руководитель подразделения получает почтовое уведомление о создании новой заявки и может перейти по ссылке, чтобы принять решение, нажав на кнопку:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/ba/aa/q6/baaaq6wl23ypaz_bj_cbo2u6zfo.png)
Нажатие кнопки «Согласовать» или «Отклонить» также приводит к запуску Power Automate потока, который производит смену статуса заявки и отправку почтового уведомления специалисту HR:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/78/xh/qd/78xhqdkb6lulsmt-ah9ciq3bgls.png)
Процесс готов.
Teams
И финальный штрих – организация совместной работы с данным процессом. Для этого подключаем процесс к команде MS Teams:
![](https://webcf.waybackmachine.org/web/20211201093657/https://habrastorage.org/webt/ky/v1/-v/kyv1-v3g_x_rzqpyz8dsgrfvnmy.png)
Теперь, у всех участников команды MS Teams, есть доступ к процессу выхода новых сотрудников на отдельной вкладке.
Конечно, в логике потока можно предусмотреть многоступенчатое согласование, плюс есть возможность использовать компонент Approvals для назначения задач Power Automate. Также можно настроить отчеты и сформировать уведомления, которые будут отправляться в чат-бота Microsoft Teams. Но об этом в следующих статьях. Спасибо за внимание и хорошего всем дня!