PowerApps案件 オフライン環境下の処理

microsoft365

困りごと

PowerAppsとSharePointの連動において、WiFi環境が無い場所で入力ができない。

設計

  • オンライン環境下でもオフラインでも同じ画面
  • オンライン時は入力後そのままSharePointへ、オフライン時はキャッシュに残す
  • オンライン環境下で同期を掛けて、キャッシュのデータを流し込む

実装

左図のような1画面で実装。

「登録」の際に、ネットワーク環境により以下のように処理

If(Connection.Connected, ←ネットワーク環境チェック
SubmitForm(「フォーム名」), ←オンラインならSharePoint
Collect(「コレクション名」 , ←オフラインなら入力内容を
{title: DataCardValue1.Text, ←コレクションにする
memo: DataCardValue2.Text,
date: DataCardValue3});
SaveData(「コレクション名」, “呼び出し名”); ←キャッシュへ
ResetForm(「フォーム名」)
)

キャッシュに保存したコレクションはギャラリーに紐付け画面表示

起動時のみ、残っているキャッシュを表示するために

LoadData(「コレクション名」,”呼び出し名”,true); を実行

「反映」は以下のように処理

If(Connection.Connected, ←ネットワーク環境チェック
ForAll(「コレクション名」, ←オンラインならキャッシュ上のコレクションを処理
Patch(「SharePointリスト」, ←SharePointにキャッシュ内容を保存
Defaults(「SharePointリスト」),
{Title: ThisRecord.title,
Memo: ThisRecord.memo,
Date: ThisRecord.date.SelectedDate}));
Clear(「コレクション名」); ←コレクションをクリア
SaveData(「コレクション名」,”呼び出し名”), ←空状態を保存(つまりキャッシュクリア)
Set(popup, true) ←オフラインならポップアップを表示し入力させない
)

実行テスト

オンライン時挙動。そのままSharePointへ行く。

オフライン時挙動。ローカルキャッシュへ追加される。

キャッシュは複数件入れられる。(最大数はデバイススペックにより異なる)

オフライン時に反映しようとしてもポップアップが立ち上がり反映不可とする。

オンライン時に反映可。全件反映されているのを確認。

ポイント

  • オンライン、オフラインの判別は、Connection.Connected を用いる。
  • キャッシュのやり取りは、SaveData & LoadData を用いる。
  • これが使えるのはあくまでアプリ化したもので、Webブラウザでは使用不可。
  • アプリでもオフラインだと表示されない可能性があるので、ショートカット推奨。

コメント