快速开发之BDC模板程序

BDC的调试和创建参考用到的TCODE为SHDB,SM35;

以下为网上收索的一个的BDC程序事例,


*&—————————————————————————————–*

*& 程序名   REPORT  ZWLP_BDC                                                          *
*&—————————————————————————————–*
*& Author              :  WINSON
*& Create Date         :  2012-12-29                                                    *
*& Program Type        :   Enhancement
*& Logical DB          : 「未使用」                                                        *
*& Text Elements                                                                           *
*&   (Titles&Headers)  : 「未使用」                                                        *
*&   (Selection Texts) : 「使用」                                                          *
*&   (Text symbols)    : 「使用」                                                          *
*& GUI Status          : 「标准」                                                          *
*& Variants            : 「未使用」                                                        *
*& Message Class       :                                                                   *
*& Description         : 物料主数据批导入                                                      *
*& Modifications       :                                                                   *
*&   Date        Programmer  Description                                                   *
*&—————————————————————————————–*

REPORT  ZWLP_BDC.
TABLES:MARA.
*&*************************类型定义**************************************************
TYPES: BEGIN OF LINE,
         MAKTX LIKE MAKT-MAKTX,”物料描述
         MEINS LIKE MARA-MEINS,”单位
         MATKL LIKE MARA-MATKL,”物料组
       END OF LINE.
*************************************************************************************
*&——————— 程序中使用的 内表和工作区定义———————————-*

DATA BEGIN OF IT_BDC OCCURS 0.”IT_BDC是定义了内表,该内表就是存放BDC的操作步骤
        INCLUDE STRUCTURE BDCDATA.
DATA END OF IT_BDC.
DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.”MESSTAB中保存的是执行完BDC系统的返回信息。
DATA:   WA_MESSTAB LIKE BDCMSGCOLL,
        LC_INFORECORD(10) TYPE C.
DATA:   LC_LINE TYPE I.
DATA: BEGIN OF WA_RE_VAL,
        ZZBID(18)   TYPE C,
        STATUS(10) TYPE C,
        TEXT(100)   TYPE C,
      END OF WA_RE_VAL.

 
DATA: WA_TAB TYPE LINE,
      IT_TAB TYPE TABLE OF LINE.”从外部EXCEL导入的数据存放的内表,内表字段数目要和EXCEL的列数目一样
**************************************************************************************

*———————-  全局变量     ————————————————*
**************************************************************************************

 

*&—————– ————————————————————————-*
*                             选择屏幕
*&——————————————————————————————*

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME OBLIGATORY.

SELECTION-SCREEN END OF BLOCK BLK1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  CALL FUNCTION ‘WS_FILENAME_GET’                           “#EC *
    EXPORTING
      DEF_PATH         = P_FILE
      MASK             = ‘,*.xls,*.XLS.’
      MODE             = ‘0′
      TITLE            = TEXT-H01
    IMPORTING
      FILENAME         = P_FILE
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.
  CHECK SY-SUBRC = 0 AND NOT P_FILE IS INITIAL.

*———————————————————————-*
*                  AT SELECTION-SCREEN
*———————————————————————-*
START-OF-SELECTION.
  PERFORM FRM_GETDAT_EXCEL .”把EXCEL里面的数据取出来放到内表IT_TAB里面
  PERFORM FRM_BDC_CALL.     “调用BDC子程序

END-OF-SELECTION.
*&———————————————————————*
*&      Form  FRM_BDC_CALL
*&———————————————————————*
*       循环的把EXCEL里面的数据放到系统里面
*———————————————————————-*
FORM FRM_BDC_CALL.

  LOOP AT IT_TAB INTO WA_TAB.

    PERFORM FRM_BDC_MM01.”MM01的具体BDC执行过程

  ENDLOOP.
ENDFORM.                    “FRM_BDC_CALL

