Автоматичне надання доступу до запису в Dataverse за допомогою Power Automate

Привіт дорогий читач, дана стаття буде присвячена створенню потоку (flow) в Power Automate – мета якого надати доступ до запису конкретному користувачеві або групу користувачів, в Dataverse, тож поїхали.

Уявімо ситуацію, коли наприклад у додатку MDA (model driven app) у вас є необхідність, при досягненні якихось показників, надати доступ до цього запису користувачеві або групі користувачів. Оскільки я працюю в LEO Consulting, звичайно, моїм прикладом буде таблиця Проекти

Так ось, уявимо таку ситуацію: нам потрібно відправити email і поділитися даним записом проекту з одним користувачем і групою користувачів, якщо поле Project type by budget (Тип проекту з бюджету) дорівнює наприклад “Середній”.
Почнемо будувати потік.

Перше, що нам потрібно зробити, це визначити тригер, або відповімо на запитання чому наш потік почне спрацьовувати, для цього виберемо тип зміни “Оновлення”. У фільтрі стовпців нам потрібно обмежити ситуації, в яких даний потік буде спрацьовувати, по-перше виберемо поле за яким будуть фільтруватись зміни, далі уточнюємо значення в даному полі і тут є маленький нюанс, якщо у вас у поле значення береться з випадаючого списку або Choices.

Створюємо потік на основі тригера Dataverse record Update

Dataverse зберігає значення не в текстовому форматі (як бачить це користувач), а цифровому, відповідно нам необхідно подивитися і скопіювати це значення.
Йдемо в Дані (Data) і вибираємо Choices, далі знаходимо назву нашого списку або Choice і в списку значень натискаємо 3 точки, далі view more і дивимося який цифровий код там міститься, копіюємо його.

Вилучаємо цифрове значення з варіантів списку, що випадає

В фільтрі використовуємо оператор eq скорочено від equal або дорівнює.

Далі я віддаю перевагу ініціалізувати змінну для групи користувачів, хоча це необов’язково, унікальний ідентифікатор групи або ID можна встановити вручну вже в коді. Де взяти цей унікальний ідентифікатор групи?
Створюємо групу або якщо у вас вже є існуюча група.
Йдемо до Налаштувань – Advances Settings.

Меню додаткових налаштувань

Тут нам знадобляться налаштування безпеки.

Далі вибираємо Робочі групи або Teams, у списку груп необхідно вибрати групу користувачів, з якими ми хочемо поділитися записом.
Звертаю вашу увагу, що групи бувають різних типів (Security Group, Office 365…) – відповідно доки ми не переключимо подання, ми можемо нашу групу не побачити.

Перелік команд

Також список команд у середовищі можна побачити через адміністрування за адресою: admin.powerplatform.com.
Відкривши команду або робочу групу ми можемо знайти ID групи в адресному рядку, наприклад:
https://%5Benvurl%5D.crm4.dynamics.com/main.aspx?appid=6d327c79-b91d-eb11-a813-000d3a3a19dc&forceUCI=1&newWindow=true&pagetype=entityrecord&etn=team&id=a2a5c6a1-d792-eb11-b1ac-002248831db0

Копіюємо ID робочої групи з адресного рядка

Далі нам необхідно додати дві дії, перша надіслати повідомлення користувачу на електронну пошту – дія Send an email notification (V3) , а друге поділитися цим записом з групою Perform an unbound action.

Надсилання листа та надання доступу

Для зручності створення потоку вставляю текст скрипту нижче.

{
“Principal”: {
“teamid”: “@{variables(‘TeamID’)}”,
“@odata.type”: “Microsoft.Dynamics.CRM.team”
},
“AccessMask”: “ReadAccess,WriteAccess”
}

Є нюанс, при збереженні у вас швидше за все буде помилка в коді, потрібно додати ще один символ @, щоб вийшло так: “@@odata.type”: “Microsoft.Dynamics.CRM.team” – після цього збереження відбувається без помилок .
Також у полі Target, зверніть увагу, назва вашої таблиці має бути у множині.

Регулювання типу доступу до запису відбувається за допомогою оператора “AccessMask”, доступ може бути виданий на рівні “ReadAccess, WriteAccess, DeleteAccess, AppendAccess, AppendToAccess, ShareAccess”.
У моєму прикладі доступ видається для читання та редагування.

Також давайте поділимося цим записом з безпосереднім користувачем, звичайно ж для початку необхідно скопіювати ID користувача. Це можна зробити за допомогою Додаткові налаштування – Безпека – Користувачі , по тому ж шляху описаному вище або через make.powerapps.com меню Data – Tables – User і відкрити потрібного нам користувача.

Копіюємо ID користувача

Відмінність буде лише у налаштуваннях дії, а саме:

{
“Principal”: {
“systemuserid”: “e995828e-c91b-eb11-a813-000d3a2c5ed7”,
“@odata.type”: “Microsoft.Dynamics.CRM.systemuser”
},
“AccessMask”: “ReadAccess,WriteAccess”
}

Ділимося записом з Користувачем

Доступ до запису також регулюється як описано вище для команд.

Результат можна побачити за допомогою кнопки Share, у спливаючому вікні побачимо, кому видано доступ до запису та з якими правами, у разі потреби доступ можна заборонити просто вилучивши рядок.

Перегляд виданих доступів до запису

Сподіваюся, цей пост допоможе автоматизувати гнучку видачу прав доступу до окремих записів у таблицях.

AdvancedSearch agile AI AITrends business customview devops digital-marketing dynamics365 portals FetchXML finance idea leadership ListRows microsoft modeldriven ms365 msoffice365 office365 OKR PIPlanning PM POrtfolio Powerapps powerapps blog powerapps portal powerapps блог PowerAutomate powerbi PowerPlatform Progra Program project ProjectManagement projectrequest SAFE Strategy technology Transformation ukraine ukrainian портал dynamics 365

Leave a comment