PowerApps│全社員を把握!Office365ユーザー&グループコネクタの使い方

アイキャッチ

こんにちは、あんこ先生です。

組織内の人間関係、把握したくありませんか?

なぜなら、アプリユーザーごとに異なる上申先を探すのに一苦労だからです。

たとえば、組織図が特定社員にしか公開されていなかったり、人事異動が頻繁にあったりとか大きめの組織あるあるですよね。

そんな問題をわざわざアプリで解決してしまおうというのが今回の目的です。

やっていることはかんたん、自分を起点に会社のトップまで登っていき、そこから下に掘り進んでいくだけです。

もちろん、ユーザーが特定できているなら、Outlookのユーザー検索で詳細見た方がだんぜん早いです。

それでもこの記事では、Office365ユーザーとグループコネクタの使い方を解説します。

さらに、すぐ使える活用事例をコード付きで紹介します。

きっと誰かの役に立つはず!

Office365ユーザーとグループコネクタについて

Office365に登録された組織内のユーザーと所属するグループを調べたり操作したりするコネクタです。

本社の偉い人がちゃんと指示して情報を入力していないと使い物になりませんので注意してください。

Office365ユーザーコネクタ

Office365ユーザーを使用すると、自分のOffice365アカウントを使用して組織内のユーザープロファイルにアクセスできます。

自分のプロファイル、別のユーザーのプロファイル、ユーザーの上司または直属の部下の取得、またユーザープロファイルの更新など、さまざまな操作を行うことができます。

なお、参照は誰でも使えますが、操作は権限がないと動作しません。


主なアクション

  • UserProfileV2
    ユーザープロファイルを取得する(V2)
  • SearchUserV2
    ユーザーを検索する(V2)
  • UserPhotoV2
    ユーザー写真を取得する(V2)
  • ManagerV2
    上司を取得する(V2)
  • DirectReportsV2
    直属の部下を取得する(V2)
  • MyProfileV2
    自分のプロファイルを取得する(V2)
  • RelevantPeople
    関係するユーザーを取得する

Office365グループコネクタ

Office365アカウントを使用して、組織内のグループ メンバーシップとカレンダーイベントを管理できます。

グループ名簿の取得、メンバーの追加または削除、グループイベントの作成など、さまざまなアクションを実行できます。

つまり、自分が参加しているグループ(SharePointサイトやTeamsのチームなど)の情報をある程度好き勝手できるコネクタです。


主なアクション

  • CreateCalendarEventV2
    グループイベントを作成する(V2)
  • ListGroupMembers
    グループメンバーを一覧表示する
  • RemoveMemberFromGroup
    メンバーをグループから削除する
  • AddMemberToGroup
    メンバーをグループに追加する
  • ListOwnedGroupsV3
    自分が所有および属しているグループを一覧表示する
  • ListOwnedGroupsV2
    自分が所有しているグループを一覧表示する(V2)

会社のトップまでたどる│Office365ユーザー


自分を基準に会社のトップまでたどり着かせます。

ユーザー情報を取得するには、ユーザーIDが必須となるのでひたすらそれを追い求めていきます。

まずは自分のユーザーIDを取得します。

取得するには、MyProfileV2を使います。

自分の情報を取得するときのみ、ユーザーIDは不要です。

下記コードを適当なボタンコントロールに埋め込んで実行します。

//コレクションの作成および自分の情報埋め込み
ClearCollect(_Manager,
            {level:0,
             managerid:Office365ユーザー.MyProfileV2().id,
             name:Office365ユーザー.MyProfileV2().displayName
            }
);

つづいて、自分の直属上司の情報を取得します。

取得するには、ManagerV2を使います。

直属上司の情報を取得するときは、自分のユーザーIDを使用します。

//自分の直属上司の情報を取得する
Collect(_Manager,
    {level:1,
        managerid:Office365ユーザー.ManagerV2(Last(_Manager).managerid).id,
        name:Office365ユーザー.ManagerV2(Last(_Manager).managerid).displayName
    }
)

さいごに、会社のトップまでの情報を取得します。

取得するには、もう一度ManagerV2を使います。

同様に直属上司のさらに直属上司にあたる情報を取得するときは、直属上司のユーザーIDを使用します。

1回ずつやるとめんどうなので、ForAll関数で繰り返します。

//自分を基準に10段階上まで調査
ForAll(Sequence(10), //←ここの数字分、上にたどる
    If(!IsBlank(Office365ユーザー.ManagerV2(Last(_Manager).managerid).id),
        Collect(_Manager,
            {level:ThisRecord.Value,
             managerid:Office365ユーザー.ManagerV2(Last(_Manager).managerid).id,
             name:Office365ユーザー.ManagerV2(Last(_Manager).managerid).displayName
            }
        )
    )
)

無事たどり着けましたか?

実際に使う場合は、1つめと3つめのコードを繋げれば1回で終わります。

結果をギャラリーに展開すれば、可視化できます。

会社のトップから下っていく│Office365ユーザー

今度は逆に、会社のトップから末端まで下っていきます。

さきほどと同じ様にやるとテーブルの入れ子がすさまじいことになるので、ギャラリーを経由します。

先ほど取得した会社トップのIDを使って直属部下の一覧を取得します。

取得するには、DirectReportsV2を使います。

下記コードを複数のギャラリーコントロールに埋め込んで実行します。

