ABAPのロックスコープの違い早見表
公式ヘルプ「_SCOPE パラメータ」を少し詳しく調べました。いつも忘れるので・・・
リンク先の↓の絵についてもう少し詳しくしています。
スコープによる違い
全部、「Dialog」と書いていますが、バックグラウンドでも当然同じですね。
COMMIT時
同期/非同期更新による違いはなし
local updateのパターンは未検証だが、おそらくUPDATE TASKなしと同じ。
UPDATE TASKあり
UPDATE TASKなし
UPDATE TASKがない場合はスコープ2でロックの委譲が起こらないのでダイアログワークプロセスでロックが解除されないのですね。
ROLLBACK時
UPDATE TASKがあった場合となかった場合の差異はなかったです。
スコープ2はロールバック時にロック解除されるのが特徴的です。
実施プログラム
ゴミのような汚いコードですが、参考まで。
↓のプログラムをコメントはずしたりしながら確かめました。更新汎用モジュールは何でもいいです。
REPORT y348221_test03_lockscope.
PARAMETERS:
p_bp TYPE bu_partner DEFAULT 'F0001',
p_scope TYPE ddenqscope DEFAULT '2',
p_wait AS CHECKBOX.
START-OF-SELECTION.
DELETE FROM y348221_test00.
COMMIT WORK AND WAIT.
PERFORM lock.
PERFORM call_bapi.
PERFORM update.
FORM lock.
CALL FUNCTION 'ENQUEUE_E_BP000'
EXPORTING
partnr = p_bp
* X_PARTNR = ' '
_scope = p_scope
* _WAIT = ' '
* _COLLECT = ' '
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CALL_BAPI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM call_bapi .
DATA:
ls_central TYPE bapibus1006_central,
ls_central_x TYPE bapibus1006_central_x,
lt_return TYPE TABLE OF bapiret2.
ls_central-searchterm1 = sy-uzeit.
ls_central_x-searchterm1 = 'X'.
* CALL FUNCTION 'BAPI_BUPA_CENTRAL_CHANGE'
* EXPORTING
* businesspartner = p_bp
* centraldata = ls_central
* centraldata_x = ls_central_x
* TABLES
* return = lt_return.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form update
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM update .
DATA:
ls_insert TYPE y348221_test00,
ls_return TYPE bapiret2.
ls_insert-datum = sy-datum.
ls_insert-uzeit = sy-uzeit.
INSERT y348221_test00 FROM ls_insert.
* CALL FUNCTION 'Y_348221_TEST00_00' IN UPDATE TASK.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = p_wait
* IMPORTING
* return = ls_return.
*
* CHECK Ls_RETURN IS NOT INITIAL.
* CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
IF p_wait = abap_true.
COMMIT WORK AND WAIT.
ELSE.
COMMIT WORK.
ENDIF.
* ROLLBACK WORK.
ENDFORM.
Author And Source
この問題について(ABAPのロックスコープの違い早見表), 我々は、より多くの情報をここで見つけました https://qiita.com/FukuharaYohei/items/ad03df75e802afe27eca著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .