データ ソースとコレクションからレコードを削除する

完了

このユニットでは、表形式のデータ ソースまたはコレクションからレコードを削除する方法の概念について説明します。 複数のコントロールや関数があるレコードの作成や編集とは異なり、レコードの削除には、RemoveRemoveIf、および Clear 関数など、わずなかオプションしかありません。 ほとんどの場合、これらの関数をボタンまたはアイコン コントロールの OnSelect プロパティに追加してレコードを削除します。

レコードの削除

データ ソースからレコードを削除するには、Remove 関数を使用します。 Remove 関数を使用して、削除するデータ ソースとレコードを指定します。 このレコードを指定する最も一般的な方法は、LookUp 関数を使用してデータ ソースからレコードを取得することです。 ギャラリーを使用していて現在のレコードを削除する場合、ThisItem がレコードを参照します。

たとえば、次の数式を使用してレコードを削除することができます。

Remove(CustomerOrders, LookUp(CustomerOrders, ID = 1))

この数式は、データ ソース CustomerOrders から、ID が 1 に等しいレコードを削除します。

Remove では確認が求められない

Remove では、指定したレコードを削除する前に確認のプロンプトが表示されません。 ユーザーがレコードを削除することを確認するには、ボタンのあるポップアップ ダイアログ ボックスなど、確認機能を作成する必要があります。

条件に基づいた削除

データ ソースから複数のレコードを削除する場合は、RemoveIf を使用できます。 RemoveIf 関数では、削除元のデータ ソースと、削除するレコードを選択する条件を指定できます。 これは、Filter 関数に使用されるものと同じロジックです。

たとえば、次の数式を使用して、CustomerOrders データ ソースから Status が Expired に等しいすべてのレコードを削除できます。

RemoveIf(CustomerOrders, Status = "Expired")

すべてのレコードを削除する

データ ソース内のすべてのレコードを削除することもできます。 これはコレクションによく使用され、Clear 関数を使用できます。 データ ソースからすべてのレコードを削除する場合は、RemoveIf を使用できます。

コレクション内のすべてのレコードを削除する

Clear 関数では、コレクションのすべてのレコードが削除されます。 コレクションの列は残ります。 関数に渡す唯一の入力はコレクション名です。

たとえば、次の数式を使用して、collectSelectedItems と呼ばれるコレクションからすべてのレコードを削除できます。

Clear(collectSelectedItems)

この数式では、コレクションの列を変更せずに、collectSelectedItems コレクションからすべてのレコードが削除されます。

このような数式は、リセット ボタンや新しい注文の選択の場合のように、コレクションを再定義することなくコレクションを空にする場合に使用します。 コレクションを扱う際は、ClearCollect 関数も使用できます。

ClearCollect 関数では、コレクションからすべてのレコードが削除され、同じコレクションに別のレコード セットが追加されます。 ClearCollect は、1 つの関数で ClearCollect の機能を実行することができます。

3 つの関数すべてにそれぞれの用途があります。 Clear と Collect を使用するか、ClearCollect を使用するかを決定する方法の 1 つとして、レコードを追加し直すタイミングと比較し、コレクションのクリアをいつ行うか、という点があります。 これを説明するために 2 つの例を示します。

  • 一度にすべて: たとえば、画面が表示されたときにドロップダウン メニューのコレクション内の項目を再度読み込む場合は、ClearCollect を使用します。 数式で 1 つの ClearCollect 関数を使用すると、古いレコードが削除され、新しいレコードがすぐに追加されます。

  • 複数の手順: たとえば、ショッピング カートのように、ユーザー入力の保存にコレクションを使用している場合は、ClearCollect を使用できます。 これは、ユーザーが新しいレコードを追加せずにショッピングカートをクリアする場合があるためです。

データ ソースからすべてのレコードを削除する

RemoveIf を使用して、データ ソースからすべてのレコードを削除することができます。 これは一般的なシナリオではありません。 繰り返しになりますが、確認用の関数を数式の処理前に構築しない限り、削除前に削除を確認する機能はありません。 最後に、Power Apps には元に戻す機能またはごみ箱はありません。 データを復旧する場合は、データ ソースにアクセスし、Power Apps の外部でそのデータ ソースに使用できる何らかの復旧プロセスを使用する必要があります。 慎重に進めてください。

たとえば、次の数式を使用してデータ ソースからすべてのレコードを削除できます。

RemoveIf(CustomerOrders, true)

この数式では、データ ソースの列を変更せずに、CustomerOrders データ ソースからすべてのレコードが削除されます。

これが機能する理由は、RemoveIf ではデータ ソース内のすべてのレコードが調べられ、演算式が true に等しいかどうかが確認されるためです。 この場合、演算式は true に設定されているため、すべてのレコードが削除されます。

メモ

演算式の部分を true に設定すると、Filter 関数にも使用できます。 これは、Filter がデータを返しているかどうかわからない数式の問題を解決する場合に役に立ちます。