ABAP总结之二,BDC完整版(转)
BDC(batch data communication)是SAP常用的一种数据传输方法。用于一些数据量大,但是对速度又要求不高的数据传输。
    在实施中,很多开发顾问都忽略了BDC的日志和出错管理。这给用户在使用中带来了很大的不便。比如:哪些数据是成功生成的,哪些是失败的?那些失败的,原因的是什么?程序问题还是数据问题?
    我觉得,既然是要做一套程序,那就应该尽可能地为客户考虑,减少日后的维护量。对于BDC程序来讲,日志和出错管理应该是必备的。
    下面讲一下,BDC的两种通用写法。
1.    Call Transaction: 顾名思义,就是直接调用BDC进行数据批量导入。优点:方便快捷,程序处理方便。缺点:日志管理能力差,需自己建透明表来维护数据。我只是把它用作测试用途,不做正式使用。
2.    BDC Insert:这是一种不直接运行,而是将BDC程序生成session,间接运行的一种方法。优点:通过T-code SM35可以进行运行管理及日志管理,方便查错。缺点:相对方法1来说实现起来比较繁琐。我主要是用这种方法来实现BDC功能。
下面主要来谈一下BDC Insert这种方法。
1.   需要在程序中调用 function 'BDC_INSERT'来把BDCDATA生成SESSION.
2.   程序RSBDCSUB是执行SESSION的专用程序,要建立相应的VARIANT,后续建立JOB中使用
3.   建立BATCH JOB来定期执行RSBDCSUB,从而实现,SESSION自动执行的目的
4.   当然,不使用程序RSBDCSUB和JOB,每次手工在SM35中执行SESSION也是可以的
 
下面是我写的一个实例:
*----------------------------------------------------------------------*
* Program Name: Z_KEVIN_ADV_BDC
* Project     : N/A
* Author      : Kevin.Zhang
* Date        : 2007.1.1
* Module      : N/A
* Description : Advanced BDC
*
*
*
* Special features: N/A
*
*
*----------------------------------------------------------------------*
* Modifications:
* Author      Date     Commented as  Description
*-----------  --------  -----------  ----------------------------------*
*
*----------------------------------------------------------------------*
REPORT  Z_KEVIN_ADV_BDC.
*$*$----------------------------------------------------------------$*$*
*$*$       Global Types, Data Statements, Ranges, Constants         $*$*
*$*$----------------------------------------------------------------$*$*
*-----------------------------------------------------------------------
*                   Tables
*-----------------------------------------------------------------------
TABLES: COAS, CEPC.
*-----------------------------------------------------------------------
*                    Internal Tables and Work Areas
*-----------------------------------------------------------------------
DATA: BEGIN OF GT_TABLE OCCURS 0,    "internal order table
        AUART LIKE AUFK-AUART,       "order type
        AUFNR LIKE AUFK-AUFNR,       "order number
        KTEXT LIKE AUFK-KTEXT,       "description
        BUKRS LIKE AUFK-BUKRS,       "company code
        GSBER LIKE AUFK-GSBER,       "business area
        PRCTR LIKE AUFK-PRCTR,       "profit center
        FUNCA LIKE AUFK-FUNC_AREA,   "function area
 END OF GT_TABLE.
DATA: BEGIN OF GT_EXISTS OCCURS 0.   "existed IO
        INCLUDE STRUCTURE GT_TABLE.
DATA: END OF GT_EXISTS.
DATA: BEGIN OF GT_PRFT_CNTR OCCURS 0."the profit center not existing IO
        INCLUDE STRUCTURE GT_TABLE.
DATA: END OF GT_PRFT_CNTR.
DATA: BEGIN OF GT_SUBMIT OCCURS 0.   "the submitted IO
        INCLUDE STRUCTURE GT_TABLE.
DATA: END OF GT_SUBMIT.
DATA: BEGIN OF GT_BDCDATA OCCURS 0.  "BDC DATA
        INCLUDE STRUCTURE BDCDATA.
DATA: END OF GT_BDCDATA.
DATA: BEGIN OF GT_MESSTAB OCCURS 10. "message table
        INCLUDE STRUCTURE BDCMSGCOLL.
DATA: END OF GT_MESSTAB.
DATA: GT_IMESG LIKE MESG OCCURS 0 WITH HEADER LINE.
*-----------------------------------------------------------------------
*