PowerApps のデータの保存先として、SharePoint のリストや Excel を使用するというようなケースが紹介されていることが多いのではないでしょうか。
ブラウザ版の PowerApps では利用することはできないのですが、アプリケーション版 (Microsoft Store / Google Play / App Store) では、ローカルストレージ (ローカルキャッシュ) を使用して、データをローカルに保存しておくことが可能となっています。
詳細については Implementing Offline Capability In Your App で解説されていますが、簡単に動作を見てみましょう。
ローカルストレージに保存したデータについては、PowerApps のアプリケーションのキャッシュを削除することで消えてしまいますが、キャッシュの削除を明示的にしなければ基本残っているかと。
ローカルストレージへのデータの保存ですが、SaveData / LoadData という関数を使用して実行することができます。
この関数を使用することで、コレクションのデータを端末のローカルストレージに保存することができます。
利用の例ですが、
- ネットワークにつながらない場合は、一時的に情報をローカルに保存し、ネットワークがつながった後に外部データソースと連携する
- アプリケーションの設定のようなものは、ローカルストレージに保存しておき、不要なネットワーク通信を削減する
というようなものが考えられるのではないでしょうか。
次のような UI で試してみます。
オプションのオン / オフを行うものが 3 つありますが、この設定を永続化したい場合、外部データソースでなく、ローカルストレージで管理をした方がよいケースがあるのではないでしょうか。
保存ボタンのアクションとしては、次のような設定を記載しておきます。
ClearCollect(MySettings,{Option1:Toggle1.Value, Option2:Toggle2.Value, Option3:Toggle2.Value}); SaveData(MySettings,"Setting")
新しく、MySettings というコレクションを作成し、そのレコードにオプションの真偽値を格納しています。
そのあとに SaveData 関数を使用して、「Setting」という名称でローカルストレージのデータを保存しています。
ここで作成したコレクションをオプションの初期値として使用したいですので各オプションのトグルコントロールの Default に次の設定を行います。
Toggle1 | First(MySettings).Option1 |
Toggle2 | First(MySettings).Option2 |
Toggle3 | First(MySettings).Option3 |
これで、トグルコントロールの初期設定は、MySettings コレクションの値となります。
最後に、ローカルストレージからデータを呼び出す操作を追加しておきます。
今回は、スクリーンの「OnStart」に次の内容を記載しておき、アプリケーションの開始時に自動的に設定をロードします。
LoadData(MySettings,"Setting",true)
データがローカルストレージに保存されるまでは、設定が記録されていない状態となりますので、その際にはエラーとしないように (エラーを無視する) 、3 番目の引数は「true」としています。
これでローカルストレージを使用するための基本的な設定は完了です。
ブラウザの PowerApps ではローカルストレージは使用できませんので、何らかのアプリから、PowerApps を実行します。
アプリケーション版であれば、「保存」を追加したときに、この設定が保存されるようになります。
保存された設定はアプリケーションを起動したタイミングで、読み込むように式を設定しますので、次回起動時も次の画像のように保存時の状態が復元されます。
読み込みまで多少のタイムラグがありますので、ロード中の画像の Visible の制御や、スプラッシュ画面を作成して、読み込みを伝えてもよいかもしれないですね。
画像の Visible の制御であれば、次のような複数操作で制御できますので。
Set(bolLoading,true); LoadData(MySettings,"Setting",true); Set(bolLoading,false)
PowerApps では、ネットワークの接続状況は「Connection.Connected」から取得することができ、ForAll を使用することで、各レコードに対して処理を実施することもできます。
ローカルストレージを利用することで次のような処理も実行できるのではないでしょうか。
- ネットワークに接続されていない状態では、ローカルストレージにデータを保存する
- ネットワークに接続された状態の場合で、ローカルストレージに保存されているデータがある場合、ForAll を使用して各レコードに対してオンラインが必要な処理を実行する。