1. 主要ページへ移動
  2. メニューへ移動
  3. ページ下へ移動

QES ブログ

記事公開日

【Power Apps】脱・編集フォーム!Patch関数で自由自在にデータを登録・更新する方法

  • このエントリーをはてなブックマークに追加

はじめに

こんにちは!DXソリューション営業本部の中垣です。
Power Appsのキャンバスアプリで開発を進める中で、「編集フォームだとデザインが自由に決められない…」「複数のテーブルを一括で更新したいけど、フォームだと難しい」といった悩みを抱えている方も多いのではないでしょうか。
「編集フォーム」と「SubmitForm関数」の組み合わせは非常に便利ですが、アプリの要望が高度になると、どうしても機能不足を感じる場面が出てきます。

本記事では、そんな「脱・編集フォーム」を目指す方に向けて、自由自在にデータを登録・更新できる「Patch関数」の使い方をご紹介します!
Patch関数は少し難しそうに見えますが、一度覚えてしまえば「データの型」への理解も深まり、開発の自由度が格段に上がります。
ぜひこの機会にマスターしましょう!

編集フォームとPatch関数の違い

まず、これまで使っていた「編集フォーム」と、今回ご紹介する「Patch関数」の違いについて整理しておきましょう。
両者の主な違いを比較表にまとめました。
「手軽さ」をとるか、「自由度」をとるかで使い分けるのがポイントです。

編集フォーム vs Patch関数 比較表

比較項目 編集フォーム
(SubmitForm)
Patch関数
手軽さ・実装スピード ◎ 簡単
フォームを置き、SubmitForm関数を指定するだけ
△ 手間がかかる
複数コントロールの設置や関数の記述が必要
デザインの自由度 △ 制約あり
レイアウトが固定されがち
◎ 高い
好きな場所に配置可能
入力チェック
(必須確認など)
◎ 自動
テーブル側の設定だけでOK
△ 自作が必要
If関数などで実装が必要
保存後のクリア処理 ◎ 自動
設定不要
△ 自作が必要
Reset関数などで実装が必要
複雑な処理
(複数テーブル更新など)
× 苦手
単一テーブルのみの対応
◎ 得意
柔軟に対応可能

表の通り、Patch関数は「自由度が高い」代わりに、「入力チェックやリセット処理を自分で作る必要がある」という特徴があります。

Patch関数の基本構文

Patch関数を使う際、最も重要なのが「新規作成」と「更新」の書き方の違いです。
基本的には同じ関数ですが、第2引数(設定値)の指定方法が異なります。

0. 事前準備

前提として、今回の記事で使用するタスク管理テーブルの情報を以下に記載します。

列名 (論理名) データ型 データの例
タスク名
(TaskName)
テキスト 文房具(コピー用紙)の発注
優先度
(Priority)
選択肢 高、中、低
期限日
(DueDate)
日付 2024/06/10
目安時間
(EstHours)
数値 0.5、1.0、2.0

それでは、事前準備に入っていきます。
Patch関数を使用する場合は、事前に必要なコントロールを以下のように配置しておく必要があります。



配置する際は、テーブルの列の型に沿ったコントロールを配置しましょう。
また、登録や保存といったテーブルに保存するためのボタンも忘れずに配置してください。

選択肢型を登録する場合の注意点として、事前にドロップダウンコントロールやコンボボックスコントロールの「Items」プロパティに該当の列を指定しておく必要があります。
設定方法については、以下の記事で詳しく解説をしているのでご確認ください。


また、更新の場合は、事前にコントロールに対してテーブルのデータを反映させる必要があります。
一般的には、Galleryコントロールで選択されたレコードを表示するという方法があり、その場合は各コントロールの「Default」プロパティ(日付の選択コントロールの場合は「DefaultDate」プロパティ)に、以下のように「Galleryコントロール名.Selected.列名」と数式を入力します。

■実装イメージ


1. 新規登録の場合(Defaults)

それでは、本題に入っていきます。
まず、新しいデータを登録する場合は、第2引数にDefaults関数を使用します。
これは「データソースの初期値(空のレコード)」を指定する意味になります。

■実装イメージと数式の構造

▼ 参考構文

Patch(
    テーブル名,
    Defaults(テーブル名),
    {
        列名1(テキストの場合): 入力コントロール1.Text,
        列名2(選択肢の場合): 入力コントロール2.Selected.Value,
列名3(日付の場合): 入力コントロール3.SelectedDate,
    列名4(数値の場合): Value(入力コントロール4.Text) } )

▼ コードの解説

  • テーブル名保存先のデータソースを指定(今回はタスク管理)
  • Defaults(テーブル名):「新しい空の行」を作り出す
  • { ... }:波括弧の中で「列名: 保存したい値」のペアを指定、今回の記事の後半で詳細は解説するが列のデータ型によって設定方法が異なるため注意

2. データの更新の場合

既存のデータを更新する場合は、第2引数に「更新したい特定のレコード」を指定します。
Galleryコントロールで選択されたレコードを更新したい場合は以下のように設定を行います。

