PowerAppsのアプリでSharePointリストアイテムの重複処理エラーを回避する方法

Power Appsのキャンバスアプリでは、SharePointリストのアイテムを操作する場面がよくありますが、アイテムを選択してから操作するまでの間に他のユーザーが同じアイテムを更新すると、「Patch関数の使用中にネットワークエラーが発生しました: サーバー上の変更内容に競合があります。再度読み込んでください。」というエラーが発生してしまいます。

本記事では、アイテム重複操作のエラーを回避する方法をご紹介します。

前提

今回は、下記の通りのSharePointリストとキャンバスアプリを用意します。

  • SharePointリスト
  • Power Apps

参考:「データの更新」ボタンのOnSelectの設定値

SubmitForm(Form1);
Refresh(SampleList);
Reset(Gallery1);

設定内容

キャンバスアプリのボタンに下記のロジックを設定します。

「データの更新」ボタンをクリックした際に、【アイテムを選択した時刻】と【操作対象アイテムの最終更新時刻】を比較し、【アイテムを選択した時刻】より【操作対象アイテムの最終更新時刻】の方が遅かった場合、再選択を促すメッセージを表示してアイテムの更新は行わない。

設定手順

1.「Gallary1」のOnSelectに下記のコードを入力します。

UpdateContext({選択時刻:Now()})

2.「データの更新」ボタンのOnSelectに下記のコードを入力します。

※LookUp関数でアイテムの最終更新時刻を取得する際は重複しない値(アイテムのIDなど)を使用してください。

UpdateContext({最終更新時刻:LookUp(SampleList,タイトル=DataCardValue5.Text).更新日時});
If(
    // 選択時刻より最終更新時刻の方が遅いかどうか(=最終更新時刻の方が進んでいるかどうか)
    選択時刻<最終更新時刻,
    
 // 選択時刻より最終更新時刻の方が遅い場合はデータを更新せず、再選択を促すメッセージを表示+リストの内容を更新する
    Notify("あなたが更新する前に他のユーザーがデータを更新しました。再度アイテムを選択してから操作してください。",NotificationType.Error);
    Refresh(SampleList);
    Reset(Gallery1),
   
  // 選択時刻より最終更新時刻の方が遅くない場合は、データを更新する
    SubmitForm(Form1);
    Refresh(SampleList);
    Reset(Gallery1)
);

結果

重複処理が実施されると、「あなたが更新する前に他のユーザーがデータを更新しました。再度アイテムを選択してから操作してください。」というメッセージが表示されます。

注意点

最終更新時刻を取得する際、Gallery1.Selected.更新日時というように【ギャラリーで選択したアイテムの最終更新日時を取得する】という設定をすると、【ギャラリーで選択した時点の最終更新日時】となり、【ボタンを押した時点の最終更新日時】ではなくなります。

LookUp関数を使用すると【ボタンを押した時点の最終更新日時】を取得できるため、最終更新日時の取得方法にはご注意ください。

まとめ

今回は、Power AppsのキャンバスアプリでSharePointリストアイテムの重複処理エラーを回避する方法についてご紹介しました。

アプリの利用者が多いほど重複処理エラーは発生しやすくなりますので、ぜひ本記事のエラー回避方法を設定してみてください。

執筆担当者プロフィール
菅原 菜月

菅原 菜月(日本ビジネスシステムズ株式会社)

プロフェッショナルサービス本部に所属。主にPower Platformの開発業務を担当しております。

担当記事一覧