10/4

排他制御について悩んでいます。

OnDestoryで編集中フラグを折る想定でいましたが、
F5による再描画やRedirectToURLではOnDestroyが使用できないことがわかりました。

OnDestoryに限らず排他制御のベストプラクティスがあれば教えていただいてもよろしいでしょうか

実現したいことは、「編集画面を開いたときに排他制御をかけ、画面を抜けるときに外す」という画面単位の排他制御でしょうか? OutSystemsでの一般論でいうと、画面単位での排他制御を行うことはそんなに頻繁ではないと思います。 悲観制御を行うこともありますが、どちらかというと楽観制御をよく見る気がします。 ①Entityになんらかのバージョンを特定する属性を持つ(Autonumberのバージョン番号属性、DateTime型の最終更新日時属性など) ②編集画面では、他の属性と同時にバージョンを特定する属性も返す(が、画面からその属性は編集させない) ③更新リクエストにはEntityのRecordを渡すので、ユーザーが編集した属性と一緒にバージョン管理列もわたってくる。そこで、更新処理の先頭でRecordを再取得し、画面から戻ってきたバージョン(画面表示時のバージョン)と取得したRecord内のバージョン(DB内の最新バージョン)を比較する。値が一致すれば、その間変更が行われていないので処理を進める(一致しなければ排他制御エラーとする)。 もし画面単位の排他制御をしようと思うと、おっしゃる通りOnDestroyではできず、他に適切なイベントもないと思います。 ぱっと思いつくのは、画面表示中は定期的にJavaScriptなどで編集であることを示す情報をEntityに書き込んでおく。画面更新時にはその値をチェックし、一定期間内(例えば1分以内)であればロック中であるとみなす、とか?

スポンサーリンク

Junji Watanabeさんになんでも質問しよう!

質問

スタンプ

利用できるスタンプはありません。

スポンサーリンク

質問する

過去に答えた質問

スポンサーリンク