Power Platform で市民開発する際に、SharePoint リストのユーザーまたはグループ列を使う際にはまること


# はじめに

Power Platform で市民開発する際に、SharePoint リストをデータソースとして利用する方も多いと思います。

この際、以下のように、ユーザーまたはグループという種類の列を使うことがあると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1247ec56-a680-0057-ce8a-bbf0836a38fc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/46e31f08-b075-4e67-5d42-6651002fa289.png)

こちらを利用すると、SharePoint リストでアイテムを登録するときはもちろん、例えば、Power Apps でフォームコントロールを利用すると、簡単に組織内のユーザーを検索することができ、非常に便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9f0887a6-76ba-4818-e30d-bad359722581.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/15b8dfe3-a1db-b8ca-01c5-e32a5f62c431.png)

そのため、利用する方も多いと思うのですが、Power Apps や Power Automate でこの列を操作する際、少し癖があり、はまってしまうこともあるので、その観点で情報を整理したいと思います。

# 複数選択を許可している際にメール通知する

複数選択を許可している際、上記画像の例だと、例えば、担当者が複数いる場合にリマインドメールを出したい際、以下のように For each となってしまうため、担当ごとに別のメールを出すことになってしまいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/13755922-b8ce-5a98-3614-972a511f1530.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9a39a4da-aeb1-1b7b-0927-b45d392fdbe2.png)

普通は、複数の担当者がいる場合、一つのメールで、宛先に複数の担当者を入れてメールをしたいと思います。

こちらについては、以下の記事で対処策を書いていますので参考にしていただければと思います。

https://qiita.com/Takashi_Masumori/items/59521acdefbdee67bb04

# 項目の更新をする際に失敗する

例えば、SharePoint リストにて、以下のように、ユーザーまたはグループ列が入力必須となっていた場合、項目を更新する際、入力必須列について、変更が不要な場合においても値を入れる必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/dab3f256-e39b-0e10-9e7f-5f32eedd6b4c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/7f11f33e-419d-86e9-515a-9a61e10f7cbc.png)

通常、このような場合、以下のように、変更が不要な列は、トリガーの動的な値を再利用して代入するだけで済むのですが、今回でいう「問い合わせ者」の列について、どのように値を入れればいいか分かりにくいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/0e0c0715-f7a2-9346-6a96-19fc1ca1ca3f.png)

試しに、こんな感じでトリガーの「問い合わせ者：の情報をそのまま渡してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a31f1b07-1624-6c16-562c-324b8d3fb722.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/3df634c7-b308-55da-9760-10d40c2ba4f5.png)

実行してみましたが、残念ながら、エラーになりました。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/096c4b17-9f56-c6f6-f670-9c599dc2bed5.png)

対策は以下のような感じになります。ちょっと面倒ですが、以下のような配列変数を用意して、以下のような形式で、トリガーの問い合わせ者の Email を代入していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/33e24ed1-dc7c-0e73-873b-a8dc8b1dc363.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d7126fdc-5002-27f7-d86b-fc6e681f2cf1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c9f3e3be-598d-d9a4-a7c3-e4b10196729b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c0aea6ae-ea92-6ff8-39ee-372042a58bd4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/8492629d-6a3c-66c4-c297-86839f45f150.png)

実行してみます。無事に項目の更新に成功しました。正直、こちらはクセがありすぎだと思います。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/582ed71a-dff7-6c36-4e1d-596f4bc10794.png)

# Power Apps で既定値を設定する

ユーザーまたはグループ列を使う際、Power Apps で既定値を設定したい場合があると思います。
例えば、以下のように、Power Apps のアプリを通じて問い合わせをする際、問い合わせ者の欄を既定で自分にしたいという感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/fdb90101-8848-f456-397b-ada1b4553127.png)

こちらのような既定値の設定についても、ユーザーまたはグループ列を使う際、癖があります。

`[DefaultSelectedItems]`プロパティに対して、以下のような数式を代入します。これは暗記出来るものではなく、基本どこかに控えておいて貼り付けるのがいいと思います。個人的にも今まで何度も案内してきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/cbcb1363-c2b8-a5cc-dac0-920d05bed52e.png)


```
{
    Claims: "i:0#.f|membership|" & Lower(User().Email),
    Department: "",
    Email: User().Email,
    DisplayName: With(
        {
            fullName: Split(
                User().FullName,
                " "
            )
        },
        Last(fullName).Value & " " & First(fullName).Value
    ),
    JobTitle: "",
    Picture: ""
}
```
※変数を使ったり、Office 365 ユーザーコネクタを使う方法もありますが、初学者の方が初めて作成するアプリや簡易的なアプリの場合、このような数式でも良いかなと思っています。

テストしてみます。無事に問い合わせ者が入りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/f27332cb-0d65-fcfe-4b2c-7f5e1156e18c.png)

# 複数の担当者がいる場合に Power Apps で表示をさせる

複数選択を許可している場合、以下の例だと、複数の問い合わせ者がいる場合に、Power Apps のアプリのギャラリーで表示をさせたいケースあると思います。しかし、以下のように、エラーになってしまいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a96de7af-2990-80e1-a5fb-fa8d57fc4789.png)

なお、複数選択を許可していない場合は、以下のような感じで表示が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/750cc58a-3fef-a50a-e913-ddd8ad1aa5f6.png)

こちらの解決策について、以下のような式にすることで、複数の問い合わせ者を表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d3cafa7d-e9e3-0542-05ca-5047d98c11db.png)

```
Concat(ThisItem.問い合わせ者,DisplayName,",")
```

なぜこれで表示することができるのか、以下、イメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/19fe0ebb-2dfe-e477-df07-c26944940eaa.png)

# Power Apps で担当者で検索をしたい

例えば、Power Apps 上で、以下の担当者列でテーブルをフィルターしたいといった要件があるとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/49f7e613-b9af-8ea8-acdb-b972e5754d77.png)

基本的には、以下の記事で記載したような、フィルターをするのが良いと思いますが、どうしても検索をしたい場合のアプローチについて説明します。

https://qiita.com/Takashi_Masumori/items/777c37b57ddecbf05d12#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%88%97%E3%81%A7%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC

まず、以下のように、Search 関数を使う方法がありますが、式がエラーとなってしまいます。
担当者列は、テキスト型ではないためです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/84a7540b-3425-b9cc-0432-1c4813ee1754.png)

では、こういった感じで書こうとしてもエラーになります。残念ながら、担当者.DisplayName という表記が上手く識別できないようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/75093eb4-95d0-a9f0-9ae1-d052e46721d7.png)

対処策として、担当者列の DisplayName の情報だけを、以下のようにして別の列として保持するコレクションを作成し、そちらの列の情報を基に Search 関数を利用する方法があります。

:::note warn
AddColumns 関数の第二引数である追加する列の名前 (担当者名) について、ダブルクォーテーションで囲む必要がなくなっていました。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/35ecc1c7-1956-b446-6e4b-1b7cc614e2eb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d6c03aca-3def-a702-0d95-d480f1231b08.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1a150743-9b47-687f-0255-e5c916c9d260.png)



# まとめ

今回は、Power Platform で市民開発する際に、SharePoint リストのユーザーまたはグループ列を使う際にはまることについて整理してみました。

便利な反面、ちょっとはまってしまうことがあるため、参考になれば幸いです。

それ以外にも気づいたり相談されたりしたら追記していきます。