Update および UpdateIf 関数

適用先: キャンバス アプリ モデル駆動型アプリ

データ ソース 内のレコード を更新します。

Description

Update 関数

データ ソースのレコード全体を置換するには、Update 関数を使用します。 これに対して、UpdateIf 関数と Patch 関数は、レコード内の一定の値だけを変更し、残りの値をそのまま維持するものです。

コレクション の場合には、レコード全体が一致している必要があります。 コレクションではレコードの重複が許可されているため、複数のレコードが一致することがあります。 レコードのコピー全部を更新する場合には、RemoveFlags.All 引数を使用します。この引数を使用しなかった場合には、レコードのコピーが 1 つだけ更新されます。

データ ソースによって列の値が自動で生成されている場合には、その の値を再確認する必要があります。

UpdateIf 関数

一定の条件に合致する 1 つ以上のレコードの 1 つ以上の値を変更するときには、UpdateIf 関数を使用します。 条件は、結果が true または false になるものであれば、どのような数式でも指定できます。また、データ ソースの列を名前で参照することもできます。 この関数では、各レコードについて条件が評価され、評価結果が true のレコードがあれば変更されます。

変更を指定するには、新しいプロパティ値を含む変更レコードを使用します。 中かっこを使用してこの変更レコードをインラインで指定すると、プロパティの数式は変更中のレコードのプロパティを参照できます。 この動作を使用して、数式に基づいてレコードを変更できます。

特定の列だけを変更し、他の列はそのまま維持する場合には、UpdateIf のほかに Patch 関数も使用できます。

Update および UpdateIf のどちらも、変更後のデータ ソースをテーブル として返します。 動作の数式 では、どちらかの関数を使用する必要があります。

委任

データ ソースと共に使用する場合、これらの関数は委任できません。 データ ソースの最初の部分のみが取得され、その後にその関数が適用されます。 これは、完全なストーリーを表さない場合があります。 作成時に、この制限を知らせる警告が表示される場合があります。

委任サポート (試験段階)

UpdateIf と RemoveIf の委任サポートは、それをサポートするデータ ソースの試験的なプレビュー (デフォルトはオフ) になりました。 データ ソースがこの機能をサポートしていない場合は、Power Apps はサーバーにクエリを送信し、フィルター式に一致するすべてのデータを、500、2000、またはデータ ページ サイズのいずれかの最大値まで取得するようになります。 次に、それらのレコードを更新し、それぞれをサーバーに送り返して更新されます。

構文

Update( DataSource, OldRecord, NewRecord [, RemoveFlags.All ] )

  • DataSource – 必須。 置換するレコードが含まれるデータ ソース。
  • OldRecord – 必須。 置換するレコード。
  • NewRecord – 必須。 置換レコード。 これは、変更レコードとは異なるものです。 レコード全体が置換され、不足しているプロパティには空白が含まれます。
  • RemoveFlags.All – オプション。 コレクションでは、同じレコードが複数存在することがあります。 RemoveFlags.All 引数を指定して、レコードのすべてのコピーを更新します。

UpdateIf( DataSource, Condition1, ChangeRecord1 [, Condition2, ChangeRecord2, ... ] )

  • DataSource – 必須。 変更するレコードが含まれるデータ ソース。
  • Condition(s) – 必須。 変更するレコードに対して true と評価される数式。 数式では、DataSource の列名を使用できます。
  • ChangeRecord(s) - 必須。 対応する各条件について、条件を満たす DataSource のレコードに適用される新しいプロパティ値の変更レコード。 中かっこを使ってレコードをインラインで指定した場合には、そのプロパティの数式で既存のレコードのプロパティの値を使用できます。

ここで紹介する例では、IceCream という名前のデータ ソースのレコードを置換したり、変更したりしていきます。このデータ ソースには以下のテーブルが存在し、初期データが次のようになっています。

IceCream の例。

内容 結果
Update( IceCream,
First( Filter( IceCream, Flavor="Chocolate" ) ), { ID: 1, Flavor: "Mint Chocolate", Quantity:150 } )
データ ソースからレコードを 1 つ置換します。 レコードの置き換え

IceCream データ ソースの内容が変更されました。
UpdateIf( IceCream, Quantity > 175, { Quantity: Quantity + 10 } ) 数量の値が 175 よりも大きなレコードを対象として変更を実施します。 数量フィールドの値を 10 ずつ増やします。他のフィールドは変更しません。 レコードの変更

IceCream データ ソースの内容が変更されました。
Update( IceCream,
First( Filter( IceCream, Flavor="Strawberry" ) ),
{ ID: 3, Flavor: "Strawberry Swirl"} )
データ ソースからレコードを 1 つ置換します。 置換レコードで Quantity プロパティが指定されていないため、結果ではこのプロパティが空白になります。 数量が指定されていない場合はレコードを置き換えてください

IceCream データ ソースの内容が変更されました。
UpdateIf( IceCream, true, { Quantity: 0 } ) データ ソース内の全レコードについて、Quantity プロパティの値を 0 に設定します。 すべての数量を 0 に設定する

IceCream データ ソースの内容が変更されました。

手順

  1. 在庫という名前のコレクションをインポートまたは作成し、ギャラリーにデータを表示する 方法に関するページの手順に従って、コレクションをギャラリーに表示します。

  2. ギャラリーの名前として ProductGallery を指定します。

  3. UnitsSold という名前のスライダーを追加し、Max プロパティを次の数式に設定します。
    ProductGallery.Selected.UnitsInStock

  4. ボタンを追加し、OnSelect プロパティを次の計算式に設定します。
    UpdateIf(Inventory, ProductName = ProductGallery.Selected.ProductName, {UnitsInStock:UnitsInStock-UnitsSold.Value})

  5. F5 キーを押し、ギャラリーで製品を選択して、スライダーで目的の値を指定したら、ボタンを選択します。

    指定した製品の在庫数が、指定した量だけ減少します。