Power AppsでSharePointユーザー列を更新できない原因と解決方法|Person列のUpdate設定を正しく行う方法

Windows系

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.DisplayName
ComboBox1.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列の種類を順番に確認することで、多くのユーザー列更新エラーを解決できます。

コメント

タイトルとURLをコピーしました