Collect を使用してコレクションとデータ ソースの間でデータを移動する

完了

コレクションは特別なデータ ソースです。 これらのデータはアプリ内に保存され、クラウド サービスへの接続でバックアップされないため、デバイスを介した同じユーザーまたはユーザー間の共有を行うことはできません。 コレクションは、Collect 関数を使用して動的に作成することができます。 接続ベースのデータ ソースのように、これらのデータを事前に準備する必要はありません。 つまり、コレクションは変数にすぎないため、ユーザーがアプリを保存してもその内容は保存されません。 アプリを実行する他のどのユーザーも、アプリに含まれているデータにアクセスできません。 コレクションの情報を保存するには、情報をデータ ソースに書き込む必要があります。 コレクション データをデータ ソースに保存する 2 つの主な方法を見てみましょう。

Collect 関数を使用する

Collect 関数は、データ ソースにレコードを追加します。 値、レコード、またはテーブルを 1 つだけコレクションに追加することができます。 コレクションを作成して、SharePoint リストや Dataverse テーブルなどのデータ ソースに書き込むために使用されます。 データを一括で書き込むことができるため、ForAll/Patch 関数を使用してデータをループ処理する必要がありません

Collect を使用してデータ ソースにデータを書き込む際に、列名とデータ構造が入力元と一致する場合は、項目をレコードとして指定できます。 たとえば、次の式は Patch 関数と非常によく似た方法で 1 件のレコードをデータに書き込みます。

Collect('YourDataSource', {Title: 'First Try', StartDate: Today()})

この式はデータ ソースに 'Title' および 'StartDate' という 2 つの列があり、そのデータ型が順にテキストと日付である場合に、データ ソースにレコードを 1 件作成し、タイトルに 'First Try' を、StartDate に今日の日付を入力します。

最初のレコードに続けて複数のレコードを指定し、一度に書き込を行うことも可能ですが、各列のデータ型 (必須の列を含む) が一致している必要があります。

テーブル全体を Collect 文を使用してデータ ソースに書き込むこともできますが、やはりデータ構造が一致している必要があります。

最後に、コレクション全体をデータ ソースに書き込む場合は、次のような構文でシンプルに式を作成できます。

Collect('YourDataSource', colMyCollection)

データ ソースに 1 件のレコードを書き込む場合のように、Collect を使用してテーブル全体をデータ ソースに書き込む場合も、データ構造と列名は、書き込み先の列と一致させる必要がありますCollect 関数を使用する最大のメリットは、コードがシンプルになることです。

まとめとして、Collect を使用してデータ ソースに書き込む際には、次の 3 つの点に注意してください。

  • コレクションの列がデータ ソースに存在する必要があります。 データ ソースには他の列 (システム生成列など) が存在する可能性がありますが、コレクションのソースの列が書き込み先のデータ ソースに存在する必要があります。 (コレクションにウィジェットというテキストの列がある場合、データ ソースにもウィジェットというテキストの列が必要です。)

  • コレクション内の各列のデータ型 (テキスト、数値、日付など) が、ターゲットのデータ型と一致している必要があります。

  • データ ソースのすべての必須列のデータをコレクションに含める必要があります。

ヒント

必要な場合は、次の関数を使用して、列がデータ ソースと一致するようにコレクションを変換できます。

  • AddColumns
  • DropColumns
  • RenameColumns
  • ShowColumns

詳細については、Power Apps の AddColumns、DropColumns、RenameColumns、および ShowColumns 関数をご覧ください。

Collect 関数とコレクションの詳細については、Collect のドキュメント を参照してください。

Patch と ForAll

Patch 関数を使用すると、データ ソースのレコードを変更または作成することができます。 ForAll 関数を使用するとテーブル内の各レコードに対して式を実行することができ、コレクションはテーブルです。 これらの関数を組み合わせて、コレクションのコンテンツでデータ ソースを更新することができます。 コード作成の労力は Collect を使用する場合よりも増えますが、適用するロジックが多い場合は ForAll/Patch の使用をお勧めします。

たとえば、NameFavoriteColorUpdateSource の 3 つの列を含む collectColorData という名前のコレクションを作成します。 ソースの更新 列は、ブール値 (true または false) の列です。 アプリを使用する処理で、ユーザーは、列の値を更新してから、ソースの更新というボタンを選択します。 ボタンの OnSelect プロパティには、この式を設定します。

ForAll(Filter(collectColorData, UpdateSource = true),
Patch(DataSourceName, Defaults(DataSourceName), {NameColumnSource: Name,
FavoriteColorColumnSource: FavoriteColor}))

この式では、コレクションで UpdateSource が true に設定されているレコードについてのみDataSourceName という名前のデータ ソースに新しいレコードが追加され、NameColumnSource 列と FavoriteColorColumnSource 列にコレクションの値が設定されます。

この例はさらに最適化できますが、ここではコレクションへのデータ ソースの動的保存の概念を示すことだけを目的としています。

ForAll 関数の詳細については、ForAll のドキュメントを参照してください。

Patch 関数の詳細については、Patch のドキュメントを参照してください。

コレクションからデータ ソースにデータを書き込む方法とその利点について説明しました。次に、外部データとコレクションの操作に関する演習を行いましょう。