排他制御を意識しよう!
排他処理とエラーログの重要性のおさらいになりますが、バージョン7以降では他のネットワークユーザ以外に自分自身の排他制御に気を使わなくてはいけなくなりました。
バージョン7以降は、フィールドにカーソルを入れただけでは排他されなくなりましたが、1度でも編集した直後から掛かるように変更されています。
サンプルでは入金日に対応する金額を足し算しているのですが、User_Aは2006/7/3のレコードを、User_Bは2006/7/8のレコードを編集を終えようとしている最中です。そしてあなた(ウインドウ名:You)が一括で入金処理をしようとするのですが、排他制御を考慮していない場合はどんなふうになるのでしょうか?
サンプルファイルの赤いボタン2つは考慮していない作りです。
※各ボタンを押し終わったら、デモ準備 スクリプトで値をリセットしてください。
実際に動かしてみると、一般的な作りをしている左上のボタンだと、何事もなかったように処理が終わってしまいます。大変恐ろしい事です。
一方排他制御を考慮した構造だと、どの時点でエラーが発生したか的確にエラー用のテーブルにログを残し、処理後正常に終了出来たか
確認することが可能になります。
下図がそのスクリプトです。最終エラー301が排他時のエラーになります。
バージョン8からは変数を使うことが出来るので、余計なリレーションやフィールドを使わずより手軽にログを残す事が出来るようになりました。
人それぞれに作り方はあるかと思いますが、ポイントとしては排他がかかったレコードIDを取得しログに入れるという点です。
でかいシステムや長いバッチ処理、そこそこの人数で利用しているシステムなんかではかならず排他制御を意識した作りを
心がけましょう。