这是我写的一个BDC的小练习,实现批量数据的数据库维护,这里面也还有一些没有解决的问题:在数据输入屏幕如何将文件中的数据一次性导入,如果是一次性导入就不能用 LOOP AT 语句,再就是如何定位数据输入位置如第一行为ZBDC-ID(1),接下来的是ZBDC-ID(2....)那么如何动态的实现数据与队列的对应应该改善。 下面是我的程序,有很多地方需要完善,请各位赐教。
*&---------------------------------------------------------------------*
*& Report Z_VERN_BDC_TEST
*&
*&---------------------------------------------------------------------*
*& 创建日期 程序员 创建请求号 业务顾问
*&
*&---------------------------------------------------------------------*
REPORT Z_VERN_BDC_TEST.
*----------------------------------------------------------------------*
* Global Types, Data Statements, Ranges, Constants *
*----------------------------------------------------------------------*
TABLES: ZBDC.
DATA: BEGIN OF GT_ZBDC OCCURS 0,
ID LIKE ZBDC-ID,
NAME LIKE ZBDC-NAME,
END OF GT_ZBDC.
DATA:I_BDCTAB LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA:MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001.
PARAMETERS: IN_FILE TYPE STRING DEFAULT 'D:/SOFT/TEST.TXT' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BK1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR IN_FILE.
CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = '*.TXT'
MODE = 'I'
TITLE = '请选择输入的文件'
IMPORTING
FILENAME = IN_FILE
EXCEPTIONS
SELECTION_CANCEL = 1
SELECTION_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
START-OF-SELECTION.
PERFORM UPLOAD_DATA.
PERFORM ISNERT_DATA.
*&---------------------------------------------------------------------*
*& Form UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPLOAD_DATA .
REFRESH GT_ZBDC.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = IN_FILE
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = '#'
TABLES
DATA_TAB = GT_ZBDC
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
APPEND GT_ZBDC.
ENDFORM. " UPLOAD_DATA
*&---------------------------------------------------------------------*
*& Form ISNERT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ISNERT_DATA .
LOOP AT GT_ZBDC.
PERFORM BDC_DYNPRO USING 'SAPMSVMA' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'VIWNAME'.
PERFORM BDC_FIELD USING 'VIEWNAME'
'ZBDC'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=UPD'.
PERFORM BDC_DYNPRO USING 'SAPLZBDC' '0001'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'VIM_POSITION_INFO'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=NEWL'.
PERFORM BDC_DYNPRO USING 'SAPLZBDC' '0001'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'ZBDC-ID'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SAVE'.
PERFORM BDC_FIELD USING 'ZBDC-ID(01)'
GT_ZBDC-ID.
PERFORM BDC_FIELD USING 'ZBDC-NAME(01)'
GT_ZBDC-NAME.
PERFORM BDC_DYNPRO USING 'SAPLZBDC' '0001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BACK'.
PERFORM BDC_TRANSACTION USING 'SM30'.
ENDLOOP.
ENDFORM. " ISNERT_DATA
*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0151 text
* -->P_0152 text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM
FVAL.
CLEAR I_BDCTAB.
I_BDCTAB-FNAM = FNAM.
I_BDCTAB-FVAL = FVAL.
APPEND I_BDCTAB.
ENDFORM. " BDC_FIELD
*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0211 text
* -->P_0212 text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM
DYNPRO.
CLEAR I_BDCTAB.
I_BDCTAB-PROGRAM = PROGRAM.
I_BDCTAB-DYNPRO = DYNPRO.
I_BDCTAB-DYNBEGIN = 'X'.
APPEND I_BDCTAB.
ENDFORM. " BDC_DYNPRO
*&---------------------------------------------------------------------*
*& Form BDC_TRANSACTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0256 text
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
REFRESH MESSTAB.
CALL TRANSACTION TCODE USING I_BDCTAB
MODE 'A'
UPDATE 'S'
MESSAGES INTO MESSTAB.
ENDFORM. " BDC_TRANSACTION
阅读(833) | 评论(0) | 转发(0) |