*&———————————————————————*
*&      Form  FRM_GETDAT_EXCEL
*&———————————————————————*
*       把EXCEL里面的数据取出来放到内表IT_TAB里面
*———————————————————————-*
FORM FRM_GETDAT_EXCEL .
  FIELD-SYMBOLS: <F1>.
  DATA: L_I_XLSTMP TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
  DATA: L_COL TYPE I.
  CLEAR L_I_XLSTMP.
  REFRESH L_I_XLSTMP.
  CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
    EXPORTING
      FILENAME                = P_FILE
      I_BEGIN_COL             = 1     “从哪一列开始
      I_BEGIN_ROW             = 2     “从哪一行开始
      I_END_COL               = 4    “从哪一列结束
      I_END_ROW               = 1000  “从哪一行结束
    TABLES
      INTERN                  = L_I_XLSTMP
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.
  IF SY-SUBRC <> 0 .
    MESSAGE ‘导入文件失败。’  TYPE ‘E’.
  ENDIF.
*-转换内表
  REFRESH: IT_TAB.
  CLEAR: IT_TAB.
  SORT L_I_XLSTMP BY ROW COL.
  LOOP AT L_I_XLSTMP.
    L_COL = L_I_XLSTMP-COL.
    ASSIGN COMPONENT L_COL OF STRUCTURE WA_TAB TO <F1>.
    <F1> = L_I_XLSTMP-VALUE.
    AT END OF ROW.
      APPEND WA_TAB TO IT_TAB.
      CLEAR WA_TAB.
    ENDAT.
  ENDLOOP.
ENDFORM.                    ” FRM_GETDAT_EXCEL

*&———————————————————————*
*&      Form  FRM_BDC_MM01
*&———————————————————————*
*       MM01的BDC
*———————————————————————-*
FORM FRM_BDC_MM01.
  DATA: L_MODE TYPE C VALUE ‘N’.”BDC执行的模式

  PERFORM BDC_DYNPRO      USING ‘SAPLMGMM’ ‘0060′.
  PERFORM BDC_FIELD       USING ‘BDC_CURSOR’
                                ‘RMMG1-MATNR’.
  PERFORM BDC_FIELD       USING ‘BDC_OKCODE’
                                ‘/00′.
  PERFORM BDC_FIELD       USING ‘RMMG1-MBRSH’
                                ‘M’.
  PERFORM BDC_FIELD       USING ‘RMMG1-MTART’
                                ‘ROH’.
  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’
                                ‘=BU’.
  PERFORM BDC_FIELD       USING ‘MAKT-MAKTX’
                                WA_TAB-MAKTX.
  PERFORM BDC_FIELD       USING ‘BDC_CURSOR’
                                ‘MARA-MATKL’.
  PERFORM BDC_FIELD       USING ‘MARA-MEINS’
                                WA_TAB-MEINS.
  PERFORM BDC_FIELD       USING ‘MARA-MATKL’
                                WA_TAB-MATKL.
  CALL TRANSACTION ‘MM01′ USING IT_BDC MODE L_MODE UPDATE ‘S’ MESSAGES INTO MESSTAB.
  IF SY-SUBRC = 0.
    COMMIT WORK.
*读信息记录编号
    READ TABLE MESSTAB INTO WA_MESSTAB WITH KEY MSGTYP = ‘S’.
    MESSAGE ID     WA_MESSTAB-MSGID
           TYPE   ‘S’
           NUMBER WA_MESSTAB-MSGNR
          INTO   WA_RE_VAL-TEXT
           WITH   WA_MESSTAB-MSGV1
                  WA_MESSTAB-MSGV2
                  WA_MESSTAB-MSGV3
                  WA_MESSTAB-MSGV4.
    WRITE:/ WA_RE_VAL-TEXT.
  ELSE.
