BDC录屏
创建程序
输入程序名称,点击创建按钮:
输入程序的标题,选择类型为”可执行程序“,点击”保存“:
选择包名,点击保存:
选择请求号,点击“确定”:
程序履历
*&---------------------------------------------------------------------*
*& Report Z_TEST_BDC_LHY
*&---------------------------------------------------------------------*
*& TYPE:Report
*& Description:BDC录屏测试
*& Creator:Hongyu.Liu
*& Created On:2024年2月20日
*&---------------------------------------------------------------------*
* Change History
* ---------- ------------- ------------- -------------
* Version Date Change By Description
* ---------- ------------- ------------- -------------
* N 2024.2.20 Hongyu.Liu 创建
*&---------------------------------------------------------------------*
REPORT Z_TEST_BDC_LHY.
SHDB录屏
1.输入TCode:SHDB进入BDC录制初始界面
2.单击工具栏 “新建”按钮创建一个新的BDC,系统将弹出Create Recording对话框,要求输入记录名称(此名称可以不用Y或Z开头来定义)和录制程序的事务码,本例以创建物料主数据MM01为例。
填写消息:
完成后点保存,界面自动跳转到如下图界面,红色圈住的地方就是我们在录屏的过程中填入的值,接下来在程序中需要动态的进行修改。
点保存后,点返回,如下图:
点击“返回”:
点击“程序”:
选中,点击程序:
输入程序的名称,点击“继续”:
输入标题,点击“源代码”:
选择包,点击保存:
选择请求号,点击“继续”按钮:
界面转到abap编辑界面
编辑代码
在第一阶段中生成的代码,在实际的应用中并不是所有都需要用到,下图中红色框圈出来的部分是我们需要用实际业务中的变量进行代替的。
步骤大概如下:
①从数据库或本地文件中获取到需要进行操作的数据
②Loop循环需要操作的数据,每一条需要进行操作的数据需要进行一次BDC(构建BDC 数据 + Call Transaction)
③在SHDB中生成的代码,我们只需要留下红色框中的代码(包括Form 中代码),并将原来录屏中输入的定值变更为loop内表中的值,整理后复制到自己需要用到BDC的程序中进行②操作即可。
如下图所示:
https://blog.youkuaiyun.com/ylxb166/article/details/117416437
完整程序
*&---------------------------------------------------------------------*
*& Report Z_TEST_BDC_LHY
*&---------------------------------------------------------------------*
*& TYPE:Report
*& Description:BDC录屏测试
*& Creator:Hongyu.Liu
*& Created On:2024年2月20日
*&---------------------------------------------------------------------*
* Change History
* ---------- ------------- ------------- -------------
* Version Date Change By Description
* ---------- ------------- ------------- -------------
* N 2024.2.20 Hongyu.Liu 创建
*&---------------------------------------------------------------------*
REPORT z_test_bdc_lhy.
"PARAMETERS: dataset(132) LOWER CASE.
"INCLUDE bdcrecx1.
"INCLUDE bdcrecx1_s.
START-OF-SELECTION.
TYPES:BEGIN OF wa,
mbrsh LIKE mara-mbrsh, "行业领域
mtart LIKE mara-mtart, "物料类型
maktx LIKE makt-maktx, "物料描述
meins LIKE mara-meins, "计量单位
matkl LIKE mara-matkl, "物料组
mtpos_mara LIKE mara-mtpos_mara, "普通项目类别组
END OF wa.
DATA itab TYPE TABLE OF wa WITH HEADER LINE.
DATA:bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE. "用来存储屏幕字段参数值,传递录屏参数
DATA:messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE. "记录执行BDC过程中产生的消息
DATA:p_mode TYPE c .
DO 10 TIMES.
itab-mbrsh = 'M'. "行业领域
itab-mtart = 'Z300'. "物料类型
itab-maktx = 'BDC测试物料lhy-' && sy-index && '-' && sy-datum && '-' && sy-uzeit. "物料描述
itab-meins = 'EA'. "单位
itab-matkl = '0107'. "物料组
itab-mtpos_mara = 'NORM'. "普通项目类别组
APPEND itab.
ENDDO.
START-OF-SELECTION.
"PERFORM open_group.
LOOP AT itab.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RMMG1-MTART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_field USING 'RMMG1-MBRSH'
itab-mbrsh.
PERFORM bdc_field USING 'RMMG1-MTART'
itab-mtart.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0070'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MSICHTAUSW-DYTXT(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(01)'
'X'.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BABA'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MAKT-MAKTX'.
PERFORM bdc_field USING 'MAKT-MAKTX'
itab-maktx.
PERFORM bdc_field USING 'BDC_CURSOR'
'MARA-MATKL'.
PERFORM bdc_field USING 'MARA-MEINS'
itab-meins.
PERFORM bdc_field USING 'MARA-MATKL'
itab-matkl.
PERFORM bdc_field USING 'MARA-MTPOS_MARA'
itab-mtpos_mara.
PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=CANC'.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MAKT-MAKTX'.
PERFORM bdc_field USING 'MAKT-MAKTX'
itab-maktx.
PERFORM bdc_field USING 'MARA-MEINS'
itab-meins.
PERFORM bdc_field USING 'MARA-MATKL'
itab-matkl.
PERFORM bdc_field USING 'MARA-MTPOS_MARA'
itab-mtpos_mara.
REFRESH: messtab[].
p_mode = 'N'.
"执行BDC,事务代码是MM01,p_mode模式是“不显示屏幕”,A代表“异步的”,messtab用于存放消息
CALL TRANSACTION 'MM01' USING bdcdata
MODE p_mode
UPDATE 'A'
MESSAGES INTO messtab.
ENDLOOP.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
* IF fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
* ENDIF.
ENDFORM.
执行程序
点击“执行”按钮,生成的物料如下: