こんにちは、あんこ先生です。
組織内の人間関係、把握したくありませんか?
なぜなら、アプリユーザーごとに異なる上申先を探すのに一苦労だからです。
たとえば、組織図が特定社員にしか公開されていなかったり、人事異動が頻繁にあったりとか大きめの組織あるあるですよね。
そんな問題をわざわざアプリで解決してしまおうというのが今回の目的です。
やっていることはかんたん、自分を起点に会社のトップまで登っていき、そこから下に掘り進んでいくだけです。
もちろん、ユーザーが特定できているなら、Outlookのユーザー検索で詳細見た方がだんぜん早いです。
それでもこの記事では、Office365ユーザーとグループコネクタの使い方を解説します。
さらに、すぐ使える活用事例をコード付きで紹介します。
きっと誰かの役に立つはず!
Contents
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が必須となるのでひたすらそれを追い求めていきます。
自分の情報を取得する│MyProfileV2
まずは自分のユーザーIDを取得します。
取得するには、MyProfileV2を使います。
自分の情報を取得するときのみ、ユーザーIDは不要です。
下記コードを適当なボタンコントロールに埋め込んで実行します。
//コレクションの作成および自分の情報埋め込み
ClearCollect(_Manager,
{level:0,
managerid:Office365ユーザー.MyProfileV2().id,
name:Office365ユーザー.MyProfileV2().displayName
}
);
自分の直属上司の情報を取得する│ManagerV2
つづいて、自分の直属上司の情報を取得します。
取得するには、ManagerV2を使います。
直属上司の情報を取得するときは、自分のユーザーIDを使用します。
//自分の直属上司の情報を取得する
Collect(_Manager,
{level:1,
managerid:Office365ユーザー.ManagerV2(Last(_Manager).managerid).id,
name:Office365ユーザー.ManagerV2(Last(_Manager).managerid).displayName
}
)
会社のトップまでの情報を取得する│ManagerV2
さいごに、会社のトップまでの情報を取得します。
取得するには、もう一度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ユーザー
今度は逆に、会社のトップから末端まで下っていきます。
さきほどと同じ様にやるとテーブルの入れ子がすさまじいことになるので、ギャラリーを経由します。
直属部下の情報を取得する│DirectReportsV2
先ほど取得した会社トップの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
まず、グループ参加者を取得する前に、自分が参加しているグループの一覧を取得します。
取得するには、ListOwnedGroupsV3を使います。
取得できるのは、自分が参加しているグループのみです。
これを利用してグループIDを取得します。。
Gallery01.Itemsプロパティ
Office365グループ.ListOwnedGroupsV3().value
参加メンバーの一覧を取得する│ListGroupMembersV2
ここでは、グループの参加者一覧を取得します。
取得するには、ListGroupMembersV2を使います。
取得できるのは、自分が参加しているグループのみです。
また、初期値では100人までしか抜けないので、プロパティを忘れずに変更しておきましょう。
Gallery02.Itemsプロパティ
//{'$top':1000}←ここの数字が抜き取り最大人数、1000人まで
Office365グループ.ListGroupMembers(Gallery01.Selected.id,{'$top':1000}).value
まとめ
Office365ユーザーとグループコネクタの使い方はわかりましたか?
ユーザーを起点に一つ上の直属上司や部下はすぐ抜けるようになったと思います。
わたしはこのコネクタを使って、社内電話アプリや上申先の自動判定に使っています。
あまり出番のない機能かもしれませんが、きっと誰かの役に立つはず。
こんなこともできるよってのを覚えていただければ幸いです。
とても参考になります。ありがとうございます。
質問させてください。
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関数に変えて試してみてください。なお、作成されたコレクションはテーブルなので[]で閉じてしまうと入れ子になりますので、外してください。
ありがとうございます。
[]を外したら目的が達成できました。