Office 365 ユーザーコネクタを活用しよう


# はじめに

Office 365 ユーザーコネクタを利用すると、組織のユーザー情報を利用した様々な Power Apps アプリや Power Automate フローを作成することができます。

https://learn.microsoft.com/ja-jp/connectors/office365users/

例えば、以下は、日程調整業務を効率化するアプリですが、**Office 365 ユーザーコネクタを使用して、日程調整をしたい組織のユーザーを検索しています。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/13278e7e-d797-b4e5-57ac-dae74c2d4e57.png)

それ以外にも、例えば、以下のような要件について、Office 365 ユーザーコネクタで実現することができます。

* 何かの依頼、申請をするアプリにて、組織のユーザーを検索して承認者を指定する、また、既定ではその人のマネージャーの情報が入るようにする
* お問い合わせを管理するアプリにて、お問い合わせ者の名前、メールアドレス、部署情報等を自動で入力させる

今回は、以下のような観点で Office 365 ユーザーコネクタの説明していきたいと思います。

① Office 365 ユーザーコネクタで自分のプロフィールを取得する
② Office ユーザーコネクタでマネージャーの情報を取得する
③ Office 365 ユーザーコネクタで組織のユーザーを検索する
④ ゲストユーザーが検索結果に表示されないようにする
⑤ Office 365 ユーザーコネクタで指定したユーザーをコレクションに追加する

# ① Office 365 ユーザーコネクタで自分のプロフィールを取得する

こちらはかなりシンプルです。
私はよく App の `[OnStart]` 、つまり、アプリ起動時にアプリ利用者のプロフィール情報を取得して変数に格納するようにしています。


```

Set(
    gblCurrentUser,
    Office365ユーザー.MyProfileV2()
);
```

どんな情報が入っているか確認してみます。
こちらの変数から、どんな情報が入っているか確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/6d50d799-8efa-0be9-978b-a32eda282c2b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/48e7b092-1fcc-d4f7-b6cc-6afeff1f89a6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/be603ebd-d496-cab1-9d9c-6a5070e561a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/fc98a4a7-e603-2008-ef60-0db2a453bb7a.png)

いろいろな情報が入っていることが確認できます。
こちらに含まれている情報は、アプリの他の処理で利用することが簡単にできます。
例えば、部署情報が入っているので、お問い合わせをするアプリなどで、お問い合わせ者の部署情報を入力させたい際に、既定でこちらの部署名が入るようにすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/6bf8dbc4-055b-dc6a-a0cb-5c3941126a0d.png)

以下、使用イメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5f7f98de-6b84-ae9a-e43c-a7419454bd49.png)

# ② Office ユーザーコネクタでマネージャーの情報を取得する

こちらも非常に簡単です。例えば、App の `[OnStart]` 、つまり、アプリ起動時にの以下のような処理を入れておき、アプリ利用者のマネージャー情報を取得します。

```
Set(
    gblManager,
    Office365ユーザー.ManagerV2(User().Email)
);
```

:::note warn
マネージャー情報が入っていない場合エラーとなるためご注意ください
:::

中身を見てみます。問題なくマネージャー情報が入っていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/efa2fd64-b788-e986-aff5-766a8cc6381e.png)

以下、使用例です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/65875c89-ba74-f818-cec1-8b3b1aa2f9a2.png)

※コンボボックスを利用しているため、`[DefaultSelectedItems]` に上記のような形式で
　値を入れております。`[Ietms]` プロパティは以下のような感じです。詳細は次に説明します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/734a2c3c-6a5e-f02a-49c2-e11f73f88101.png)

# ③ Office 365 ユーザーコネクタで組織のユーザーを検索する

私がよく使う方法は、まず、コンボボックスを配置し、`[Items]` プロパティを以下のようにします。

```
Office365ユーザー.SearchUser({searchTerm: Self.SearchText})
```

