Jak automatycznie kończyć zadania zatwierdzania w Power Automate i Microsoft Teams
Table of Contents
Pisząc mój poprzedni post dotyczący pracy z zadaniami w Power Automate, zdałem sobie sprawę, że w tabeli Flow Approval istnieje kolumna o nazwie Flow Notification URI, której do tej pory naprawdę nie doceniałem. Pokażę teraz, jaka drzemie w niej moc!
Do dziś byłem prawie pewien, że nie da się automatycznie ukończyć zadania w Power Automate/Microsoft Teams, a także wznowić procesu, który czeka na zatwierdzenie. Okazuje się, że naprawdę się myliłem.
Trochę podstaw
Za każdym razem, gdy przepływ pracy zawierający akcję, która przypisuje zadanie i czeka na jego zakończenie, jest wykonywany, nie tylko tworzy wpisy w tabelach Approval i Approval Request, ale także w Flow Approval. Co więcej, każdy wpis w tej ostatniej tabeli zawiera wartość w kolumnie o nazwie Flow Notification URI
, który po wywołaniu z żądaniem POST po prostu kończy oczekiwanie i wznawia przepływ:
Adres URL jest zbudowany z następujących składowych (większość z nich pochodzi z innych kolumn tabeli Flow Approval):
https://[instancja].westeurope.logic.azure.com/workflows/[Flow Id]/runs/[Flow Run Sequence Id]/actions/[Nazwa akcji czekającej na zakończenie]/run?api-version=2016-06-01&sp=%2Fruns%2F[Flow Run Sequence Id]%2Factions%2F[
Nazwa akcji czekającej na zakończenie
]%2Frun%2C%2Fruns%2F[Flow Run Sequence Id]%2Factions%2F[Nazwa akcji czekającej na zakończenie
]%2Fread&sv=1.0&sig=[klucz podpisujący żądanie]
Co dalej?
Wiedząc, że wysłanie żądania POST do tego adresu URL kończy oczekiwanie i wznawia przepływ, otwiera zupełnie nowy zakres scenariuszy, które można zbudować wokół podstawowych zadań akceptacji, na przykład przy użyciu niestandardowych aplikacji Power Apps. Wyobraź sobie tylko niektóre z nich:
- Zatwierdzanie w imieniu innej osoby,
- Oczekiwanie na większość odpowiedzi, nie wszystkich,
- Kończenie zatwierdzania w dowolnym momencie,
- I wiele, wiele innych!
Celem jest, aby najpierw zapisać i zaktualizować dane we wszystkich innych tabelach, z których korzystają Approvals (o których mowa w moim poście tutaj), uzyskać wszystkie informacje potrzebne do wysłania w odpowiedzi, a następnie wykonać POST do Notification URI.
Ponadto, wykonując taki POST, upewnij się, że jest zgodny z oczekiwanym formatem JSON i że umieściłeś „Content-Type: application/json”
jako nagłówek:
{
"responses":[
{
"responder":{
"id":"GUID z tabeli Users",
"displayName":"Imię kończącego zadanie",
"email":"Mail kończącego zadanie",
"tenantId":"Tenant ID",
"userPrincipalName":"Principal name kończącego zadanie"
},
"requestDate":"Timestamp",
"responseDate":"Timestamp",
"approverResponse":"Wynik zadania",
"comments":"Komentarz"
}
],
"responseSummary":"Tekst będący zlepkiem informacji o każdym zadaniu, kto, kiedy i z jakim wynikiem.",
"completionDate":"Timestamp",
"outcome":"Ogólny wynik zatwierdzania",
"name":"Approval ID z tabeli Approval",
"title":"Nazwa zadania",
"details":"Opis zadania",
"requestDate":"Timestamp",
"expirationDate":"Timestamp"
}
Po wysłaniu takiego POST akcja zakończy oczekiwanie i wyświetli wszystkie dane jako dynamiczne wyniki, tak jakby została zakończona za pomocą interfejsu zadania:
Mam nadzieję, że ten post cię tak saom podekscytował, jak mnie, gdy odkryłem tę możliwość. Daj znać w komentarzach, jakie scenariusze jesteś w stanie teraz zrealizować!