• ベストアンサー

排他制御。

現在ASPで作成しているプロジェクトでは ページが三つあります。 1ページ目でデータを選択し、排他をかける。 2ページ目でデータを更新して、 3ページ目で排他を解除しています。 この際2ページ目でページを閉じられた場合、 排他を解除しなくてはならないのですが なにかいい方法はありませんか? また、ブラウザの戻るボタンを押されたときにも 排他を制御しなくてはなりません。 なにか判断する方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kawabata
  • ベストアンサー率67% (21/31)
回答No.1

具体的では、ありませんが、次のような方法が 考えられます。 1.モーダルダイアログを利用する  ブラウザ側でスクリプトを記述することになります。  1ページ目をモーダルダイアログの中に  開きます。  開くときに、ロックを設定します。  あとは、データを更新して、ダイアログを閉じる  時点で、ロックを解除します。  ウィンドウを新規に開くことにより、戻るボタンや  リロードによるトラブルを防げるかと思います。  モーダルダイアログについては、  http://www.microsoft.com/japan/developer/workshop/author/dhtml/dude/dude09252000.asp 2. ロック解除は、一定時間後に行う。  2ページ目が開いて、一定時間後に  自動的にロック解除するようにします。  もし、3ページ目に、正しく移動できれば、  3ページ目でロック解除します。  戻るボタン、リロード対策については、  page1.asp?s=100 page2.asp?s=101 page3.asp?s=102 のように現在のユーザーがどのシーケンス番号に  あるかを管理し、シーケンス番号が戻ると  エラーを出す方法があります。  page2 でのタイムアウト時間が、不定期に  長くなる可能性があるのであれば、  画面上に明示的にタイムアウトを延長するボタンを  配置するか、ブラウザスクリプトで、タイムアウト  しそうになったら、特定のページを自動的に  呼び出して、タイムアウトを更新する処理も  考えられます。  なお、ユーザーによっては、画面を開いたまま、  会議にはいったり、出張に出てしまうといった  ことも、考えられなくはないので、注意が必要です。 スケーラビリティから考えると、排他制御は できるだけしないほうがいいと思いますが、 参考まで。

yoshioz
質問者

お礼

(D)HTMLでダイアログが出せるとは知りませんでした。 なかなかこれまでの業務をイントラに置き換えていくのは 難しいみたいですね。 お答えいただいた内容をふまえながら なにかしら仕組みを考えていきたいと思います。

関連するQ&A