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