- ベストアンサー
排他制御。
現在ASPで作成しているプロジェクトでは ページが三つあります。 1ページ目でデータを選択し、排他をかける。 2ページ目でデータを更新して、 3ページ目で排他を解除しています。 この際2ページ目でページを閉じられた場合、 排他を解除しなくてはならないのですが なにかいい方法はありませんか? また、ブラウザの戻るボタンを押されたときにも 排他を制御しなくてはなりません。 なにか判断する方法はないでしょうか?
- みんなの回答 (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 でのタイムアウト時間が、不定期に 長くなる可能性があるのであれば、 画面上に明示的にタイムアウトを延長するボタンを 配置するか、ブラウザスクリプトで、タイムアウト しそうになったら、特定のページを自動的に 呼び出して、タイムアウトを更新する処理も 考えられます。 なお、ユーザーによっては、画面を開いたまま、 会議にはいったり、出張に出てしまうといった ことも、考えられなくはないので、注意が必要です。 スケーラビリティから考えると、排他制御は できるだけしないほうがいいと思いますが、 参考まで。
お礼
(D)HTMLでダイアログが出せるとは知りませんでした。 なかなかこれまでの業務をイントラに置き換えていくのは 難しいみたいですね。 お答えいただいた内容をふまえながら なにかしら仕組みを考えていきたいと思います。