適用対象: キャンバス アプリ
モデル駆動型アプリ
Description
Update 関数
Update関数を使用して、データ ソース内のレコード全体を置き換えます。 これに対し、 UpdateIf 関数と Patch 関数は、レコード内の 1 つ以上の値を変更し、他の値はそのままにします。
コレクション の場合には、レコード全体が一致している必要があります。 コレクションではレコードの重複が許可されているため、複数のレコードが一致することがあります。 レコードのコピー全部を更新する場合には、RemoveFlags.All 引数を使用します。この引数を使用しなかった場合には、レコードのコピーが 1 つだけ更新されます。
データ ソースによって列の値が自動で生成されている場合には、その列 の値を再確認する必要があります。
UpdateIf 関数
UpdateIf関数を使用して、1 つ以上の条件に一致する 1 つ以上のレコードの 1 つ以上の値を変更します。 条件は、結果が true または false になるものであれば、どのような数式でも指定できます。また、データ ソースの列を名前で参照することもできます。 この関数では、各レコードについて条件が評価され、評価結果が true のレコードがあれば変更されます。
変更を指定するには、新しいプロパティ値を含む変更レコードを使用します。 中かっこを使用してこの変更レコードをインラインで指定すると、プロパティの数式は変更中のレコードのプロパティを参照できます。 この動作を使用して、数式に基づいてレコードを変更できます。
UpdateIfと同様に、Patch 関数を使用して、他の列に影響を与えずにレコードの特定の列を変更することもできます。
UpdateとUpdateIfの両方で、変更されたデータ ソースがテーブルとして返されます。 動作の数式 では、どちらかの関数を使用する必要があります。
委任
これらの関数は、データ ソースに委任されません。 ただし、 UpdateIf と RemoveIf は ローカルで動作し、最大 500/2000 レコードまでの委任をシミュレートします。 非委任の制限である 500/2000 レコードを超えるレコードが徐々にダウンします。 If 条件を満たすレコードが収集されます。 一般に、最大 500/2000 個のレコードが個別に収集され、実行ごとに変更されます。 ただし、既存のローカル データ キャッシュが大きい場合は、より多くのレコードが更新される可能性があります。これは、関数が評価のためにさらに多くのレコードにアクセスできる可能性があるためです。 データ ソースの最初の部分のみが取得され、関数が適用されます。 これは完全な画像を表していない可能性があります。 この制限を思い出させるために、作成時に警告が表示されることがあります。
構文
Update(DataSource_, OldRecord, NewRecord [, RemoveFlags.All ] )
- DataSource – 必須。 置換するレコードが含まれるデータ ソース。
- OldRecord – 必須。 置換するレコード。
- NewRecord – 必須。 置換レコード。 これは、変更レコードとは異なるものです。 レコード全体が置き換えられ、不足しているプロパティに空白が含 まれています。
- RemoveFlags.All – オプション。 コレクションでは、同じレコードが複数存在することがあります。 RemoveFlags.All 引数を指定して、レコードのすべてのコピーを更新します。
UpdateIf(DataSource_, Condition1, ChangeRecord1 [, Condition2, ChangeRecord2, ... ] )
- DataSource – 必須。 変更するレコードが含まれるデータ ソース。
- 条件 – 必須。 変更するレコードに対して true と評価される数式。 数式では、DataSource の列名を使用できます。 複数の条件が渡された場合、true と評価される最初の条件に関連する ChangeRecord のみが適用されます。
- ChangeRecord(s) - 必須。 対応する各条件について、条件を満たす DataSource のレコードに適用される新しいプロパティ値の変更レコード。 中かっこを使ってレコードをインラインで指定した場合には、そのプロパティの数式で既存のレコードのプロパティの値を使用できます。
例
ここで紹介する例では、IceCream という名前のデータ ソースのレコードを置換したり、変更したりしていきます。このデータ ソースには以下のテーブルが存在し、初期データが次のようになっています。
式 | Description | 結果 |
---|---|---|
Update( IceCream、 LookUp( IceCream, Flavor="Chocolate" ), { ID: 1, Flavor: "Mint Chocolate", Quantity:150 } ) |
データ ソースからレコードを 1 つ置換します。 |
![]() IceCream データ ソースの内容が変更されました。 |
UpdateIf( IceCream, Quantity > 175, { Quantity: Quantity + 10 } ) | 数量の値が 175 よりも大きなレコードを対象として変更を実施します。 数量フィールドの値を 10 ずつ増やします。他のフィールドは変更しません。 |
![]() IceCream データ ソースの内容が変更されました。 |
Update( IceCream、 LookUp( IceCream, Flavor="Strawberry" ), { ID: 3, フレーバー: "ストロベリースワール"} ) |
データ ソースからレコードを 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 キーを押し、ギャラリーで製品を選択して、スライダーで目的の値を指定したら、ボタンを選択します。
指定した製品の在庫数が、指定した量だけ減少します。