Galleryxx.Itemsプロパティ

//1個目のギャラリー
_Manager

//2個目以降のギャラリーはこれの繰り返し
Office365ユーザー.DirectReportsV2(Galleryxx.Selected.id).value

階層分繰り返せば末端までたどり着けると思います。

また、ギャラリーコントロールのテンプレートに下記を追加すれば、いろんな情報が抜けます。

  • id
    ユーザーID
  • surname
  • givenName
  • displayName
    表示名
  • jobTitle
    役職
  • businessPhones
    勤務先電話番号
  • mobilePhone
    携帯電話
  • mail
    メール
  • department
    部署
  • officeLocation
    オフィスの場所

グループ参加メンバー一覧を取得する│Office365グループ

まず、グループ参加者を取得する前に、自分が参加しているグループの一覧を取得します。

取得するには、ListOwnedGroupsV3を使います。

取得できるのは、自分が参加しているグループのみです。

これを利用してグループIDを取得します。。

Gallery01.Itemsプロパティ

Office365グループ.ListOwnedGroupsV3().value

ここでは、グループの参加者一覧を取得します。

取得するには、ListGroupMembersV2を使います。

取得できるのは、自分が参加しているグループのみです。

また、初期値では100人までしか抜けないので、プロパティを忘れずに変更しておきましょう。

Gallery02.Itemsプロパティ

//{'$top':1000}←ここの数字が抜き取り最大人数、1000人まで
Office365グループ.ListGroupMembers(Gallery01.Selected.id,{'$top':1000}).value

まとめ

Office365ユーザーとグループコネクタの使い方はわかりましたか?

ユーザーを起点に一つ上の直属上司や部下はすぐ抜けるようになったと思います。

わたしはこのコネクタを使って、社内電話アプリや上申先の自動判定に使っています。

あまり出番のない機能かもしれませんが、きっと誰かの役に立つはず。

こんなこともできるよってのを覚えていただければ幸いです。


アイキャッチ

ご支援よろしくおねがいします

この記事を気に入ってくださった方、寄付してあげてもいいよという方がいらっしゃっいましたら、ご支援いただけると助かります。

下記リンクからAmazonギフト券で、金額は15円からお気持ちを入力してください。

受取人のメールアドレスは amazon@anko7793.com までお願いします。

メッセージもいただけるとたいへん喜びます。

よろしくお願いします。

Amazonギフト券(Eメールタイプ) 

6件のコメント

とても参考になります。ありがとうございます。
質問させてください。
SharePointリストに[ユーザーとグループ]、[メールアドレス]があります。
PowerAppsのキャンバスアプリから[ユーザーとグループ]にユーザを入力してdisplayNameで表示させます。
このユーザのメールアドレスを[メールアドレス]に自動で登録できないか、試行錯誤しています。Office365ユーザーとグループコネクタで出来ないかなぁと思いましたが、出来ませんでした。別の方法があるかもしれまんが行き詰まり状態です。アドバイス頂けましたら幸いです。

訪問およびコメントくださってありがとうございます。
ご質問いただいた件ですが、解決する方法はいくつかあります。
もっとも簡単なのがSPOリストをフォームに展開し、コンボボックスになった[ユーザーとグループ]からユーザーを選択します。
あとは[メールアドレス]のテキスト入力に DataCardValuexx.Selected.Email を記述すれば連動して抜き取れます。
最後にSubmitFormでSPOリストに書き込みます。

アプリ内でメールアドレスを利用するだけなら First(SPOリスト名).[ユーザーとグループ.Email のようにテーブルを単一レコードまで絞れば直接抜き取ることができます。

どちらの方法でもOffice365ユーザーコネクタは使わなくてもできます。

質問への回答ありがとうござます。深夜で恐縮です。
早速試してみたところ、解決しました。
Office365ユーザーコネクタ不要のところ、必要前提と思い込んでいました。
ためになる事ばかりで目から鱗です。今後も楽しみにしています。

拝見させていただきました。
大変困っていることがあり、質問させていただきます。
現在リストにフィルターをかけてユーザ名だけのcheckerコレクションを作成しています。
ClearCollect(checker,ShowColumns(Filter(管理者_List, status=true),”approval_name”))
このコレクションをコンボボックスの初期値として
DefaultSelectedItemsにFirst([checker])を入れましたが、[object Object]とひょうじされてしまいます。
コンボボックスはユーザー/グループで複数選択できるものです。
メールで選択したディスプレイネームが表示されるためにはどのようにすればよいのでしょうか?

ご質問ありがとうございます。
コンボボックスの選択肢を管理者として、かつ初期値を先頭の人にするってことですよね?

DefaultSelectedItemsにはテーブルを指定しますが、First関数の戻り値はレコードです。
そのため、FirstN関数に変えて試してみてください。なお、作成されたコレクションはテーブルなので[]で閉じてしまうと入れ子になりますので、外してください。

ありがとうございます。
[]を外したら目的が達成できました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
七草あんこ
非IT系中間管理職やってます。社命によりoffice365を主軸とした業務改善プロジェクトメンバーに任命されたことでPowerAppsと出会えました。いまではビジネス・プライベートを問わず、欠かせないツールになっています。導入初期やアプリ作成時に遭遇した諸問題の解決法とサンプルアプリの作り方を紹介していきます。主にTwitterで情報収集しているので不明点など呟いているとお邪魔するかもしれません。