タイムアウト機能によるレコードのアンロック
ロックされたレコードを識別して自動的にアンロックできるスクリプトを作成できます。タイムアウト スクリプトは、次のタスクを実行します。
- スキーマによって定義される一連のレコード タイプを収集します。
- 各レコード タイプについて、ロックされたすべてのレコードを識別するデータ構造をビルドします。この構造には、ロックを保持するユーザー、ロックされているバージョン、ロックが監視された時間などの情報が含まれます。この構造は、最初は空です。
- レコード ID、locked_by 列、lock_version 列を選択して、現在ロックされているレコードを検出するクエリーをビルドします。
- 現在ロックされている一連のレコードと、すでに認識されていてデータ構造内に記録されているレコードを比較します。この検査では、ロックしているユーザーと、ロックされたレコードのバージョンの両方が一致する必要があります。同じユーザーがレコードの新しいバージョンを使用した場合のロックと、異なるユーザーによるロックを区別するためです。
- 選択した間隔より長く保持されたロックは、エンティティをロードし、Unlock API メソッドを呼び出すことで、削除します。
- データ構造を更新して、新しくロックされることがわかったレコードへの参照を追加し、ロックされなくなったレコードへの参照を削除します。
スクリプトでは、アクティビティの記録や、保持していたロックが削除されたときのユーザーへの通知も行います。
スクリプトは、定期的に実行するように設定してください。スクリプトがスキャンを実行するタイムアウト間隔と頻度の選択によって、ロックがタイムアウトになる予想最大時間と予想最小時間が決まります。これらの値は次のことに影響を与えるため、ユーザーに知らせてください。
- ロックを失う前に、ユーザーがレコードの編集作業に使用できる時間。
- 中止されたロックが自動的に解放されるまで、ユーザーが待機する必要のある時間。