*执行失败,写失败原因
    ROLLBACK WORK.
    READ TABLE MESSTAB INTO WA_MESSTAB WITH KEY MSGTYP = ‘E’.
    MESSAGE ID     WA_MESSTAB-MSGID
            TYPE   ‘E’
            NUMBER WA_MESSTAB-MSGNR
          INTO   WA_RE_VAL-TEXT
            WITH   WA_MESSTAB-MSGV1
                   WA_MESSTAB-MSGV2
                   WA_MESSTAB-MSGV3
                   WA_MESSTAB-MSGV4.
    WRITE:/ WA_RE_VAL-TEXT.
  ENDIF.

  REFRESH MESSTAB.
  CLEAR: WA_MESSTAB,WA_RE_VAL,IT_BDC,IT_BDC[].
ENDFORM.                    “FRM_BDC_ME11
*&———————————————————————*
*&      Form  BDC_DYNPRO
*&———————————————————————*
*       填写程序与屏幕
*———————————————————————-*
*     –>  PR_PROGRAM     程序
*     –>  PR_DYNPRO      屏幕
*———————————————————————-*
FORM BDC_DYNPRO USING PR_PROGRAM PR_DYNPRO.
  CLEAR IT_BDC.
  IT_BDC-PROGRAM  = PR_PROGRAM.
  IT_BDC-DYNPRO   = PR_DYNPRO.
  IT_BDC-DYNBEGIN = ‘X’.
  APPEND IT_BDC.
ENDFORM.                               ” BDC_DYNPRO
*&———————————————————————*
*&      Form  BDC_FIELD
*&———————————————————————*
*       填写字段与值
*———————————————————————-*
*     –>  PR_FNAM     字段
*     –>  PR_FVAL     值
*———————————————————————-*
FORM BDC_FIELD USING PR_FNAM PR_FVAL.
  CLEAR IT_BDC.
  IT_BDC-FNAM = PR_FNAM.
  IT_BDC-FVAL = PR_FVAL.
  APPEND IT_BDC.
ENDFORM.                    “FRM_BDC_FIELD


原文地址:http://scnblogs.techweb.com.cn/winson/archives/146.html

ABAP程序中的BDC(Batch Data Communication)代码开发主要是为了处理大批量数据的输入或修改。下面是BDC代码开发的全过程: 1. 定义BDC数据结构:首先需要定义一个数据结构,用于存储要导入或修改的数据。这个结构通常是一个内表,包含了程序需要处理的字段。 2. 读取数据源:接下来,从数据源中读取数据。数据源可以是数据库表、Excel文件或其他外部系统。 3. 编写转换逻辑:在BDC开发中,通常需要进行数据转换,将数据源中的数据映射到ABAP程序的数据结构中。这个过程中,需要根据业务需求对数据进行一些处理,比如日期格式转换、数值转换等。 4. 创建BDC会话:接下来,需要创建一个BDC会话。BDC会话是ABAP程序与事务处理之间的桥梁,用于处理事务数据的导入或修改。 5. 输入或修改数据:通过BDC会话,将转换后的数据导入到SAP系统中。如果是数据导入,可以使用BDC方法CALL TRANSACTION来执行事务代码。如果是数据修改,可以使用BDC方法CALL TRANSACTION USING来执行事务代码。 6. 错误处理:在BDC开发中,由于可能存在各种错误,如数据格式错误、字段缺失等,所以需要对错误进行处理。可以使用BDC方法SESSION_SET_BIG_INTERVAL来设置一个长时间间隔,然后检查和处理错误信息。 7. 提交和确认:在数据导入或修改完成后,需要使用BDC方法SESSION_CLOSE来提交事务,并通过BDC方法SESSION_PROCESSING提交数据更改。然后,可以检查和处理事务的结果。 8. 清除会话:在处理完BDC会话后,需要使用BDC方法SESSION_CLOSE来清除会话,以释放相关的资源。 以上是ABAP程序BDC代码开发的全过程。通过合理的数据结构定义、数据源读取、转换逻辑编写、BDC会话创建和数据处理,可以实现大批量数据的输入或修改。同时,错误处理和会话清除也是不可忽视的步骤,以确保数据的完整性和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

trassion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值