ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19.8
entity.lock( )
|
entity.lock ( {mode} ) -> 戻り値 | ||||||||
引数 | 型 | 説明 | ||||||
mode | 倍長整数 |
![]() |
dk reload if stamp changed: スタンプが変更されていた場合にはロックする前にリロード | |||||
戻り値 | オブジェクト |
![]() |
ロックオペレーションの結果 | |||||
entity.lock( ) メソッドはデータクラスにリレートされたデータストアとテーブル内のエンティティに合致するレコードにペシミスティック・ロック(*)をかけます。ロックはレコードと、カレントプロセス内でのエンティティの全ての参照に対してかけられます。
(*)詳細な情報については、エンティティロッキング のページを参照してください。
他のプロセスからはこのレコードはロックされて見えます(このメソッドを使って同じエンティティをロックしようとした場合、result.success プロパティにはfalseが返されます)。"locking"セッション内で実行されたメソッドのみがこのエンティティの属性を編集・保存できます。エンティティは他のセッションによって読み込みのみでロードすることもできますが、値の入力・保存はできません。
ロックされたレコードは、以下の場合にロックが解除されます:
mode 引数が省略された場合、デフォルトで、同じエンティティが他のプロセスあるいはユーザーから同時に変更された(例: スタンプが変更された)場合、メソッドはエラーを返します(以下参照)。
あるいは、mode 引数にはdk reload if stamp changed オプションを渡すことができます。この場合、スタンプが変更された場合でもエラーは返されず、エンティティは再読み込みされます(エンティティが引き続き存在し、プライマリーキーが引き続き同じであった場合)。
結果オブジェクト
entity.lock( ) によって返されたオブジェクトには、以下のプロパティが含まれます:
プロパティ | 型 | 詳細 | |
success | ブール | ロックアクションが成功した場合(あるいはエンティティがすでにカレントプロセスでロックされていた場合)にはtrue、それ以外の場合にはfalse | |
dk reload if stamp changed オプションが使用されていた場合にのみ利用可能: | |||
wasReloaded | ブール | エンティティのリロードが成功した場合にはtrue、それ以外の場合にはfalse | |
エラーの場合にのみ利用可能: | |||
status(*) | 数値 | エラーコード、以下参照 | |
statusText(*) | テキスト | エラーの詳細、以下参照 | |
ペシミスティック・ロックエラーの場合にのみ利用可能: | |||
lockKindText | テキスト | "Locked by record" | |
lockInfo | object | ロックの元についての情報 | |
task_id | 数値 | プロセスID | |
user_name | テキスト | マシン上でのセッションユーザー名 | |
user4d_alias | テキスト | 4D ユーザーの名前またはエイリアス | |
user4d_id | 数値 | 4DデータベースディレクトリでのユーザーID | |
host_name | テキスト | マシン名 | |
task_name | テキスト | プロセス名 | |
client_version | テキスト | ||
深刻なエラーの場合にのみ利用可能(深刻なエラーとは、プライマリーキーを重複させようとした、ディスクがいっぱいであった、などです): | |||
errors | オブジェクトのコレクション | ||
message | テキスト | エラーメッセージ | |
component signature | テキスト | 内部コンポーネント署名(例 "dmbg" はデータベースコンポーネントを表します) | |
errCode | 数値 | エラーコード |
(*) エラー時にはResult オブジェクトのstatus あるいは statusText プロパティに以下のいずれかの値が返されます:
定数 | 値 | コメント |
dk status entity does not exist anymore | 5 | エンティティはもうデータ内に存在していません。このエラーは以下のような場合に起き得ます:
割り当てられたstatusText: "エンティティはもう存在しません" |
dk status locked | 3 | エンティティはペシミスティック・ロックでロックされています。 割り当てられたstatusText: "既にロックされています" |
dk status serious error | 4 | 深刻なエラーとは低レベルのデータベースエラー(例:重複キーなど)、ハードウェアエラーなどです。 割り当てられたstatusText: "その他のエラー" |
dk status stamp has changed | 2 | エンティティの内部的なスタンプ値がデータ内に保存されているエンティティのものと合致しません(オプティミスティック・ロック)。
|
エラーのある例題:
C_OBJECT($employee;$status)
$employee:=ds.Employee.get(716)
$status:=$employee.lock()
Case of
:($status.success)
ALERT("You have locked "+$employee.firstName+" "+$employee.lastName)
:($status.status=dk status stamp has changed)
ALERT($status.statusText)
End case
dk reload if stamp changed オプションを使用した場合を考えます:
C_OBJECT($employee;$status)
$employee:=ds.Employee.get(717)
$status:=$employee.lock(dk reload if stamp changed)
Case of
:($status.success)
ALERT("You have locked "+$employee.firstName+" "+$employee.lastName)
:($status.status=dk status entity does not exist anymore)
ALERT($status.statusText)
End case
プロダクト: 4D
テーマ: ORDA - エンティティ
初出: 4D v17
ランゲージリファレンス ( 4D v19)
ランゲージリファレンス ( 4D v19.1)
ランゲージリファレンス ( 4D v19.4)
ランゲージリファレンス ( 4D v19.5)
ランゲージリファレンス ( 4D v19.6)
ランゲージリファレンス ( 4D v19.7)
ランゲージリファレンス ( 4D v19.8)