| Session | Call Transaction |
Process mode | 需要手动在sm35中处理对应的session,或者通过RSBDCSUB来处理 | 直接处理 |
DB update mode | Synchronous | Sync/Async |
error log | SM35中有对应的错误日志,方便错误分析 | 没有错误日志,可以创建自定义表来存储错误日志 |
Speed | 比较慢 | 更快 |
Single/Muti Trans | In sm35, we can handle more than one transaction | only one transaction |
Sy-subrc | Sy-subrc 不能表示更新的成功与否 |
|
Session 和 transaction方式: 都要注意在录屏的时候一定要勾选"def size"。比如va22默认在满5行item的时候要换屏。
换屏后,第5行会在第二屏中的第一行, 也就是我们要填充的行号又要重新变为2。
Call transaction方式的时候,最好要用到OPTION, 将其中参数defsize 设为'X'.这样能避免出现换屏的问题。 本人曾经没这个的时候出现过如下状况:
(1) 代码中没有换屏, call transaction没有设置defsize.
跑前台是没有问题的,跑job的时候会出现某些字段不存在
(2) 代码中换屏了, call transaction没有设置defsize
跑后台是没有问题的, 跑前台的时候会出现某些字段不存在。
data: lwa_opt type ctu_params.
lwa_opt-dismode = 'N'.
lwa_opt-updmode = 'L'.
lwa_opt-defsize = 'X'.
CALL TRANSACTION TCODE USING BDCDATA
OPTIONS FROM lwa_opt
MESSAGES INTO MESSTAB.
Session 方式要用到functions:
BDC_OPEN_GROUP
BDC_INSERT
BDC_CLOSE_GROUP
最终的处理可以手动在sm35中处理对应的session,
如果不想手动处理,我们可以用程序RSBDCSUB来处理,如下图示:
SUBMIT RSBDCSUB WITH MAPPE = 'ROBBINTEST'
WITH VON = sy-datum
WITH BIS = sy-datum
EXPORTING LIST TO MEMORY AND RETURN.
DATA list_tab TYPE TABLE OF abaplist.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = list_tab
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
CALL FUNCTION 'WRITE_LIST'
TABLES
listobject = list_tab.
ENDIF.