次の方法で共有


キャンバス アプリに対するデータ ソースについて理解する

Power Apps では、ほとんどのキャンバス アプリで、データ ソースと呼ばれるクラウド サービスに格納されている外部情報を使用します。 一般的な例は、OneDrive に格納されている Excel ファイル内のテーブルです。 アプリは接続を使用して、これらのデータ ソースにアクセスします。

この記事では、さまざまな種類のデータ ソースと、テーブル データ ソースの操作方法について説明します。

データ ソースに対する基本的な読み取りと書き込みを実行するアプリを作成するのは簡単です。 しかし、アプリのデータ フローの入出力をより細かく制御することが必要になる場合があります。 この記事では、PatchDataSourceInfoValidate、およびErrors 関数を使用してより細かな制御を提供する方法について説明します。

データ ソースの種類

データ ソースは、クラウド サービスに接続すること、またはアプリに対してローカルに配置することもできます。

接続されたデータ ソース

最も一般的なデータ ソースは、情報の取得と保存に使用できるテーブルです。 データ ソースへの接続を使用すると、Microsoft Excel ブック、Microsoft Lists を使用して作成されたリスト、SharePoint ライブラリ、SQL テーブル、およびその他の多くの形式でデータの読み書きを行うことができ、それらを OneDrive、DropBox、SQL Server などのクラウド サービスに格納できます。

テーブル以外のデータ ソースには、電子メール、予定表、Twitter、通知が含まれますが、この記事ではこのような他の種類のデータ ソースについては説明しません。

ローカル データ ソース

ギャラリー表示フォーム編集フォームコントロールを使用すると、データ ソースからデータを読み書きするアプリを作成できます。 始めに、データ フォームについて をお読みください。

データからアプリを作成するよう Power Apps に要求すると、これらのコントロールが使用されます。 バックグラウンドで、アプリは、データ ソースから取得したデータを格納して操作するために内部テーブルを使用します。

特殊な種類のデータ ソースは コレクション です。これはアプリに対してローカルであり、クラウド内のサービスへの接続に基づくものではありません。 したがって、同じユーザーのデバイス間またはユーザー間で情報を共有することはできません。 コレクションはローカルで読み込まれ、保存されます。

テーブルの種類

アプリの内部テーブルは、数値または文字列が値であると同様に固定値です。 内部テーブルはどこにも格納されませんが、アプリのメモリにのみ存在します。 テーブルの構造とデータを直接変更することはできません。 代わりに、数式を使用して新しいテーブルを作成することができます: その数式を使用して、元のテーブルの変更されたコピーを作成します。

外部テーブルはデータ ソースに格納され、後で取得して共有することができます。 Power Apps は、格納されたデータを読み取りと書き込みのための「接続」を提供します。 接続内では、複数の情報テーブルにアクセスできます。 アプリで使用するテーブルを選択すると、それぞれのテーブルが別個の データ ソース になります。

詳細は、内部テーブルにについては テーブルの操作 で詳しく説明されていますが、それはクラウド サービスに存在する外部テーブルもです。

テーブルの操作

テーブルのデータ ソースは、内部の Power Apps テーブルと同じ方法で使用できます。 内部テーブルと同じように、各データ ソースには、レコード、および数式で使用できるプロパティがあります。 さらに:

  • データ ソースは、接続の基になるテーブルと同じ列名とデータ型があります。

    注意

    SharePoint および名前にスペースが使われている列を含む Excel のデータ ソースの場合、Power Apps はスペースを "_x0020_" に置き換えます。 たとえば、SharePoint の"列名"または Excel は、データレイアウトまたは数式で表示すると、Power Apps では "Column_x0020_Name" として表示されます。

  • データ ソースは、アプリが読み込まれると、自動的にサービスから読み込まれます。 Refresh 関数を使用して、強制的にデータを最新の情報に更新できます。

  • ユーザーはアプリを実行するとき、レコードを作成、変更、削除して、その変更をサービスの基になるテーブルにプッシュ転送できます。

    • レコードは、Patch およびCollect 関数を使用して作成されます。
    • レコードは、PatchUpdate、およびUpdateIf 関数を使用して変更されます。
    • レコードは、Remove およびRemoveIf 関数を使用して削除されます。
    • データ ソースの操作に関するエラーは、Errors 関数を介して使用できます。
  • DataSourceInfoDefaults、およびValidate 関数は、ユーザー エクスペリエンスを最適化するために使用できる、データ ソースに関する情報を提供します。

