はじめに
Power Appsでは、OneDrive/SharePoint Onlineに配置したExcelファイル、SharePoint Listでデータを管理することが多いと思います。
データをしっかりと管理し、後続の業務でも活用する場合にはこの方法で良いかと思いますが、ちょっとしたアプリの利便性向上のためにわざわざデータを格納する場所を用意するのは面倒ですよね。。
ということで、Power AppsのSaveData、LoadData関数を使って、ローカルに情報を保存する方法を試してみたいと思います。
SaveData、LoadData関数とは?
SaveData関数:名前を付けてコレクションを格納する
LoadData関数:名前を指定してコレクションを呼び出す
ClearData関数:名前を指定してストレージをクリア、もしくは、アプリに紐づく全てのストレージをクリアする
注意事項
- ブラウザで動作させている場合には、最大サイズは1MB。モバイルデバイスのアプリの場合には最大サイズの制約はないが、アプリの利用可能メモリサイズに依存する。
- プレーンテキストとしてデータが保存されるため、機密情報を取り扱うのは推奨しない。特に、複数ユーザーが同一端末を使いまわしている場合に注意が必要。
早速やってみる
テンプレで作成できるPower Appsの画面に、検索条件を保存するボタンを追加しました。
保存ボタンの処理は以下の通り。
SaveData(
ClearCollect(
検索キーワード,
{ SearchWord: SearchInput1.Text }
),
"検索キーワード"
);
次にLoadData関数を使います。
今度は、アプリケーション読み込みのタイミング(OnStart)に処理を実装します。
LoadData(検索キーワード, "検索キーワード");
最後に、TextBoxのデフォルト値を設定します。
First(検索キーワード).SearchWord
たったこれだけで、Power Appsでローカルに情報保存、保存した情報を呼び出す処理の実装は完了です!
実際にアプリを開き直してみると、以下のように保存した検索ワードが自動設定されていることが分かります。
実際データはどこに保存されるのか?
①ブラウザを利用している場合
ブラウザのディベロッパーツールを使用することで、実際に保存されている値を確認することができます。
(1) ディベロッパーツールを開く
(2) アプリケーションタブを開く
(3) ストレージの「IndexedDB」というエリアを見ると、Power AppsのアプリケーションIDの下に、keyvaluepairsというデータが存在します。中身を見てみると、SearchWordとして「テスト」という文字列が保存されていることが分かります。
そもそもIndexedDBとは何なのか?
IndexedDB は、ユーザーのブラウザー内にデータを永続的に保存する手段です。ネットワークの状態にかかわらず高度な問い合わせ機能を持つウェブアプリケーションを作成できますので、アプリケーションがオンラインとオフラインの両方で動作するようになります。
(引用元:https://developer.mozilla.org/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB)
ブラウザが管理するデータベースなので、ブラウザのバージョンアップ時や、ユーザーがブラウザで保存情報の削除を行う等した場合には、データ自体が無くなる可能性があるということですね。なので、消えてしまってもアプリの動作や業務に支障が無い情報だけを管理すべき、ということになります。
②モバイルアプリを利用している場合
スマホ単体での確認は難しい気がします。
まだ確認手順を確立できていないので、また後日実施して情報更新します。
今後やりたいこと
注意事項にも記載した通り、機密情報を取り扱うのは推奨されていません。
一方で、機密情報をExcelやSharePoint Listで管理するのはもっと現実的ではないと思っていまして、Power Apps/Power Automateで何らかデータを暗号化して管理する方法を検討してみたいと思います!