加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ABAP 调用BDC 过程详解

(2014-09-22 11:08:18)
标签:

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 WITH HEADER LINE. "执行的参数传递表.
DATA:MESSTAB 
LIKE  BDCMSGCOLL OCCURS 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. 源程序调用.

先看录屏生产的记录表及生产程序.

http://s5/mw690/003gxipHzy6MeHL1bFi34&690调用BDC 过程详解" TITLE="ABAP 调用BDC 过程详解" />

http://s4/mw690/003gxipHzy6MeHPMiSn43&690调用BDC 过程详解" TITLE="ABAP 调用BDC 过程详解" />



 

复制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.

则把字段改为导入内表的字段名,这样就可以表中读入.

这样就可以了.

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有