■実装イメージと数式の構造

▼ 参考構文

Patch(
    テーブル名,
    Gallery.Selected,
    {
        列名1(テキストの場合): 入力コントロール1.Text,
        列名2(選択肢の場合): 入力コントロール2.Selected.Value,
列名3(日付の場合): 入力コントロール3.SelectedDate,
    列名4(数値の場合): Value(入力コントロール4.Text)
} )

▼ コードの解説

  • Gallery.Selected更新対象のレコードを指定(今回はgalTaskギャラリーで選択しているレコード)
  • { ... }:更新したい列と値を指定する、指定しなかった列は元のまま維持される

このように、第2引数を Defaults(テーブル) にすれば新規、レコードそのものを指定すれば更新になります。

Patch関数を使う時の3つのポイント

Patch関数に挑戦する際、多くの方がつまづいてしまうポイントを3つご紹介します。

ポイント1:データ型ごとの書き方の違い

データを指定する際、テキスト型は .Text で済みますが、選択肢型や日付型は書き方が異なります。
代表的なパターンのカンニングペーパーを用意したので、ご確認ください。

列のデータ型 使用するコントロール Patch内での記述例
テキスト テキスト入力  TextInput.Text
数値 テキスト入力  Value(TextInput.Text)
※Value関数で数値に変換が必要
日付 日付の選択  DatePicker.SelectedDate
選択肢 ドロップダウン  Dropdown.Selected.Value

ポイント2:入力値が消えない(リセット問題)

編集フォームでは、保存成功時に自動で入力欄を空にしてくれましたが、Patch関数にはその機能がありません。
そのため、保存ボタンの処理の最後に、自分でReset関数を使用して入力欄をクリアする必要があります。

ポイント3:入力チェックが自動でされない

編集フォームでは、テーブルの列の設定を「必須」にしておけば、空欄のまま保存しようとした際に自動でブロックをしてくれましたが、Patch関数にはその機能がありません。
そのため、保存処理の直前にIf関数IsBlank関数を使って、自分でチェック処理(バリデーション)を書く必要があります。

実践的な保存ボタンのコード例

それでは、入力チェック(必須確認)を行い、データを保存し、最後にリセットまでを行う「完全版」のコードをご紹介します。

■実装イメージ

▼ 参考構文

If(
  IsBlank(必須入力コントロール名.Text),
  Notify("エラーメッセージ", NotificationType.Error),
  Patch(
    テーブル名,
    Defaults(テーブル名),
    {
      列名1(テキストの場合): 入力コントロール1.Text,
      列名2(選択肢の場合): 入力コントロール2.Selected.Value,
      列名3(日付の場合): 入力コントロール3.SelectedDate,
      列名4(数値の場合): Value(入力コントロール4.Text)
    }
  );
 Notify("成功メッセージ", NotificationType.Success);
 Reset(入力コントロール1);
 Reset(入力コントロール2);
 Reset(入力コントロール3);
 Reset(入力コントロール4)
);

▼ コードの解説

  • IsBlank( ... ):該当の項目が空欄でないかを確認(今回はタスク名)
  • Notify( ... ):リボンメッセージを表示
  • Reset( ... )入力コントロールの値を初期状態(空)に戻す
リセットのコツ
項目数が多い場合、ひとつずつReset関数を書くのは大変なので、UpdateContextで変数を切り替えて、各コントロールの「Reset」プロパティをその変数に紐づけることで一括リセットを行うテクニックもあります。

まとめ

本記事では、編集フォームを卒業して「Patch関数」でデータを保存・更新する方法をご紹介しました。

Patch関数は、以下の3ステップを意識することでどんどん使いこなせるようになります。
1. 新規か更新か(Defaults か Selected か)
2. データの型に合わせた記述
3. 必須項目の制御や保存後のリセット処理


最初は記述量が増えて大変に感じるかもしれませんが、これをマスターすれば「保存と同時にメールを送る」「条件によって値を書き換える」といった、アプリならではの便利な機能も実装できるようになります。

まずは簡単な題材等から、Patch関数での実装を試してみてください!

QES では Power Platform の開発支援、QAサポート、開発者教育、ガバナンス整備など、組織で Power Platform を活用するためのサポートを包括的にご提供しています。Power Platform 活用についてご興味がある/利用中だが課題を感じていらっしゃるお客様はまずはお気軽にお問い合わせください。


このブログで参照されている、Microsoft、Windows、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。

  • このエントリーをはてなブックマークに追加

お問い合わせ

Contact

ご質問やご相談、サービスに関する詳細など、何でもお気軽にご連絡ください。下記のお問い合わせフォームよりお気軽に送信ください。

お問い合わせ

資料ダウンロード

Download

当社のサービスに関する詳細情報を掲載した資料を、下記のページよりダウンロードいただけます。より深く理解していただける内容となっております。ぜひご活用ください。

資料ダウンロード