データ ソースの作成

Power Apps は、接続されたデータ ソースを作成したり、データ ソースの構造を変更したりするために使用することはできません; データ ソースは、既にいずれかのサービスに存在している必要があります。 たとえば、OneDrive に保存された Excel ブックにテーブルを作成するには、最初に OneDrive で Excel Online を使用してブックを作成します。 次に、アプリからそのブックへの接続を作成します。

ただし、コレクションのデータ ソースは、アプリ内で作成と変更を行えますが、これは一時的なものです。

1 つまたは複数のレコードの表示

アプリがデータ ソースの情報を読み取るときの情報の流れ。

この図は、アプリがデータ ソース内の情報を読み取る場合の情報の流れを示しています:

  • 情報は、ストレージ サービス (この場合は、Microsoft Lists または SharePoint Online) を通じて保存および共有されます。
  • 接続は、この情報をアプリで使用できるようになります。 接続は、情報にアクセスするためのユーザーの認証を処理します。
  • アプリが起動されるか、Refresh 関数が押されると、情報は接続からアプリのデータ ソースに取得され、ローカルで使用できるようになります。
  • 数式は、情報を読み取り、その情報をユーザーが参照するコントロールに公開するために使用されます。 データ ソースのレコードを表示するには、画面のギャラリーを使用し、Items プロパティをデータ ソースに関連付けます: ギャラリー.Items = DataSource。 コントロールのDefault プロパティを使用して、ギャラリー内のコントロールをギャラリーに関連付けます。
  • データ ソースは、テーブルでもあります。 したがって、データ ソースを全体として使用する前に、FilterSortAddColumns、およびその他の関数を使用して、改良と拡張を行えます。 また、LookupFirstLast、およびその他の関数を使用して、個々のレコードを操作することもできます。

レコードの変更

以前の図に示されている矢印は一方向です。 データ ソースへの変更は、データを取得したのと同じ数式を介してプッシュ転送されません。 代わりに、新しい数式が使用されます。 多くの場合、特にモバイル デバイス上で、レコードの編集用には、レコードを閲覧用とは異なる画面が使用されます。

データ ソースの既存のレコードを変更するには、そのレコードがデータ ソースから取得されている必要があります。 このレコードは、ギャラリー、コンテキスト変数、任意の数式の数値で表示されている可能性がありますが、その取得元はデータ ソースまでさかのぼることができる必要があります。 レコードを一意に識別する追加情報がレコードに付属することで正しいレコードを変更することが保証されます。

データ ソースを更新するための情報の流れ。 この図は、データ ソースを更新するための情報の流れを示しています:

  • 編集フォーム コントロールは、入力カードのコンテナーを提供します。入力カードは、テキスト入力コントロールまたはスライダーなどのユーザー入力コントロールで構成されます。 DataSource およびItem プロパティは、編集するレコードを識別するために使用されます。
  • 各入力カードにはDefault プロパティがあります。このプロパティは、通常はフォームの ThisItem レコードのフィールドに設定されます。 入力カード内のコントロールは、Default から入力値を受け取ります。 通常はこのデフォルトを変更する必要はありません。
  • 各入力カードは、Update プロパティを公開します。 このプロパティは、ユーザーの入力を、データ ソースに書き戻すために、レコードの特定のフィールドにマップします。 通常はこのプロパティを変更する必要はありません。
  • 画面上のボタンまたはイメージ コントロールをは、ユーザーがレコードへの変更を保存できます。 そのためには、コントロールのOnSelect 数式でSubmitForm 関数を呼び出します。 SubmitForm は、カードのすべての Update プロパティを読み取り、データ ソースに書き戻します。
  • 場合によっては問題が発生することがあります。 ネットワーク接続が切断されている場合や、アプリが認識できないサービスによって検証チェックが行われている場合があります。 フォーム コントロールの Error およびErrorKind プロパティは、この情報を使用可能するので、ユーザーに表示できるます。

プロセスをより細かく制御するために、Patch およびErrors 関数を使用することもできます。 編集フォーム コントロールではUpdate プロパティが公開されるため、フォーム内のフィールドの値を読み取ることができます。 このプロパティを使用して、Patch および SubmitForm 関数を完全にバイパスし、接続上でカスタム コネクタを呼び出すこともできます。

Validation