また、`[DisplayFields]`、`[SearchFields]` プロパティを以下のようにします。
こちらは、それぞれ、検索結果に表示される項目や検索時に利用する項目を意味します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/8ccde718-7101-0125-b618-09cbc903dae3.png)

必要に応じて、レイアウト、`[SelectMultiple]`、`[IsSearchable]` プロパティを変更します。私は、以下のように設定することが多いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/23cc9b4f-7734-f8ae-5ba5-643e9ef63771.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c6db22fe-bed5-f137-2703-3efa251a6c1e.png)

:::note warn
コンボボックスの `[Items]` プロパティ等を変更すると、`[SelectMultiple]`、`[IsSearchable]` プロパティが元に戻ってしまうことがあります。この場合は再度設定を変更します。
:::

なお、検索で使用可能な属性についてはリファレンスを参照ください。
残念ながら、部署名では検索できないようです。

https://learn.microsoft.com/ja-jp/connectors/office365users/#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B-(v2)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d27887b0-f6d8-2b9e-b10e-54ae4b5e94f3.png)




# ④ ゲストユーザーが検索結果に表示されないようにする

③ のような方法で検索をしようとすると、既定では、ゲストユーザーも表示されてしまいます。
選択したユーザーに対してメールで承認依頼を送るようなアプリで、誤ってゲストユーザーを指定すると困ると思うので、検索結果にゲストユーザーを表示させないようにする方法を紹介します。

以下のようにすることで、検索の結果を指定したドメインでフィルターします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/6a271d95-e1ba-f335-b5c3-ded537a3e837.png)

```
Filter(
    Office365ユーザー.SearchUser({searchTerm: Self.SearchText}),
    ("@microsoft.com" in Mail)
)
```
複数のドメインでフィルターしたい場合は、以下のように Or でつなげます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/4a75f505-71c4-b0c6-a3f6-2e9a95fda8a5.png)

# ⑤ Office 365 ユーザーコネクタで指定したユーザーをコレクションに追加する

最初にお見せした以下のように、 Office365ユーザーコネクタで検索して選択をしたユーザーをコレクションに格納する方法を紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/13278e7e-d797-b4e5-57ac-dae74c2d4e57.png)

まず、以下のコンボボックスの `[OnChange]` プロパティの処理を以下のようにします。
端的に言うと、選択したユーザーをコレクションに追加し、次のユーザーを検索しやすくするためにリセットしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/fd3a7bc3-0fbd-86ec-5e17-34c6a014753e.png)


```
Collect(
    colAttendees,
    Self.Selected
);
Reset(Self);
```

また、`[Items]` プロパティを以下のようにしておきます。

```
Filter(
    Office365ユーザー.SearchUser({searchTerm: Self.SearchText}),
    !(UserPrincipalName in colAttendees.UserPrincipalName) 
    And ("@contoso.onmicrosoft.com" in Mail)
)
```

以下は、同じユーザーがコレクションに格納されないようにするための記述です。

```
!(UserPrincipalName in colAttendees.UserPrincipalName) 
```

そして、こちらのコレクションの `[Items]` プロパティを以下のようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/4e1345f9-8075-423b-218f-70e4d6cb20ba.png)

コレクション内にラベルやイメージを配置します。以下では表示名を表示するようにしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1b880801-f7a9-28c8-70b2-5d5506ae74e8.png)

顔写真を表示させたい場合は、イメージコントロールを配置して以下のように記述します。

```
If(
    Office365ユーザー.UserPhotoMetadata(ThisItem.Mail).HasPhoto,
    Office365ユーザー.UserPhoto(ThisItem.Mail),
    SampleImage
)
```

コレクションからデータを削除したい場合は、例えば、以下のようにゴミ箱アイコンを配置し、`[OnSelect]` プロパティに以下のような処理を記述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/28dd70f0-6d5a-d74c-4285-1b28a56ecc9d.png)


```
Remove(colAttendees,ThisItem);
```

次回は、こちら Office 365 ユーザーコネクタを使う際におけるパフォーマンス観点で注意しておいたほうが良いこととその対策について紹介します。