Power AppsのEditForm・NewForm・DisplayForm。フォームコントロールの仕組みと設定のポイント

Power AppsのEditForm・NewForm・DisplayFormとは

Power Appsでフォームを使うなら、EditForm・NewForm・DisplayFormの3種類を正しく使い分けることが基本です。これを曖昧にしたまま開発を進めると、データの読み書きでつまずくことになります。

フォームコントロールは、SharePointリストやDataverseといったデータソースと連携して、データの表示・新規追加・編集を担うコントロールです。Patch関数を自分で書かなくてもデータを保存できるのが最大の魅力です。ただし、使い方の型を知らないと思ったとおりに動かないことも多いので、この記事で仕組みをまとめておきます。

3種類のフォームモードと使い分け

フォームには3つのモードがあります。EditForm・NewForm・DisplayFormというのは厳密にはコントロール名というより、DefaultModeプロパティで設定するモードのことです。実際には1つのフォームコントロールを用途ごとにモード切替して使うか、画面ごとに別のフォームを置くかを選びます。

モード用途SubmitForm後の動作
Edit(編集)既存レコードの更新既存レコードを上書き保存
New(新規)新しいレコードの追加新規レコードとして追加
View(表示)読み取り専用で表示保存操作なし

私がよく使うのは、一覧画面(ギャラリー)+ 編集画面(フォーム)という構成です。一覧で選択したレコードを編集画面に渡してEditモードで開く、という流れが王道です。

Itemプロパティの設定が肝心

EditモードでフォームにレコードをバインドするにはItemプロパティの設定が必要です。ギャラリーで選択したレコードをフォームに渡すには、フォームのItemプロパティに次のように書きます。

Gallery1.Selected

これだけで、ギャラリーで選んだ行の内容がフォームに自動的に流れ込みます。Newモードのときは、Itemプロパティを空白(Blank())にしておくか、何も設定しなければ空のフォームになります。

SubmitFormとResetFormの基本

フォームでデータを保存するにはSubmitForm関数を使います。Patch関数を自分で書く必要がなく、フォームに紐づいたデータソースに自動で書き込んでくれます。

SubmitForm(Form1)

保存後にフォームをリセットしたい場合はResetFormを使います。これを忘れると、次に新規入力しようとしたときに前回の値が残ってしまいます。

ResetForm(Form1)

よくある実装パターンは、保存ボタンのOnSelectに次のように書くことです。

SubmitForm(Form1);
If(Form1.Error = "",
    Navigate(ListScreen, ScreenTransition.None),
    Notify(Form1.Error, NotificationType.Error)
)

Form1.Errorが空文字なら保存成功なので一覧画面に戻り、エラーがある場合はNotifyで画面上にエラーメッセージを表示する、というパターンです。これだけで最低限のエラーハンドリングになります。

OnSuccessプロパティも活用できる

フォームにはOnSuccessというプロパティもあります。SubmitFormが成功したときだけに実行される処理を書けるので、保存後の画面遷移やResetFormをここに書く方がすっきりする場面もあります。好みと設計方針で使い分けてください。

フォームのカードコントロールを理解する

フォームコントロールを画面に追加すると、データソースの各列が自動的にカードコントロールとして並びます。カードはフォームの子コントロールであり、各フィールドの入力欄をカプセル化したものです。

カードのUpdateプロパティを見ると、その入力値がどうデータソースに送られるかが確認できます。例えばテキストカードならTextInputのTextプロパティがUpdateに入っているはずです。

カードのロック解除に注意

デフォルトでカードはロックされていて、直接プロパティを変更できません。カードを右クリックして「カードのロック解除」を選ぶとカスタマイズできるようになりますが、一度ロックを解除するとデータソースの列変更を自動で追従しなくなります。

個人的には、シンプルな入力フォームであれば標準カードをそのまま使い、どうしてもカスタマイズが必要な列だけロック解除するのをおすすめします。全部ロック解除すると後のメンテナンスが大変になります。

EditFormとPatch関数の使い分け

フォームコントロールを使わず、Patch関数で直接データを書き込む方法もあります。どちらを使うべきか迷うことがあると思いますが、目安は以下のとおりです。

用途おすすめの方法理由
標準的な入力フォームEditFormカードが自動生成される。バリデーションも組み込み済み
複数レコードの一括更新Patch関数フォームは1レコードずつしか扱えない
ボタン1つで部分更新Patch関数フォームを使わずピンポイントで列を更新できる
カスタムUIで入力欄を自作Patch関数フォームカードのUIに縛られない

フォームコントロールはUI込みで素早く実装できる反面、細かい制御が必要なときには窮屈に感じることもあります。Patch関数の書き方は別記事で詳しく解説しているので、合わせて読んでみてください。

Power Appsで絶対覚えたいPatch関数の使い方

また、フォームと組み合わせることの多いSharePointリストの読み書きについては、こちらも参考になります。

Power AppsでSharePointリストのデータを読み書きする——基本のCRUDパターン

まとめ

Power AppsのEditForm・NewForm・DisplayFormは、それぞれ編集・新規・表示という3つのモードを持つフォームコントロールです。ItemプロパティでバインドするレコードをSubmitFormで保存する、という流れさえつかめれば、あとは実際に作りながら覚えていける内容です。

最初はPatch関数と比べてフォームコントロールのほうが難しく感じるかもしれません。でも、一度形を作ってしまえばカード自動生成のおかげでスピードが格段に上がります。ぜひ一度シンプルなフォーム画面を作ってみてください。

Xでフォローしよう