レコードに変更を加える前に、アプリはできる限りのことを行い、変更が受け入れられることを確認する必要があります。 確認するには 2 つの理由があります:

  • ユーザーへの即時のフィードバック。 問題を修正するのに最適な時は、その問題が発生し、ユーザーの記憶に新鮮なときです。 実際、タッチ操作またはキー入力ごとに、入力の問題を示す赤いテキストを表示できます。
  • ネットワーク トラフィックの削減とユーザーの待ち時間の短縮。 アプリで問題を多く検出することは、問題を検出して解決するためのネットワーク経由の会話を減らすという意味です。 各会話は、ユーザーが進む前に待つ必要のある間、時間がかかります。

Power Apps は、検証用に 2 つのツールが用意されます:

  • データ ソースは、有効なものとそうではないものに関する情報を提供できます。 たとえば、数値に最小値と最大値があり、1 つ以上のエントリを必須にできます。 この情報には、DataSourceInfo 関数を使用してアクセスできます。
  • Validate 関数は、単一の列またはレコード全体の値を確認するため、この同じ情報を使用します。

エラー処理

レコードを検証したので、そのレコードを パッチ で更新します。

しかし、残念ながら、まだ問題があります。 アプリは、ネットワークがダウンしている、サービスでの検証に失敗した、ユーザーが適切なアクセス許可を持っていない、などのエラーが発生する可能性があります。 アプリはエラー状況に適切に対応して、ユーザーにフィードバックおよびエラーを修正する手段を提供する必要があります。

データ ソースでエラーが発生すると、アプリは自動的にエラー情報を記録し、それをErrors 関数を介して使用できるようにします。 エラーは、問題が発生したレコードに関連付けられます。 検証の問題など、ユーザーによって修正可能な問題の場合、レコードを再送信して、エラーが解決されます。

パッチ または収集 を使用してレコードが作成されたときにエラーが発生した場合、エラーが関連付けられるレコードはありません。 その場合、Patch によって空白が返され、これをErrors へのレコード引数として使用できます。 作成エラーは次の操作で解決されます。

Errors 関数は、エラー情報のテーブルを返します。 エラーが特定の列に原因があると考えられる場合は、この情報は列情報を含めることができます。 編集画面上の列の近くにあるラベル コントロールで、列レベルのエラー メッセージを使用します。 エラー テーブルの空白であるレコード レベルのエラー メッセージは、レコード全体の保存ボタンの近くの場所で使用します。

大規模なデータ ソースの操作

(数百万件のレコードが含まれる) 大規模なデータ ソースからレポートを作成する場合は、ネットワーク トラフィックを最小限にします。 ニューヨーク市の プラチナStatusCode を持つすべての 顧客 のレポートを開きたいとします。 この顧客 テーブルには、数百万件のレコードが含まれています。

数百万人の顧客レコードをアプリに取り込んだ後で目的のレコードを選択することはしません。 この選択はテーブルが格納されているクラウド サービス内でおこり、選択されたレコードのみをネットワーク経由で送信します。

すべてではありませんが、レコードを選択するために使用できる関数の多くは委任することができます。つまり、それらはクラウド サービス内で実行されます。 詳細については 委任 を参照

Collections

コレクションは、特別な種類のデータ ソースです。 これらはアプリに対してローカルであり、クラウド内のサービスへの接続によってサポートされません。 したがって、同じユーザーのデバイス間またはユーザー間で情報を共有することはできません。

コレクションは他のデータ ソースと同様に機能しますが、いくつかの例外を除きます:

  • コレクションは、Collect 関数を使用して動的に作成できます。 コレクションは、接続ベースのデータ ソースのように、事前に確立する必要はありません。
  • コレクションの列は、Collect 関数を使用していつでも変更できます。
  • コレクションは、重複するレコードを許可します。 コレクションでは、同じレコードのコピーが複数存在できます。 All 引数が指定されていない限り、Remove などの関数は見つけた最初の一致で動作します。
  • SaveData およびLoadData 関数を使用して、コレクションのコピーの保存と再読み込みを行うことができます。 情報は、他のユーザー、アプリ、またはデバイスがアクセスできないプライベートな場所に保存されます。
  • エクスポート およびインポート コントロールを使用して、ユーザーが操作できるファイルとの間でコレクションのコピーの保存と再読み込みを行うことができます。

データ ソースとしてのコレクションの操作方法の詳細については、コレクションの作成と更新 を参照してください。

コレクションは通常、アプリのグローバルな状態を保持するために使用しされます。 状態を管理するために使用できるオプションについては、変数の操作 を参照してください。