web-dev-qa-db-ja.com

同時編集が発生した後、ユーザーに更新を丁寧に依頼するにはどうすればよいですか?

この状況は理想的ではありませんが、回避することはできません。

ユーザーがリストから選択して情報を表示し、編集して保存できるWebサイトデータベースシステムがあります。レコードが表示および保存されている間、情報が更新され、エラーメッセージがユーザーに表示される可能性があります。

ページを更新すると、データの選択に使用されるフィルターが削除されるため、より不便になる可能性があります。代わりに、リストから同じ項目を選択して、データを現在のバージョンに更新するようにします。

エラーメッセージの明確な説明を探しています。これまでのところ私はこれを持っています、部分的にはリフレッシュがユーザーが理解する一般的なタスクだと思うので、簡潔ではないと感じて誰でもそれを改善できますが、すでに選択したアイテムを再選択することは彼らがよく知っている頻繁な練習ではないでしょうと。

「この選択の情報は、開いた後に変更されています。最新の変更を表示するには、アイテムをもう一度選択してください。」

2
user8082

あなたが取り組んでいる状況は、マルチユーザートランザクションシステムでの競合管理のより一般的な問題に関連しています。

最善かつ最も丁寧なメッセージを作成する前に、コンテキスト内で理にかなった明確な競合解決ポリシーを選択し、あなたとユーザーが快適であることを確認する必要があります。

注1:あなたの説明から、あなたのウェブサイトでリアルタイムに情報を更新することは選択肢ではないのではないかと思います。もしそうなら、興味深いワークフローオプションがあり、たとえば、ユーザーYの画面に「ユーザーXは現在これを編集しています」などの項目を表示できます(一部のWebチャットサービスの「Xが入力中...」など)。

注2:わかりやすくするために、トランザクションロックシステムを実装していることも疑っています(最初の編集者がアイテムをロックし、データを編集しようとしている次の人に、リソースまで続行できないことが通知されますロック解除済み)はどちらのオプションでもありません。

ユーザーに表示されるのは、現在のページが読み込まれたときのデータであり、ロック機能がないと仮定します。 (悪い)驚きは、ユーザーが編集アクションを送信した直後に発生します。 「最後の編集者が勝つ」というポリシーを選択しても問題ありません。たとえば、次のように実装できます。

  • ユーザーが最初にクリックしてデータを編集すると、データの現在の状態への参照がフォームに保存されます(例:IDとバージョン番号またはタイムスタンプ)
  • ユーザーは編集の準備と入力に時間をかけます
  • 彼らが提出する(変更の要求であるアクション)
  • データの以前の状態への参照がサーバーに存在するバージョンと一致している場合、編集は単純に成功します
  • そうでない場合、これはその間にデータが(通常は別のユーザーによって)編集されていることを意味します。

次に達成したいことは次のとおりです。

  1. ユーザーに知らせる
  2. 情報に基づいた選択ができるようにする
  3. 彼らがしたことを失うことから彼らを守ってください(したがって、あなたが彼らの時間と努力を評価することを証明します)

上記を実現する方法は、同じビューで同時に次のことです。

  • その間にデータが編集されたことを通知します
  • 編集したデータを表示します
  • まだ編集可能な方法で(たとえば、テキスト領域など)自分の編集(フォームを介してサーバーに送信された)を表示する
  • 2つのアクションボタンを提供します:「キャンセル」(つまり、他のユーザーの編集を保持)または「自分の編集で上書き」
2
Pierre