メインコンテンツまでスキップ
バージョン: 20 R5 BETA

$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" オブジェクトには、以下のプロパティが格納されています:

プロパティタイプ説明
成功の場合にのみ利用可能:
successbooleanロックに成功した場合 (あるいはエンティティがすでにカレントセッションでロックされていた場合) には true、それ以外は false (この場合は返されません)。
エラーの場合にのみ利用可能:
statusnumberエラーコード、以下参照
statusTexttextエラーの詳細、以下参照
lockKindnumberロックコード
lockKindTexttext"Locked by session" RESTセッションによるロック、"Locked by record" 4Dプロセスによるロック
lockInfoobjectロック元についての情報。 返されるプロパティはロック元 (4Dプロセスまたは RESTセッション) によって異なります。
4Dプロセスによるロックの場合:
task_idnumber```

プロセスID

|              | user_name      | text    | マシン上でのセッションユーザー名                                                                                                                                                                                                                                                                                                                                                   |
| | user4d_alias | text | 4D ユーザーの名前またはエイリアス |
| | user4d_id | number | 4DデータベースディレクトリでのユーザーID |
| | host_name | text | マシン名 |
| | task_name | text | プロセス名 |
| | client_version | text | クライアントのバージョン |
| | | | _**RESTセッションによるロックの場合:**_ |
| | host | text | エンティティをロックした URL (例: "127.0.0.1:8043") |
| | IPAddr | text | ロック元の IPアドレス (例: "127.0.0.1") |
| | recordNumber | number | ロックされたレコードのレコード番号 |
| | userAgent | text | ロック元の userAgent (例: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36") |

エラー時には ___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", "lockInfo":{ "host":"127.0.0.1:8043", "IPAddr":"127.0.0.1", "recordNumber": 7, "userAgent": ""Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36..." } } }