LoginSignup
2
4

More than 1 year has passed since last update.

PowerAutomateで組織のメンバーを一覧する

Posted at

PowerAutomateでワークフローを構築・運用していると、時折、自組織のメンバーを一覧したいことがあります。
今回はそのようなシーンでのソリューションのご紹介です。

Problem

ワークフローを構築・運用しているうち何かしらの目的で自組織のメンバーの一覧が必要になった。
あるメンバー(マネージャー等)を頂点に、その配下のメンバーを再帰的に探索して一覧したい。
「Office 365 Users」コネクターの「直属の部下の取得」アクションでは、文字通りあるメンバー(マネージャー等)の直属メンバーの一覧しかえられない:
image.png

Solution

「直属の部下の取得」アクションと「Do Until」アクションを組合せて、再帰的なメンバー探索を行います。

成果物の容れ物を準備

まずは、下準備。
「直属の部下の取得」アクションの対象となるユーザーたちを一時的に格納するキュー(配列)を作成します:
image.png

再帰的探索の結果を格納するリスト(配列)も作成します:
image.png

探索の起点を決める

「ユーザープロフィールの取得」アクションで、再帰的探索の起点となるユーザーのプロフィール情報を取得し、キューにプッシュ(配列に追加)します:
image.png

再帰的な探索を開始する

いよいよ「Do Until」の登場です。終了条件は length(variables('memberQueue')) == 0 とします:
image.png

必須の操作ではありませんが、このあとの作業(式の記述)を少しでも簡単にするため、「作成」アクションを使い、あらかじめキューの先頭の要素を取り出します。入力は variables('memberQueue')[0] です:
image.png

今しがた取り出したユーザーのプロフィールを取得します。また今回は当該ユーザーの上司の情報もセットで管理したい(非正規化したい)ので、「上司の取得」アクションも実行します:
image.png

成果をリストに格納しましょう:
image.png

そして当該ユーザーの「直属の部下」を取得します:
image.png

取得したユーザー(0~N件)を次回以降の探索対象としてキュー(配列)に追加しましょう。
キューの先頭要素(先ほど処理済み)を除く要素からなる配列を作成し、それと「直属の部下の取得」で取得した配列とまとめます。「作成」アクションの入力はこんなかんじ:
union(skip(variables('memberQueue'), 1), outputs('直属の部下の取得_(V2)')?['body/value'])
image.png

ここでは「直属の部下の取得」で取得したユーザーをすべてキューに追加しています。
しかし、ユーザーの属性(例えば jobTitle)などで「当該ユーザーに部下はいない」あるいは「当該ユーザーの部下の探索は不要」と判断できる場合もあるでしょう。その場合は「直属の部下の取得」の出力に対して「アレイのフィルター処理」による選別を行なうことで、不要な探索処理をスキップできます。
実際、私が職場で運用しているワークフローでは jobTitle によりマネージャー(部下がいる)とそれ以外(部下がいない)を分け、マネージャーは先程示した通りキュー(variables('memberQueue'))に追加する一方、メンバーは即座に探索結果を保管するリスト(variables('memberResult'))に追加しています:
image.png

ワークフローを実行する

あとはフローを実行するだけです。
少々時間がかかってしまいますが、起点となるユーザーから順次組織構造の下方に向かって再帰的な探索が行われていき、結果が配列に格納されていきます。

もちろん、成果物をどうやって保管するのかは目的次第です。私の場合はSharePointサイト上のExcelファイルのテーブルと、同じくサイト上のJSONファイルとしてデータを書き出しておき、別のワークフローから利用しています。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4