PowerApps 技術

PowerAppsで競合エラーが頻繁に発生する場合の対処法

PowerAppsでとある問題にぶつかりました。その内容と解決策を共有します。

O365サービスのPowerApps + SharePoint を利用して、アプリを作成したが、利用中に競合エラーが頻繁に発生する人に向けた記事です。

エラー内容

PowerAppsの操作中(SharePointのリストを更新する操作中)に以下のエラーが発生。

 

ETAG mismatch.Conflicts exist with changes on the server, please reload.
Server Response: ETAG mismatch. clientRequestId: xxxxx-xxxxx-xxxxx serviceRequestId: xxxxx-xxxxx-xxxxx」

 

環境と概要

PowerAppsで開発したアプリをリリースしたところ、「サーバ上の変更内容に競合があります。」というエラーが頻繁に発生するようになりました。

構成(ご参考までに)

画面:PowerApps

データ格納先:SharePoint

データ更新・通知:MS Flow / PowerApps

 

開発段階、デモンストレーション(4人で実施)では競合エラーは発生しませんでした。

 

原因

 

原因はSharePointのリストを更新するときにETAGが最新でないため、エラーとなっていました。

この問題はMicrosoft のPowerAppsコミュニティでも議論されていました。

日本語の解説サイトがなかったので、かみ砕いた内容を紹介します。
原文:
https://powerusers.microsoft.com/t5/General-Discussion/Server-Response-ETAG-mismatch-clientRequestId-serviceRequestId/m-p/144891/highlight/true#M49710

 

対策

画面の遷移や更新を行うときは最新のSharePointのETAGを取得する必要があります。

基本的に画面の遷移を行うときや、更新処理などのボタンを操作する時は、
SharePointのリストの情報を更新するようにしましょう。

Refresh(SharePointのリスト名);

Navigate(遷移したい画面,ScreenTransition.Cover)

Refreshの具体的な利用方法についてはMSのdocsに詳しく記載されております。
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-refresh

気を付けないといけないのは 読み込み 更新 どちらでも「Refresh」する処理を入れる必要があります。

PowerAppsは日々加速しているため、とあるアップデートで改善する場合があるかもしれません。

 

付録:もっと詳しく解説

ETAGって何?

ETAGはHTTPのヘッダに含む情報で、"ある時点のリソースの状態を識別"するための情報です。

ETAGはSharePointにアイテムに更新が行われるたびにアイテムのETAGが書き換わります。

 

ETAGの考え方

AさんとBさんの二人がPowerAppsの画面にアクセスするとETAGは以下のようになります。

Aさん画面(ETAG=0001)SharePoint(ETAG=0001)
Bさん画面(ETAG=0001)

この状態からAさんがSharePointに更新を行うと以下のようになります。

Aさん画面(ETAG=000X)SharePoint(ETAG=000X)
Bさん画面(ETAG=0001)

Bさんが最新のSharePointの情報を取得せずに、リクエストを投げると競合エラーが発生します。

 

最後に

PowerAppsの知名度はそこまで高くはありません。しかし、社内のちょっとした改善をしたい時にかなり有効なツールです。

Microsoft PowerAppsについては公式サイトもチェックしてみてください!

https://powerapps.microsoft.com/ja-jp/

 

-PowerApps, 技術
-