Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92202
  • 博文数量: 39
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-30 17:39
文章分类

全部博文(39)

文章存档

2011年(1)

2009年(21)

2008年(17)

我的朋友

分类:

2008-11-03 11:25:13

这是我写的一个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) |
给主人留下些什么吧!~~