SET UPDATE TASK LOCAL and commit session issue

227 阅读1分钟

Created by Jerry Wang, last modified on Jun 11, 2014

下列代码会成功将Product ABCJERR5插入到comm_product中,

DATA: ls_new TYPE comm_product.
START-OF-SELECTION.
  SELECT SINGLE * INTO ls_new FROM comm_product.
  ls_new-product_id = 'ABCJERRY5'.
  CALL FUNCTION 'GUID_CREATE'
    IMPORTING
      ev_guid_16 = ls_new-product_guid.
  INSERT comm_product FROM ls_new.
  WRITE: / sy-subrc.
  CALL FUNCTION 'ZSQFB' IN UPDATE TASK.
  COMMIT WORK AND WAIT.

但是update function module ZSQFB会执行失败( assert 1 = 0 )

FUNCTION zsqfb.
*"----------------------------------------------------------------------
*"*"Update Function Module:
*"
*"*"Local Interface:
*"----------------------------------------------------------------------
  DATA: ls_data TYPE zcrmd_soc_post.
  CALL FUNCTION 'GUID_CREATE'
    IMPORTING
      ev_guid_16 = ls_data-uuid.
  ls_data-internal_id = '2'.
  ASSERT 1 = 0.
  INSERT zcrmd_soc_post FROM ls_data.
ENDFUNCTION.

会收到一条update 失败的notification:
clipboard1

SM13里存在失败的entry:

clipboard2
clipboard3

如果在update function module call之前加上SET UPDATE TASK LOCAL:
clipboard4

通过测试发现,尽管update function module现在在和test report是在同一个work process里执行,但是update function module的出错并不会影响COMM_PRODUCT table的更新: 执行结果和不加SET UPDATE TASK LOCAL一致。