Microsoft Flow

To może wydawać się banalne, ale gdy zechcesz stworzyć Flow, który jest uniwersalny i pozwala na dodawanie użytkowników do dowolnej grupy Office 365, przyjmując jej nazwę jako parametr, okazuje się, że nie jest to już tak proste.

W Microsoft Flow istnieje zestaw akcji pozwalający na pracę z grupami Office 365. Wśród nich znajduje się jedna, dedykowana do dodawania jej członków (wyłącznie na poziomie „member”. Aktualnie nie istnieje możliwość dodawania na poziomie „Owner”).

Akcja „Add member to group”

Nie potrafię powiedzieć, od kiedy jest ona dostępna, jednak wydaje mi się, że została dodana na początku tego roku, biorąc pod uwagę iż wszystkie pytania dotyczące sposobu dodawania członków grup Office 365 używając Flow, zadane na forum w ciągu 2017 roku, zostały oznaczone jako „odpowiedziane” poprzez komentarz „zrób to używając PowerShell”.

W każdym razie, akcja potrzebuje dwóch parametrów do działania:

  1. Group Id – wartość tego pola może zostać wybrana z listy, jednak wówczas flow ograniczy swoje działanie do jednej i konkretnej grupy, nie będzie więc sparametryzowany. Wartość można także przekazać poprzez zmienną, jednak musi to być ID grupy. Ponieważ większość z nas zna nazwę grupy lub jej e-mail, to jednak jest to za mało, by akcja zadziałała (zwraca błąd 400, Bad Request). Zrozumiałem, że tutaj faktycznie trzeba podać po prostu GUID grupy Office 365.
  2. User’s Email – nie ma tu nic więcej do dodania.

Throttling

Przeczytaj uważnie i zapamiętaj!

Miej na uwadze, że odpytywanie grup Office 365 z Flow podlega throttlingowi. Po wykonaniu 100 zapytań podczas połączenia, Flow musi zaczekać minutę, przed wykonaniem kolejnego zapytania (źródło). Także w sytuacji, gdy flow ma dodać ponad 100 userów do grupy, musisz dodać również akcję „pause”, by zatrzymać go na minutę. Po prostu pamiętaj o tym.

Jak uzyskać ID grupy Office 365 we Flow?

Naturalnie należy zapytać o nie Microsoft Graph API. Ja robię to używając akcji „HTTP” i wysyłając zapytanie „GET” do poniższego adresu URL:

https://graph.microsoft.com/v1.0/groups?$filter=mailNickname eq '@{body('Parse_input_body')?['groupName']}'

W którym „body(‚Parse_input_body’)?[‚groupName’]” jest nazwą grupy (z adresu e-mail grupy, przed znakiem @), przekazaną jako parametr wyzwalający przepływ.

Akcja uwierzytelnia to zapytanie korzystając z Active Directory OAuth. By móc się w ten sposób uwierzytelnić, musisz podać dane zarejestrowanej w Azure Active Directory aplikacji, posiadającej niezbędne uprawnienia:

HTTP action configuration to get O365 Group ID

Przeczytaj poniżej, jak i skąd otrzymać niezbędne ID-ki.

Rejestracja aplikacji w AAD z uprawnieniami do Graph API

  1. Otwórz serwis Azure Active Directory i kliknij „App registrations”, następnie przycisk „New application registration”.

    Create new app registration in AAD
    Wprowadź nazwę aplikacji i „http://localhost” jako jej „Sign-on URL”.
    To krytycznie ważne. Jeśli podasz inny adres URL, który nie jest osiągalny dla Twojego Flow (np. adres strony wymagającej uwierzytelnienia), wówczas Flow nie będzie w stanie uzyskać tokenu OAuth.
  2. Następnie kliknij na nazwę stworzonej aplikacji i w ikonę „Settings”, a następnie „Required permissions” i „Add”:

    Grant Azure AD app permissions
  3. Następnie kliknij „Select an API” i dalej wybierz „Microsoft Graph”. Następnie „Select Permissions” i wybierz poniższe dwa uprawnienia z grupy „APPLICATION PERMISSIONS” (źródło):
    1. Read and write all groups
    2. Read and write directory data
  4. Teraz wróć do karty „Settings” i otwórz „Keys”. Wprowadź nazwę klucza, wybierz czas jego ważności i naciśnij „Save”. Po zapisie w kolumnie „Value” pojawi się wartość klucza. Skopiuj ją.
    Pamiętaj, że jak opuścisz tę kartę nie będziesz mieć ponownie możliwości odczytania wartości wygenerowanego klucza!

    Generate APP's secret key

  5. Wróć do karty „Settings” i skopiuj tam wartość „Application ID” .
  6. Otwórz kartę serwisu „Azure Active Directory”, następnie kartę „Properties” i stamtą skopiuj wartość „Directory ID”.

Dalsze kroki

Następnie trzeba wyodrębnić ID grupy z odpowiedzi. Używam akcji „Compose” by pobrać tę wartość, korzystając z takiego wyrażenia: „body(‚Get_group_data’)?[‚value’]?[0]?[‚id’]„.

Dalej dzielę listę użytkowników, którzy mają zostać dodani, używając jako separatora przecinek (w moim wypadku) i dla każdego adresu e-mail wykonuję akcję „Add member to group” podając uzyskane id grupy i bieżący adres e-mail.

Pamiętaj także, by akcję „Response” (lub jakiekolwiek inne akcje wykonywane po dodaniu użytkowników do grupy) skonfigurować, by były wykonywane również w przypadku niepowodzenia pętli (np. gdy użytkownik, który ma zostać dodany już w niej istnieje, serwis zwróci błąd 400 Bad Request). W tym celu odpowiednio ustaw wartości w ustawieniach „Run after”:

Flow action configure "Run after"Flow action configure "Run after"

Finalnie mój workflow wygląda jak poniżej:

Add user as a O365 Group member Flow

Jak Ci się podoba? Pozostaw swoje komentarze poniżej!

Cześć! Nazywam się Tomasz. Jestem wielkim fanem automatyzacji procesów i analizy biznesowej. Skupiam się na rozwijaniu moich umiejętności w pracy z produktami Nintex i Microsoft: w szczególności Office 365, SharePoint, Flow, PowerApps. Posiadam ponad 8 lat doświadczenia w pracy z SharePoint.