タスクまたはプログラムが呼び出されると、現在のレコードの処理が一時中断され、その後、そのタスクまたはプログラムが完了すると処理が再開されます。その間、呼び出されたタスクまたはプログラムからは、現在のレコードの項目全てに対してアクセスが可能になります。[コールプログラム]の場合、項目へのアクセスはパラメータを介して行われます。一方、[コールタスク]の場合、直接アクセスされます。現在のレコードの項目に対しては、どちらの場合も更新を行うことができます。
その場合、更新時のロックの状態が問題になります。エンドユーザによるレコードの変更では、ロック方式として「入力時」が設定されている時には(ロック方式は、[タスク特性]ダイアログで設定できます)、レコードの変更が始まると同時にロックがかけられるか、または項目の変更が完了した時にロックが設定されます。
同様に、タスクやプログラムを使用して現在のレコードを変更する場合も、現在のレコードをロックしておく事が重要です。これは、子タスクやプログラムの処理が完了するまでに時間がかかる場合があるからです。このため、タスクやプログラムの実行中は、エンドユーザに対して現在のレコードへのアクセスや変更ができないようにしておくことが必要になります。アクセスが可能な場合、エンドユーザによってレコードが操作されているため、タスクやプログラムの終了時に変更をディスクへ書き込めないということも起こります。
以上の事情から、呼び出したタスクやプログラムで現在のレコードを変更する時には、あらかじめレコードにロックを設定しておきます。ただし、タスクやプログラムでレコードの更新を行わない時には、ロックは必要ありません。これで、エンドユーザによるレコードの変更が可能になります。
タスクやプログラムでレコードの更新を行う時には、このパラメータを使用してレコードにロックをかけるかどうかを指定できます。指定できる値は、以下の通りです。
No …… この値を指定しておくと、タスクやプログラムの実行時、現在のレコードにはロックはかかりません。この場合、タスクやプログラムでは、呼び出し側のタスクのレコードの更新は行わないようにします。ロックが設定されていない状態でレコードの更新を行うと、タスクやプログラムの終了時にエンドユーザがレコードを変更していた場合、更新したレコードをディスクに書き込むことができず、そのため、更新した結果が失われることがあります。
Yes …… この値にしておくと、呼び出されたタスクやプログラムが実行されると同時に、現在のレコードにロックがかけられます。したがって、呼び出されたタスクやプログラムでカレントのレコードを更新する時には、「Yes」を指定します。また、タスクやプログラムの処理で間接的に現在のレコードが更新される時も、「Yes」にしておきます。
式番号 …… [ロック]特性に式を指定することもできます。ズームすると[式]エディタが表示されますので、ここで式を定義します。
この特性は、メインプログラムでは無効です。
なお、[ロック]特性を「Yes」にしていても、次の場合には現在のデータビューのレコードにロックはかかりません。
[タスク特性]の[ロック方式]が、「B=更新時」または「N=なし」の時。この場合、この設定が[ロック]特性の設定より優先されます。
呼び出されたプログラムにパラメータが渡されない時。または、パラメータが全て、式で渡される(値渡し)場合。