$lock
ペシミスティック・ロック機構 を使ってエンティティをロック/アンロックします。
シンタックス
他のセッションや 4Dプロセスに対し、特定のエンティティをロックするには:
/?$lock=true
他のセッションや 4Dプロセスに対し、特定のエンティティをアンロックするには:
/?$lock=false
lockKindText プロパティ は "Locked by session" です。
説明
REST API によるロックは、セッション レベルで設定されます。
ロック されたエンティティは次のものから操作 (ロック / アンロック / 更新 / 削除) できません:
- 他の REST セッション
- RESTサーバー上で実行されている 4D プロセス (クライアント/サーバー, リモートデータストア, スタンドアロン)。
REST API によってロックされたエンティティは、次の場合にのみアンロックされます:
- ロック元の (
/?$lock=trueをおこなった) RESTセッションが/?$lock=falseをリクエストしたとき。 - ロック元セッションの 非アクティブタイムアウト に達したとき (セッションは閉じられます)。
レスポンス
?$lock リクエストでロック操作に成功した場合、"result"=true を格納した JSONオブジェクトが返されます (失敗した場合は "result"=false)。
戻り値の "__STATUS" オブジェクトには、以下のプロパティが格納されています:
| プロパティ | | 型 | 説明 | | ------------ | | ------- | ---------------------------------------------------------------------------------- | | | | | 成功の場合にのみ利用可能: | | success | | boolean | ロックに成功した場合 (あるいはエンティティがすでにカレントセッションでロックされていた場合) には true、それ以外は false (この場合は返されません)。 | | | | | エラーの場合にのみ利用可能: | | status | | number | エラーコード、以下参照 | | statusText | | text | エラーの詳細、以下参照 | | lockKind | | number | ロックコード | | lockKindText | | text | "Locked by session" RESTセッションによるロック、"Locked by record" 4Dプロセスによるロック |
エラー時には __STATUS オブジェクトの status および statusText プロパティに以下のいずれかの値が返されます:
| status | statusText | 説明 |
|---|---|---|
| 2 | "Stamp has changed" | エンティティの内部的なスタンプ値がデータ内に保存されているエンティティのものと合致しません (オプティミスティック・ロック)。 |
| 3 | "Already locked" | エンティティはペシミスティック・ロックでロックされています。 |
| 4 | "Other error" | 深刻なエラーとは、低レベルのデータベースエラー (例: 重複キー)、ハードウェアエラーなどです。 |
| 5 | "Entity does not exist anymore" | エンティティはもうデータ内に存在していません。 |
例題
一つ目のブラウザーからエンティティをロックします:
GET /rest/Customers(1)/?$lock=true
レスポンス:
{
"result": true,
"__STATUS": {
"success": true
}
}
二つ目のブラウザー (別のセッション) から、同じリクエストを送信します:
レスポンス:
{
"result":false,
"__STATUS":{
"status":3,
"statusText":"Already Locked",
"lockKind":7,
"lockKindText":"Locked By Session",
}
}