资源描述
ABAP 调用BDC 过程详解
调用BDC导入数据到系统,可以有大致三种方法:
第一: 导出源程序,通过,通过word自带导入工具把导入表中数据导入源程序.特点:
优缺点: 适应于数据量较少, 缺点操作复杂,不适合与基层人员和无基础人员.
第二: 生产源程序,选择通过模版导入,下载系统模板填充后上传,再导入数据.
优缺点: 使用与数据量较少情况,操作也不简单,但是不需要编程基础.
第三: abap 编程实现.
优缺点: 当然需要较强的abap编程知识,编写完成,即可实现傻瓜式导入,复用性强,操作简单.
本文就详细介绍abap调用BDC导入数据的过程.abap实现BDC导入的本质是通过abap程序调用BDC的一些内置方法, 通过循环内表,abap 把数据和操作写入BDCDATA表,然后执行这张表.
1. 调用 F4_FILENAME 之类方法打开文件选择框(略).
2. 调用 TEXT_CONVERT_XLS_TO_SAP之类方法导入数据到内表,保证内表.(略)
3. 调用BDC导入数据.
3.1. 数据声明:
DATA:BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE. "执行的参数传递表.
DATA:MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE."返回执行结果.
3.2. 常用方法.
*form: bdc_dynapro 分配屏幕参数子程序.
*form: bdc_field. 分配字段参数子程序.
*form: bdc_transaction 调用食物代码并传递指定的参数.
当然这些方法在生产程序时都包含在include bdcrecx1文件中. 当然生成的文件可能不能满足你的需要可以自己编辑include文件,然后包含自己的文件.
3.2.1 form bdc_transaction源码
*-------------------------------------------------------------------
FORM BDC_TRANSACTION USING TCODE CTUMODE.
DATA: L_MSTRING(480).
DATA: L_SUBRC LIKE SY-SUBRC.
REFRESH MESSTAB.
CALL TRANSACTION TCODE USING BDCDATA
MODE CTUMODE
UPDATE 'A'
MESSAGES INTO MESSTAB.
L_SUBRC = SY-SUBRC.
write: / 'CALL TRANSACTION',TCODE,
'returncode:',L_SUBRC,
'RECODE:', sy-index.
LOOP AT MESSTAB.
SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
AND ARBGB = MESSTAB-MSGID
AND MSGNR = MESSTAB-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
write: / MESSTAB-MSGTYP,L_MSTRING(250).
ELSE.
WRITE: / MESSTAB.
ENDIF.
ENDLOOP.
REFRESH BDCDATA.
ENDFORM.
3.2.2. bdc_dynpro通用源码
*作用: 指定bdc_dynpro的实参,告知系统dialog程序名称:SAPLMGMM,及screen number:0060 perform bdc_dynpro using 'SAPLMGMM' '0060'.
*-------------------------------------------------------
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
3.2.3. bdc_field 通用源码.
*作用指定bdc_field的实参,告知系统把光标放在哪个字段,这里是“RMMG1-MATNR,物料” perform bdc_field using 'BDC_CURSOR'
*--------------------------------------------------------
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM.
3.2.4. 源程序调用.
先看录屏生产的记录表及生产程序.
复制do……….. enddo之间数据,数据为一个完整写入数据过程.
调用 loop at itab(存放导入数据表)
修改其中一些字段,当然要了解字段含义比如: perform bdc_field using 'DATABROWSE-TABLENAME'
'zymq004'.
此BDC要修改一个表一些字段,而生成程序表名为 recode-tablename_001.显然表名确定,所以只需修改为表名,而非变量即可.一些字段,如 perform bdc_field using 'ZYMQ004-YJBMBM'
gt_data-yjbmbm.
则把字段改为导入内表的字段名,这样就可以表中读入.
这样就可以了.
展开阅读全文