1、ABAP 调用BDC 过程详解 调用BDC导入数据到系统,可以有大致三种方法: 第一: 导出源程序,通过,通过word自带导入工具把导入表中数据导入源程序.特点: 优缺点: 适应于数据量较少, 缺点操作复杂,不适合与基层人员和无基础人员. 第二: 生产源程序,选择通过模版导入,下载系统模板填充后上传,再导入数据. 优缺点: 使用与数据量较少情况,操作也不简单,但是不需要编程基础. 第三: abap 编程实现. 优缺点: 当然需要较强的abap编程知识,编写完成,即可实现傻瓜式导入,复用性强,操作简单. 本文就详细介绍abap调用BDC导入数据的过程.abap实现BDC导
2、入的本质是通过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 LI
3、NE."返回执行结果. 3.2. 常用方法. *form: bdc_dynapro 分配屏幕参数子程序. *form: bdc_field. 分配字段参数子程序. *form: bdc_transaction 调用食物代码并传递指定的参数. 当然这些方法在生产程序时都包含在include bdcrecx1文件中. 当然生成的文件可能不能满足你的需要可以自己编辑include文件,然后包含自己的文件. 3.2.1 form bdc_transaction源码 *---------------------------------------------------------
4、 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
5、 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
6、 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.
7、 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-MSG
8、V4 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 perfo
9、rm 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 通
10、用源码. *作用指定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. 源程序
11、调用. 先看录屏生产的记录表及生产程序. 复制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. 则把字段改为导入内表的字段名,这样就可以表中读入. 这样就可以了.






