Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Added |../../index.htm#lansa/lock_object.htm]
現在地:

Anchor
_Ref433874221
_Ref433874221
Anchor
_Toc130907349
_Toc130907349
9.130 LOCK_OBJECT

注意: 9.1 組み込み関数の規則      &<a href="bifcat4_09.htm"&>利用オプション&</a&>利用オプション
指定されたユーザー・オブジェクトにロックを試みて、失敗した場合はエラーを戻します。
 
引数

...


4つのユーザー・オブジェクト識別子を使用して、ユーザー・オブジェクトのロックを構築します。このロックは総称キーを使って解除できます。
DEFINE     FIELD(#RETURN)  TYPE(*CHAR) LENGTH(2) DEFINE     FIELD(#STATE)   TYPE(*CHAR) LENGTH(3) DEFINE     FIELD(#CUSTNO)  TYPE(*CHAR) LENGTH(6) ********** Lock Customers to be Updated USE        BUILTIN(LOCK_OBJECT)             WITH_ARGS('CUSTOMER' #STATE #CUSTNO '' '' 'FUNC') TO_GET(#RETURN) ********** Unlock ALL Customers for the STATE USE        BUILTIN(UNLOCK_OBJECT) WITH_ARGS('CUSTOMER' #STATE 'ALL' '' '' 'FUNC')             TO_GET(#RETURN)  
この例では、顧客に関する、多くのユーザー・オブジェクトがロックされます。ロックされた「顧客」のすべては、同じ「状態」に属します。更新処理が完了したときに、このロックを解除することができます。各顧客に対してロックを個別に解除するのではなく、2番目のオブジェクト識別子に'ALL'を指定することで、状態に対してすべてのロックを総称的に解除することができます。
また、ユーザー・オブジェクトのロックを使用して、ファンクションが持つことのできる同時ユーザー数を制限することもできます。例えば、ユーザーのオーダー入力ファンクションを3人のユーザーに制限する場合、ユーザーに関連する3つのユーザー・オブジェクトを作成します。次に、オーダー入力ファンクションの先頭で、このユーザー・オブジェクトの1つに対してロックを取得します。使用できるものがなくなると、以下のようなメッセージを表示してファンクションを終了することができます。ロックが許可された場合、ファンクションの使用を許可します。ファンクションを終了するときにユーザー・オブジェクトのロック解除を忘れないようにしてください。または、ロック・レベルに'FUNC'を指定して、ファンクションが終了したときにロックが自動で解除されるようにしてください。一つのガイドとして以下の例を使用してください。
DEFINE     FIELD(#RETURN)  TYPE(*CHAR) LENGTH(2) ********** Attempt lock on 1st instance USE        BUILTIN(LOCK_OBJECT)             WITH_ARGS('ORDER_ENTRY' 'ORDER#1' '' '' '' 'FUNC') TO_GET(#RETURN) IF         COND('#RETURN *EQ ER') ********** Attempt lock on 2nd instance USE        BUILTIN(LOCK_OBJECT)             WITH_ARGS('ORDER_ENTRY' 'ORDER#2' '' '' '' 'FUNC') TO_GET(#RETURN) IF         COND('#RETURN *EQ ER') ********** Attempt lock on 3rd instance USE        BUILTIN(LOCK_OBJECT)             WITH_ARGS('ORDER_ENTRY' 'ORDER#3' '' '' '' 'FUNC') TO_GET(#RETURN) IF         COND('#RETURN *EQ ER') ********** Cannot obtain any locks MESSAGE    MSGTXT('No Order Entry sessions are Available') RETURN ENDIF ENDIF ENDIF ********** Protected processing ********** Unlock ALL Order Entry locks for this Function USE        BUILTIN(UNLOCK_OBJECT) WITH_ARGS('ORDER_ENTRY' 'ALL' '' '' '' 'FUNC') TO_GET(#RETURN)  
[ Image Added |../../index.htm#lansa/lock_object.htm]