Power AppsからSharePointリストのユーザー(Person)列を変更しようとすると、Updateプロパティでエラーが発生したり、コンボボックスで選択したユーザーが保存できなかったりすることがあります。特にOffice365ユーザーコネクタで取得したユーザー情報をSharePointのユーザー列へ渡す場合は、データ形式の違いが原因でつまずきやすいポイントです。
この記事では、SharePointのユーザー列をPower Appsで編集する際に必要な設定、ComboBoxで選択したユーザーを正しくUpdateする方法、よくあるエラー原因について解説します。
Power AppsでSharePointユーザー列を更新するときの基本
SharePointリストのユーザー列は、単純な文字列ではなくPerson型という特殊なデータ形式で保存されています。そのため、名前やメールアドレスだけを渡しても更新できません。
例えばSharePointリストに「担当者」というユーザー列がある場合、内部では以下のような情報を保持しています。
- Claims(ユーザー識別情報)
- DisplayName(表示名)
- Email(メールアドレス)
- Department(部署)
- JobTitle(役職)
そのため、Power AppsのフォームカードのUpdateには、SharePointが認識できるユーザーオブジェクト形式で値を渡す必要があります。
ComboBoxで取得したOffice365ユーザー情報を確認する
Office365ユーザーコネクタのSearchUserV2を利用する場合、取得されるデータはSharePointのPerson列とは完全には同じ形式ではありません。
例えばComboBoxのItemsに以下のような設定をしている場合があります。
Office365ユーザー.SearchUserV2({searchTerm:ComboBox1.SearchText,top:20}).value
この場合、ComboBox.SelectedにはOffice365ユーザーの情報が入りますが、SharePointが必要とする形式へ変換してからUpdateへ渡す必要があります。
まず、以下のような式で値が取得できているか確認できます。
ComboBox1.Selected.DisplayNameComboBox1.Selected.Mail
これらが空の場合は、ユーザー検索自体が正常に動作していない可能性があります。
SharePointユーザー列のUpdateで使用する正しい形式
SharePointのPerson列を更新する場合、UpdateにはSPListExpandedUser形式のレコードを渡します。
基本的な設定例は以下のようになります。
If(IsBlank(ComboBox1.Selected.Mail),On_Boarding_DataCard1.Default,{ '@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser", Claims: "i:0#.f|membership|" & Lower(ComboBox1.Selected.Mail), DisplayName: ComboBox1.Selected.DisplayName, Email: ComboBox1.Selected.Mail, Department: Coalesce(ComboBox1.Selected.Department,""), JobTitle: Coalesce(ComboBox1.Selected.JobTitle,""), Picture: "" })
ポイントは、ユーザー未選択時の判定です。ComboBoxのSelectedItemsはテーブル形式のため、単一選択の場合はIsEmptyよりもIsBlankやSelected.Mailの確認を利用したほうが安定します。
IsEmptyとSelectedItemsの違いによるエラー原因
Power Appsでは、ComboBoxのSelectedItemsとSelectedの扱いが異なります。
単一ユーザーを選択する設定の場合、SelectedItemsはテーブル、Selectedは1件のレコードになります。そのため、以下のような記述では意図した動作にならない場合があります。
IsEmpty(ComboBox1.SelectedItems)
単一選択用ComboBoxの場合は、以下のような書き方のほうが適しています。
If(IsBlank(ComboBox1.Selected.Mail),On_Boarding_DataCard1.Default,...)
また、ComboBoxのSelectMultipleプロパティがfalseになっているかも確認してください。複数選択設定の場合、SharePointの単一ユーザー列へそのまま渡すことはできません。
フォームのDataCard設定で確認するポイント
SharePointリストから自動生成されたフォームの場合、DataCardのUpdateだけでなく、DataCardValueの設定も確認する必要があります。
- DataCardのDataFieldが正しいユーザー列を指定しているか
- カードがロック解除されているか
- Updateプロパティが正しく変更されているか
- ComboBoxのDefaultSelectedItemsが設定されているか
例えば既存ユーザーを表示したい場合は、DefaultSelectedItemsに現在のSharePointユーザー情報を設定する必要があります。
既存値表示と新規変更処理を分けることで、編集画面でも新しいユーザーへ変更できるようになります。
保存できない場合に確認するエラー原因
Update式が正しく見えても保存できない場合、以下の原因が考えられます。
| 原因 | 確認内容 |
|---|---|
| メールアドレスが取得できていない | ComboBox1.Selected.Mailを確認する |
| Claims形式が間違っている | i:0#.f|membership|形式になっているか確認する |
| Person列の種類が違う | 単一ユーザーか複数ユーザーか確認する |
| 権限不足 | SharePoint側の編集権限を確認する |
特にSharePoint側で「複数選択可能なユーザー列」に設定されている場合は、単一ユーザー用のUpdate式ではエラーになります。
まとめ
Power AppsからSharePointのユーザー列を編集する場合、単純に名前やメールアドレスを渡すだけでは更新できません。SharePointが認識できるSPListExpandedUser形式へ変換して渡すことが重要です。
また、ComboBoxのユーザー検索結果はOffice365ユーザー形式で取得されるため、SelectedやSelectedItemsの違い、未選択時の判定方法にも注意が必要です。
Updateプロパティではユーザー情報の形式、ComboBox設定、SharePoint列の種類を順番に確認することで、多くのユーザー列更新エラーを解決できます。


コメント