タイムアウト機能によるレコードのアンロック
ロックされたレコードを識別して自動的にアンロックするためのスクリプトを作成することができます。タイムアウト スクリプトでは、以下のタスクを実行する必要があります。
- スキーマで定義されたレコード タイプのセットを収集します。
- それぞれのレコード タイプごとに、ロックされたすべてのレコードを識別するデータ構造を構築します。この構造には、該当のロックを保持しているユーザー、ロックされているバージョン、およびそのロックが検索された時刻などの情報を含める必要があります。この構造は、最初は空になっています。
- 現在ロックされているレコードを検索し、レコード ID 列、locked_by 列、lock_version 列を選択する、クエリーを作成します。
- ロックされているレコードの現行セットを、既に検知されてデータ構造に記録されているロック済みレコードのセットと比較します。この検査では、ロックしているユーザーとロックされていたレコードのバージョンの両方とも突き合わせて比較する必要があります。同じユーザーが新しいバージョンのレコードをロックしたのか、別のユーザーがロックしたのかを区別するためです。
- エンティティをロードし、API アンロック メソッドを呼び出すことにより、選択された間隔よりも長い間保持されていたロックを解除します。
- データ構造を更新して、新しくロックされたことが判明したレコードへの参照を追加し、もうロックされていないレコードへの参照を除去します。
このスクリプトはそのアクティビティを記録し、ユーザーが保持していたロックが除去されたことを該当ユーザーに通知する必要があります。
このスクリプトは、一定間隔で実行されるように設定する必要があります。選択したタイムアウト間隔およびスクリプトがスキャンを実行する頻度により、ロックがタイムアウトになることが予想される最短時間と最長時間が決まります。以下の値はユーザーに影響を与えるため、ユーザーに知らせる必要があります。
- ユーザーがロック状態を維持したままレコードの編集を行える時間の長さ。
- 放棄されたロックが自動的に解除されるまでユーザーが待つ必要のある時間の長さ。