からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

Power Apps の Office365Users.RelevantPeople 関数が結果を 10 件しか結果を返してくれない

Power Apps の Office 365 ユーザー コネクタにはユーザーに関連する人物をサジェストしてくれる RelevantPeople という関数があります。

docs.microsoft.com

しかしこの関数ですが、結果を 10 件しか返してくれません。

f:id:karamem0:20201001103301p:plain

その理由は、RelevantPeople 関数は Microsoft Graph の People API を呼び出しており、その既定値が 10 件しか値を返さないことによります。Microsoft Graph を直接呼び出すのであれば、OData クエリの $top を指定することによって結果の件数を変更することができるのですが、Office 365 ユーザー コネクタではその手段が提供されていません。よって 10 件以上の結果を取りたい場合はカスタム コネクタで Microsoft Graph を呼び出すことになります。

カスタム コネクタの作成についてはすでに素晴らしい記事が存在します。今回はこちらを参考にしながら手順を追っていきたいと思います。

idea.tostring.jp

手順

アプリケーションの登録

まずは Azure ポータルから Azure Active Directory にアプリケーションを登録します。

f:id:karamem0:20201001103844p:plain

[証明書とシークレット] から新しいクライアント シークレットを取得します。

f:id:karamem0:20201001103925p:plain

[API のアクセス許可] で「People.Read」を追加します。

f:id:karamem0:20201001104020p:plain

これで準備は完了です。

カスタム コネクタの作成

全般

以下の通りに設定します。

スキーマ HTTPS
ホスト graph.microsoft.com
ベース URL /
セキュリティ

認証タイプには OAuth を指定します。

ID プロバイダー Azure Active Directory
Client id (登録したアプリケーションのクライアント ID)
Client secret (登録したアプリケーションのクライアント シークレット)
Login URL https://login.windows.net
Tenant ID (登録したアプリケーションのテナント ID)
Resource URL https://graph.microsoft.com
スコープ https://graph.microsoft.com/.default
定義

要求の [サンプルからインポート] より以下のように入力します。

動詞 GET
URL https://graph.microsoft.com/v1.0/me/people?$top=100

応答は Graph Explorer を使って https://graph.microsoft.com/v1.0/me/people を叩いてみて(ログインする必要はありません)その結果の JSON を [サンプルからインポート] で登録すればよいでしょう。

ここまでできたらいったんカスタム コネクタを保存します。

リダイレクト URL の登録

Azure ポータルに戻り、カスタム コネクタの [セキュリティ] に表示されているリダイレクト URL をアプリケーションに登録します。

f:id:karamem0:20201001111249p:plain

これでカスタム コネクタの設定は完了です。念のため接続を作成してテストを実行し結果が返ってくることを確認するといいでしょう。

実行

カスタム コネクタを実行してみます。$top を指定することができるようになっており、10 件以上結果が返ってくるのがわかります。*1 この方法を使って、$filter を指定できるようにしてあげれば、結果として返ってくるユーザーからグループを除外したり、組織内のユーザーに限定したりすることが可能となります。

f:id:karamem0:20201001111737p:plain

*1:キャプチャは 100 を指定したのに 50 件しか取ってこれていませんがもともと 50 件しかないだけです。