Patch 関数を使用してレコードを作成および編集する
フォーム コントロールを使用してもニーズに合わない場合は、Patch 関数を使用してデータ ソース内のレコードを作成および編集します。 Patch は多くの場合、ユーザー操作なしでデータを処理する必要があるときに繰り返し使用されます。 さらに、アプリ デザインでフォームを使用できない場合にも使用されます。
Patch を使用してレコードを作成する
Patch 関数を使用して、データ ソースに新しいレコードを作成することができます。 新しいレコードを作成する場合、式には 3 つの部分があります。
編集するデータ ソースの名前を含めます。 これは、表形式のデータ ソース (Microsoft Dataverse や SharePoint など) またはコレクションです。 たとえば、データ ソースの名前に CustomerOrders を使用します。
Defaults 関数により、データ ソースの既定値を含むレコードが返されます。 データ ソース内の列に既定値がない場合、そのプロパティは表示されません。 データ ソースと Defaults を使用すると、新しいレコードを作成するように Patch に通知されます。
新しいレコードに入力する列を含めます。 ここでは、更新する列の名前を指定してから、その列に書き込む値を指定します。 この例では、Region と Country の列を文字列値で更新します。
式の例は次のとおりです。
Patch(CustomerOrders, Defaults(CustomerOrders), {Region: "Americas", Country: "Canada"})
この数式では、CustomerOrders データ ソースに新しいレコードが作成され、Region が Americas に、Country が Canada に設定されます。 設定に従ってデータ ソースによって更新される主キー情報 (ID 列) を定義しない点に注目してください。
Patch を使用してレコードを編集する
データ ソース内のレコードを編集することもできます。 1 つのレコードを編集する場合、式には 3 つの部分があります。
編集するデータ ソースの名前を含めます。 これは、表形式のデータ ソース (Dataverse や SharePoint など) またはコレクションです。 たとえば、データ ソースの名前に CustomerOrders を使用します。
データ ソース内の編集するレコード。 このレコードを指定する最も一般的な方法は、LookUp 関数を使用してデータ ソースからレコードを取得することです。 ギャラリーを使用していて現在のレコードを更新する場合のもう 1 つの選択肢として、レコードを参照する ThisItem 関数を使用する方法があります。 この例では、LookUp 関数を使用します。
加える変更を含めます。 ここでは、更新する列の名前を指定してから、その列に書き込む値を指定します。 この例では、Region と Country の列を文字列値で更新します。
式の例は次のとおりです。
Patch(CustomerOrders, LookUP(CustomerOrders, ID = 1), {Region: "Asia", Country: "China"})
この式では、Region 列を Asia に、Country 列を China に設定することで、CustomerOrders テーブルの ID が 1 のレコードが更新されます。 それらのフィールドに既存の値がある場合は、上書きされます。
Patch を使用して列を更新する
ほとんどの Patch 関数の主なロジックは、正しい情報を使用して適切な列を更新することです。 これが Patch 関数のほとんどのトラブルシューティングの原因になります。 次の点に注意して、Patch の作業を進めてください。
データ ソースの必要なすべての列を更新していることを確認します。
必要に応じて、任意の数の任意の列を更新できます。
列名のスペルと大文字が正しく入力されていることを確認します。 列名は大文字と小文字が区別されます。
正しいデータ型を記述していることを確認します。 たとえば、データ ソースの列が数値型の場合は、文字列に数値が含まれていても文字列値を書き込むことはできません。
式で値を渡してデータ ソースの Patch を実行する場合は、4 つのソースがあります。
値をハードコーディングすることができます。 たとえば、レコードの状態を "保留中" に修正する場合、Patch の式は次のようになります。
Patch(CustomerOrders, Default(CustomerOrders), {Status: "Pending"})
この式では新しいレコードが作成され、[状態] 列が "保留中" という文字列値に設定されます。
変数を参照することができます。 たとえば、次の式を使用して、文字列 "レビュー中" を varStatus という名前の変数に格納できます。
Set(varStatus, "Under Review")
すると、Patch の式は次のようになります。
Patch(CustomerOrders, Default(CustomerOrders), {Status: varStatus})
この式では新しいレコードが作成され、[状態] 列が "レビュー中" という文字列値に設定されます。
コントロールのプロパティから値を参照できます。 たとえば、地域を含む Dropdown1 という名前のドロップダウン メニューから値を設定します。 Patch の式は次のようになります。
Patch(CustomerOrders, Default(CustomerOrders), {Status: Dropdown1.Selected.Value})
この式では、新しいレコードが作成され、[状態] 列がドロップダウン メニューの選択した項目の値に設定されます。
式の出力を使用することができます。 たとえば、User() 関数から FullName を使用して Owner 列の値を設定します。 Patch の式は次のようになります。
Patch(CustomerOrders, Default(CustomerOrders), {Owner: User().FullName})
この式では、新しいレコードが作成され、Owner 列が Microsoft Entra ID の現在のユーザーの FullName に設定されます。
Patch の例
この例では、到着時にユーザーをクラスにサインインするためのソリューションを作成しています。 この種類の Power Apps ソリューションは一般的であり、Patch 関数を使用することで結果をすばやく達成できます。
ソリューションの内訳
ここでは、データソース (トレーニング クラス サインイン) に接続された単純なキャンバス アプリを示します。 データソースには、次の列、トレーニング クラス、名、姓、メール アドレス、サインイン ステータスがあります。 これは、ユーザーが Sign In ボタンを選択したときに収集する情報です。 式バーに次のコードが表示されます。
Patch(TrainingClassSignIn,Defaults(TrainingClassSignIn),{TrainingClass:TrainingClassDD.Selected.Value, FirstName:FirstNameInput.Text, LastName:LastNameInput.Text, EmailAddress:EmailAddressInput.Text, SignInStatus:"Attended"})
ここでは、ユーザーが Sign In ボタンを選択するたびに、Power Apps により新しいレコードが TrainingClassSignIn データ ソースに書き込まれます。 ユーザーがサインインしたときに書き戻されるデータについては、追加した各種コントロール (式で色分けされています) からこの情報が取得されます。 新しいレコードが送信されるたびに、コードにより SignInStatus が "有人" に設定されることもわかります。
ご覧のとおり、Patch は非常に柔軟で強力です。 Patch には、複数のレコードを更新する、レコードを結合するなど、さらに多くの機能があります。 これらのシナリオの詳細については、Power Apps の Patch 関数を参照してください。