Power Apps の SaveData および LoadData、ClearData 関数

コレクションアプリ ホストのストレージから保存して再読込みします。

注意

これらの機能は、 試験的な機能として、Web ブラウザでアプリを再生する際に使用できるようになりました。 この機能は、既定で無効になっています。 有効化するには、設定 > 今後の機能 > 試験的 > web プレイヤーでの SaveData、LoadData、ClearData の有効化 にアクセスし 、 スイッチをオンにします。 この試験的な機能に関するフィードバックを送信するには、Power Appsコミュニティ フォーラムにアクセスしてください。

内容

SaveData 関数は、後で名前から使用できるようにコレクションを格納します。

LoadData 関数は、既に SaveData で保存されている名前を使用してコレクションを再読み込みします。 別のソースからコレクションを読み込む場合、この関数は使用できません。

ClearData 関数は、名前が指定されていない場合、特定の名前でストレージをクリアするか、またはアプリに関連付けられているすべてのストレージをクリアするかです。

注意

  • SaveDataLoadData、および ClearData 間で共有される名前はキーであり、ファイル名ではありません。 名前は各アプリに一意であり、名前が競合する危険がないため、複雑なものである必要はありません。 名前にこれらの文字のいずれかを含めることはできません: *".?:\<>|/
  • SaveData は、Teams や Web ブラウザ上で動作する Power Apps では、1MB のデータに制限されます。 モバイル プレーヤーで実行されている Power Apps の固定制限はありませんが、以下で説明するような実用制限があります。

これらの関数を使用して、アプリ起動時のパフォーマンスを向上させます。

  • 最初の実行時の App.OnStart 式のキャッシング データ。
  • 次の実行時にローカル キャッシュを再読み込みします。

これらの関数を使用して、簡単な Offline 機能 をあなたのアプリに追加することもできます。

次の場合、ブラウザー内でこれらの関数を使用することはできません。

  • Power Apps Studio でアプリを作成する。

アプリをテストするには、iPhone または Android デバイス上の Power Apps Mobile で実行します。

これらの関数は、メモリ内コレクションで動作するため、アプリの利用可能なメモリ容量によって制限されます。 利用可能なメモリは、次のような要因に基づいて異なります。

  • デバイスおよびオペレーティング システム。
  • Power Apps プレーヤーが使用するメモリ。
  • アプリの複雑性および画面とコントロール。

アプリが大量のデータを格納するときに実行することが予想される種類のデバイスを使用し、予想されるシナリオでアプリをテストします。 一般的に、30 MB から 70 MB の利用可能なメモリが必要です。

これらの関数は、Collect または ClearCollect で暗黙的に定義されているコレクションに依存します。 データを定義のコレクションに読み込むのに、Collect または ClearCollect を呼び出す必要はありません。 前の SaveData の後に LoadData を使用する場合の、一般的なケースです。 数式内にこれらの関数が存在し、コレクションの構造が明示的に定義されていれば十分です。 詳細については、変数の作成および削除 を参照してください。

読み込まれたデータはコレクションに追加されます。 空のコレクションから始めたい場合は、LoadData を呼び出す前に Clear 関数を使用します。

デバイス組み込みのアプリ サンドボックス機能を使用して、保存されたデータをその他のアプリから分離します。

デバイスはデータを暗号化することもできます。また、Microsoft Intune のようなモバイル デバイス管理ツールを使用することもできます。 Web ブラウザでアプリを再生する際に保存されるデータは暗号化されません。

構文

SaveData( Collection, Name )
LoadData( Collection, Name [, IgnoreNonexistentFile ])

  • Collection - 必須。 格納または読み込みの対象となるコレクション。
  • Name - 必須。 ストレージの名前。 同じデータ セットを保存し、読み込むには、名前が同じである必要があります。 名前空間は、その他のアプリまたはユーザーとは共有されません。 名前にこれらの文字のいずれかを含めることはできません: *".?:\<>|/
  • IgnoreNonexistentFile - オプション。 ファイルがまだ存在していない場合の処理を示すブール値。 false (既定) を使用するとエラーを返し、true の場合、エラーは非表示になります。

ClearData( [名前] )

  • 名前 - 任意です。 以前に SaveData で保存されたストレージの名前です。 名前 が提供されていない場合、アプリに関連付けられているすべてのストレージがクリアされます。

内容 結果
SaveData( LocalCache, "MyCache" ) 後で LoadData が取得できるように、「MyCache」の名前の下のユーザー デバイスに LocalCache コレクションを保存します。 データは「MyCache」という名前でアプリホストに保存されます。
LoadData( LocalCache, "MyCache" ) 「MyCache」という名前の下のユーザー デバイスから、以前に SaveData の呼び出しによって保存された LocalCache コレクションを読み込みます。 データは「MyCache」という名前でアプリ ホストから読み込まれます。
ClearData( "MyCache" ) 「MyCache」という名前のストレージをクリアします。 この名前で保存されたデータは、LoadData からは利用できなくなります。 データは「MyCache」という名前でアプリ ホストから削除されます。
ClearData() このアプリに関連付けられているすべてのストレージをクリアします。 他のアプリによって格納されたデータは影響を受けません。 すべてのデータがアプリ ホストから削除されます。

簡単なオフラインの例

次の簡単な例では、オフライン時の日常アイテムの名前と画像を取得し、格納します。 後で使用するために、デバイスのローカル ストレージに情報を格納します。 これにより、データを失うことなくアプリを閉じたり、デバイスを再起動したりできます。

