2016-03-20 9 views
0

エンティティを編集するためのasp.netページがあります。他のユーザーがすでにそのエンティティの編集ページに入っているときに、通知を保存しないようにするための最良のデザインパターンは何ですか?私は、ユーザーがページを離れるときにロックが切れることを望むでしょう。私はまた、ページがロックされているユーザー名を表示したいと思います。他のユーザーが編集している場合にページ/エンティティを編集します

セッション状態は、inprocまたはstate serverのいずれかになります。

ユーザーが保存しようとする前に、これを行うにはさまざまな方法があります

答えて

3

(例えば編集ページ上の他のすべてのユーザーのために保存ボタンを無効にする)を知っている必要がありますが、一般的にはかなり複雑です。注意すべき1つの課題は、ユーザーがページを残したときにそのことを知らせる手段がないため、ページを離れるときを知らないということです。私は数回使用さ見てきました

一つのアプローチは、次の操作を実行することです:

  • (例えば、あなたのテーブルにLocked_User_IDなどを追加)追加したレコードがロックした人を識別するために列を追加します。レコードがロックされた日時を示す列。 (例:Locked_Timestamp
  • ロックが有効である期間を指定するグローバル定数(設定など)を定義します。
  • ページ/コントローラの読み込みでは、問題のレコードがロックされているかどうかを確認し、そうであれば、グローバルな定数に基づいて十分にロックされていて、他のユーザーが引き続き作業していると考えます。その場合、編集中のユーザーと最後のアクティビティを編集して表示することはできません(Locked_Timestamp & Locked_User_IDに基づく)。
  • 最近ロックされていないか、ロックされていないか、ロックされている場合は、Locked_User_IDを現在のユーザーに、Locked_Timestampを現在の日付に更新してください。
  • ユーザーが戻る/キャンセル、保存などをクリックすると、レコードのロックを解除します。 (そうすることで、グローバル定数に基づいてタイムアウトを待つ必要はありませんが、ブラウザを閉じるだけでは、タイムアウトはフェイルセーフになります)。

これを実装した「チェックアウト」または「編集」ボタン/機能がわずかに異なります。ユーザーは自動的にロックを取得せずに情報を表示でき、 「チェックアウト」または「編集」はロックをチェックして取得します。

希望すると便利です。

よろしく、

ロス

関連する問題