Update および UpdateIf 関数
適用先: キャンバス アプリ モデル駆動型アプリ
Description
Update 関数
データ ソースのレコード全体を置換するには、Update 関数を使用します。 これに対して、UpdateIf 関数と Patch 関数は、レコード内の一定の値だけを変更し、残りの値をそのまま維持するものです。
コレクション の場合には、レコード全体が一致している必要があります。 コレクションではレコードの重複が許可されているため、複数のレコードが一致することがあります。 レコードのコピー全部を更新する場合には、RemoveFlags.All 引数を使用します。この引数を使用しなかった場合には、レコードのコピーが 1 つだけ更新されます。
データ ソースによって列の値が自動で生成されている場合には、その列 の値を再確認する必要があります。
UpdateIf 関数
一定の条件に合致する 1 つ以上のレコードの 1 つ以上の値を変更するときには、UpdateIf 関数を使用します。 条件は、結果が true または false になるものであれば、どのような数式でも指定できます。また、データ ソースの列を名前で参照することもできます。 この関数では、各レコードについて条件が評価され、評価結果が true のレコードがあれば変更されます。
変更を指定するには、新しいプロパティ値を含む変更レコードを使用します。 中かっこを使用してこの変更レコードをインラインで指定すると、プロパティの数式は変更中のレコードのプロパティを参照できます。 この動作を使用して、数式に基づいてレコードを変更できます。
特定の列だけを変更し、他の列はそのまま維持する場合には、UpdateIf のほかに Patch 関数も使用できます。
Update および UpdateIf のどちらも、変更後のデータ ソースをテーブル として返します。 動作の数式 では、どちらかの関数を使用する必要があります。
委任
データ ソースと共に使用する場合、これらの関数は委任できません。 データ ソースの最初の部分のみが取得され、その後にその関数が適用されます。 これは、完全なストーリーを表さない場合があります。 作成時に、この制限を知らせる警告が表示される場合があります。
委任のサポート
一部のデータ ソースのみが UpdateIf をサポートしています。 データ ソース がこの機能をサポートしていない場合、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 という名前のデータ ソースのレコードを置換したり、変更したりしていきます。このデータ ソースには以下のテーブルが存在し、初期データが次のようになっています。
式 | 内容 | 結果 |
---|---|---|
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 に設定します。 | IceCream データ ソースの内容が変更されました。 |
手順
在庫という名前のコレクションをインポートまたは作成し、ギャラリーにデータを表示する 方法に関するページの手順に従って、コレクションをギャラリーに表示します。
ギャラリーの名前として ProductGallery を指定します。
UnitsSold という名前のスライダーを追加し、Max プロパティを次の数式に設定します。
ProductGallery.Selected.UnitsInStockボタンを追加し、OnSelect プロパティを次の計算式に設定します。
UpdateIf(Inventory, ProductName = ProductGallery.Selected.ProductName, {UnitsInStock:UnitsInStock-UnitsSold.Value})F5 キーを押し、ギャラリーで製品を選択して、スライダーで目的の値を指定したら、ボタンを選択します。
指定した製品の在庫数が、指定した量だけ減少します。