注意

この例では、カメラ コントロールを使って画像を撮影しています。 SaveData は、Teams や Web ブラウザで実行する場合、データは 1MB に制限されているため、この例では数枚以上の画像をあつかうことはできません。 また、カメラによっては、1 枚の画像でも動作しない場合があります。 デバイスを使用してこの完全な例を実行するか、カメラ制御と画像の部分を削除して Teams または Web ブラウザで実行します。

  1. タブレットのレイアウトで空白のキャンバス アプリを作成します。 詳細については、テンプレートからアプリを作成する を読み、空のアプリ の下の タブレット レイアウト を選択してください。

  2. Text Input コントロールおよび Camera コントロールを追加し、表示されているように大まかに配置します。

    空白の画面に追加された Text Input コントロールと Camera コントロール

  3. Button コントロールを追加します。

  4. Button コントロールをダブル クリックして、このボタンのテキストを Add Item に変更 (または Text プロパティを変更) します。

  5. Button コントロールの OnSelect プロパティを次の式に設定し、コレクションにアイテムを追加します。

    Collect( MyItems, { Item: TextInput1.Text, Picture: Camera1.Photo } )
    

    「Add Item」というテキストと OnSelect プロパティ セットが追加された Button コントロール

  6. 別の Button コントロールを追加します。

  7. Button コントロールをダブル クリックして、このボタンのテキストを Save Data に変更 (または Text プロパティを変更) します。

  8. Button コントロールの OnSelect プロパティを次の式に設定し、コレクションをローカル デバイスに保存します。

    SaveData( MyItems, "LocalSavedItems" )
    

    「Save Data」というテキストと OnSelect プロパティ セットが追加されたボタン コントロール

    影響がないため、ボタンをテストしたくなることがあります。 ただし、Web ブラウザーで作成しているときはエラーが表示されるだけです。 次の手順に従ってこの式をテストする前に、最初にアプリを保存し、デバイスで開きます。

  9. 3 番目の Button コントロールを追加します。

  10. Button コントロールをダブル クリックして、このボタンのテキストを Load Data に変更 (または Text プロパティを変更) します。

  11. Button コントロールの OnSelect プロパティを次の式に設定し、コレクションをローカル デバイスから読み込みます。

    LoadData( MyItems, "LocalSavedItems" )
    

    「Load Data」というテキストと OnSelect プロパティ セットが追加された Button コントロール

  12. Gallery コントロールを画像とテキスト エリアを含む縦方向のレイアウトで追加します。

    ギャラリーのさまざまな選択、画像とテキスト エリアが選択された「縦方向」

  13. 確認を要求されたら、このギャラリーのデータ ソースとして MyItems コレクションを選択します。 これにより、Gallery コントロールの Items プロパティを設定します。

    データ ソースのギャラリー セレクション ギャラリー テンプレートの画像コントロールは、Image プロパティを ThisItem.Picture デフォルト設定にして、ラベルコントロールはどちらも Text プロパティを ThisItem.Item にデフォルト設定します。 次の手順でアイテムを追加した後、ギャラリーに何も表示されない場合は、これらの式を確認してください。

  14. コントロールをその他のコントロールの右側に配置します。

    画面の右側に再配置されたギャラリー

  15. アプリを保存します。 保存するのが初めての場合、公開する必要はありません。 初めてでない場合は、保存した後にアプリを公開します。

  16. スマートフォンやタブレットなどのデバイスでアプリを開きます。 SaveData および LoadData は、Studio または Web ブラウザーでは使用できません。 アプリがすぐに表示されない場合は、アプリ リストを更新してください。アプリがデバイスに表示されるまで数秒かかる場合があります。 サインアウトしてアカウントに再度サインインすることも役立ちます。

    アイテムが追加されていない状態で実行されているアプリ アプリをダウンロードしたら、ネットワークを切断してアプリをオフラインで実行できます。

  17. 名前を入力して、アイテムの画像を撮影します。

  18. Add Item ボタンを選択します。 アイテムの追加を何回か繰り返し、コレクションを読み込みます。

    3 つのアイテムを追加して実行しているアプリ

  19. Save Data ボタンを選択します。 これにより、コレクション内のデータがローカル デバイスに保存されます。

  20. アプリを閉じます。 すべてのアイテム名と画像を含め、メモリ内のコレクションは失われますが、デバイスのストレージからは削除されません。

  21. アプリを再度起動します。 メモリ内のコレクションは、ギャラリーで再び空として表示されます。

    アイテムの追加なしで再び実行しているアプリ

  22. Load Data ボタンを選択します。 コレクションは、デバイスに保存されているデータから再作成され、アイテムはギャラリーに戻ります。 このボタンが LoadData 関数を呼び出す前、コレクションは空でしたが、ストレージからデータを読み込む前に Collect または ClearCollect を呼び出す必要はありません。

    LoadData 関数を呼び出した後に復元された 3 つのアイテムで実行中のアプリ

  23. Load Data ボタンをもう一度選択します。 格納されたデータはコレクションの最後に追加され、ギャラリーにスクロール バーが表示されます。 追加ではなく置換したい場合、LoadData 関数を呼び出す前、最初に Clear 関数を呼び出してコレクションをクリアします。

    LoadData 関数を 2 回呼び出した後に復元された 6 つのアイテムで実行中のアプリ

より高度なオフラインの例

詳細な例については、簡単なオフライン機能 の記事を参照してください。