BDC录屏笔记1

REPORT ZTS_XSY_TEST10.
INCLUDE zsy_xy_tcus.   "记录程序运行日志
INCLUDE ZTS_XSY_TEST10TOP.
INCLUDE ZTS_XSY_TEST10FORM.



INITIALIZATION.
* 增加图标
*   TYPE-POOLS ICON.

 WRITE ICON_CHANGE_TEXT AS ICON TO SSCRFIELDS-FUNCTXT_01+0(4).
   SSCRFIELDS-FUNCTXT_01+4(*) = '下载模板'.

AT SELECTION-SCREEN.
  PERFORM SELECTION_SCREEN_PAI.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILES.
  PERFORM GET_FILENAME.

START-OF-SELECTION.

*取数
*1,从execl上传
*2.手工插入数据
*    CLEAR GS_MATERIAL.
*    GS_MATERIAL-MATNR = 'TEST01'.
*    GS_MATERIAL-MAKTX = 'TEST BDC DATA'.
*    GS_MATERIAL-BRGEW = '200'.
*    GS_MATERIAL-NTGEW = '180'.
*    GS_MATERIAL-GEWET = 'G'.
*    APPEND GS_MATERIAL TO GT_MATERIAL.

PERFORM GET_DATA.

END-OF-SELECTION.
*转换
PERFORM APPEND_BDCDATA.
*PERFORM APPEND_BDCDATA_BATCH.
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST10TOP
*&---------------------------------------------------------------------*
TYPES: BEGIN OF GTY_MATERIAL,
          MATNR TYPE C LENGTH 18,"物料代码
          MAKTX TYPE C LENGTH 40,"物料描述
          BRGEW TYPE C LENGTH 20,"毛重量
          NTGEW TYPE C LENGTH 20,  "净重量
          GEWET TYPE C LENGTH 3,  "单位
       END OF GTY_MATERIAL.

DATA GT_MATERIAL TYPE TABLE OF GTY_MATERIAL.
DATA GS_MATERIAL TYPE GTY_MATERIAL.

DATA: BEGIN OF GT_TEMPLATE OCCURS 0,
       TAB1 TYPE C LENGTH 10 VALUE '物料代码',
       TAB2 TYPE C LENGTH 10 VALUE '物料描述',
       TAB3 TYPE C LENGTH 10 VALUE '毛重量',
       TAB4 TYPE C LENGTH 10 VALUE '净重量',
       TAB5 TYPE C LENGTH 10 VALUE '重量单位',
      END OF GT_TEMPLATE.

DATA BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE.

TABLES SSCRFIELDS.

PARAMETERS P_FILES TYPE RLGRAP-FILENAME.

*应用工具栏增加按钮
SELECTION-SCREEN FUNCTION KEY 1." 数字1-5
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST10FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  APPEND_BDCDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM append_bdcdata .
  DATA lv_message TYPE c LENGTH 200.
 DATA : messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

  LOOP AT gt_material INTO gs_material .

    CLEAR : bdcdata,bdcdata[],messtab, messtab[].  "循环执行注意清空
    PERFORM append_screen USING 'SAPLWBABAP'     '0100'.
    PERFORM append_field USING 'BDC_CURSOR'      'RS38M-PROGRAMM'.
    PERFORM append_field USING 'BDC_OKCODE'      '=STRT'.
    PERFORM append_field USING 'RS38M-PROGRAMM'  'ZMM22004'.
    PERFORM append_field USING 'RS38M-FUNC_EDIT' 'X'.

    PERFORM append_screen USING 'ZMM22004'       '1000'.
    PERFORM append_field USING 'BDC_OKCODE'      '/EENDE'.
    PERFORM append_field USING 'BDC_CURSOR'      'S_LLIEF-LOW'.


    PERFORM append_screen USING 'SAPLWBABAP'     '0100'.
    PERFORM append_field USING 'BDC_CURSOR'      'RS38M-PROGRAMM'.
    PERFORM append_field USING 'BDC_OKCODE'      '=LEAV'.
    PERFORM append_field USING 'RS38M-PROGRAMM'  'ZMM22004'.
    PERFORM append_field USING 'RS38M-FUNC_EDIT' 'X'.

    CALL TRANSACTION 'MM02' USING bdcdata  "使用内表调用
*                               OPTIONS FROM GS_OPTION   " CTU_PARAMS
                               UPDATE 'S' "更新模式, s同步 A 异步
                               MODE 'A' "显示模式: A前台  N 后台 E只显示错误.
                               MESSAGES INTO messtab.


    READ TABLE messtab WITH KEY msgid = 'M3'
                                msgnr = '801'. "物料修改成功
    IF sy-subrc = 0.
      WRITE:/ '物料',gs_material-matnr,'修改成功!'.
    ELSE.
      READ TABLE messtab WITH KEY  msgid = 'M3'
                                   msgnr = '810'.
      IF sy-subrc = 0.
        WRITE:/ '物料修改失败!'.

      ELSE.
        WRITE:/ '物料修改失败!'.

        WRITE:/ '物料',gs_material-matnr, '失败原因:'.
        LOOP AT messtab WHERE msgtyp = 'E'.
          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
            EXPORTING
              msgid               = messtab-msgid
              msgnr               = messtab-msgnr
              msgv1               = messtab-msgv1
              msgv2               = messtab-msgv2
              msgv3               = messtab-msgv3
              msgv4               = messtab-msgv4
            IMPORTING
              message_text_output = lv_message.

          WRITE:/ 'E',lv_message.
        ENDLOOP.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.

FORM append_field USING VALUE(p_field)
                        VALUE(p_value).
  CLEAR bdcdata.

  bdcdata-fnam    = p_field.
  bdcdata-fval   = p_value.
  APPEND bdcdata.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  APPEND_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM append_screen USING  VALUE(p_program)
                          VALUE(p_dynpro).
  CLEAR bdcdata.
  bdcdata-program = p_program.
  bdcdata-dynpro  = p_dynpro.
  bdcdata-dynbegin ='X'.
  APPEND bdcdata .
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .

  DATA lv_files TYPE string.

  CHECK p_files IS NOT INITIAL.
  TRANSLATE p_files TO UPPER CASE.

  FIND '.TXT' IN p_files.
  IF sy-subrc = 0.
    lv_files = p_files.

    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        filename                = lv_files
*       FILETYPE                = 'ASC'
        has_field_separator     = 'X '
*       HEADER_LENGTH           = 0
*       READ_BY_LINE            = 'X'
*       DAT_MODE                = ' '
*       CODEPAGE                = ' '
*       IGNORE_CERR             = ABAP_TRUE
*       REPLACEMENT             = '#'
*       CHECK_BOM               = ' '
*       VIRUS_SCAN_PROFILE      =
*       NO_AUTH_CHECK           = ' '
*   IMPORTING
*       FILELENGTH              =
*       HEADER                  =
      TABLES
        data_tab                = gt_material
*   CHANGING
*       isscanperformed         = ' '
      EXCEPTIONS
        file_open_error         = 1
        file_read_error         = 2
        no_batch                = 3
        gui_refuse_filetransfer = 4
        invalid_type            = 5
        no_authority            = 6
        unknown_error           = 7
        bad_data_format         = 8
        header_not_allowed      = 9
        separator_not_allowed   = 10
        header_too_long         = 11
        unknown_dp_error        = 12
        access_denied           = 13
        dp_out_of_memory        = 14
        disk_full               = 15
        dp_timeout              = 16
        OTHERS                  = 17.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
  ELSE.
    FIND '.XLS' IN p_files.
    IF sy-subrc = 0.
      DATA lt_raw TYPE truxs_t_text_data.
*EXCEL文件上传
      CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
        EXPORTING
          i_field_seperator    = 'X'
          i_line_header        = 'X'
          i_tab_raw_data       = lt_raw
          i_filename           = p_files
        TABLES
          i_tab_converted_data = gt_material.
* EXCEPTIONS
*   CONVERSION_FAILED          = 1
*   OTHERS                     = 2
      .
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GET_FILENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_filename .

  REFRESH gt_template.
  APPEND gt_template.

*1.获取本地文件路径
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
*     DEF_FILENAME     = ' '  "默认的文件名称
*     DEF_PATH         = ' ' " 默认的文件路径
      mask             = ',excel.xls,*.xlsx,text.txt,*.txt '
      mode             = ' O' " S 保存  O打开
      title            = ' 打开文件' "窗口的新手名称
    IMPORTING
      filename         = p_files
*     RC               =
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SELECTION_SCREEN_PAI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM selection_screen_pai .
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM download_template. "模板下载
  ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM download_template .
  DATA lv_file TYPE string.

  REFRESH gt_template.
  APPEND gt_template.

* 1.获取文件路径
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
*     DEF_FILENAME     = ' '
*     DEF_PATH         = ' '
*     MASK             = ' '
      mode             = ',EXECL,*.XLSX. '
      title            = ' S'
    IMPORTING
      filename         = lv_file
*     RC               =
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

  CHECK lv_file IS NOT INITIAL.

* 2.将内表下载到指定文件路径的文件中
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
*     BIN_FILESIZE            =
      filename                = lv_file
*     FILETYPE                = 'ASC'
*     APPEND                  = ' '
      write_field_separator   = ' X'
*     HEADER                  = '00'
*     TRUNC_TRAILING_BLANKS   = ' '
*     WRITE_LF                = 'X'
*     COL_SELECT              = ' '
*     COL_SELECT_MASK         = ' '
*     DAT_MODE                = ' '
*     CONFIRM_OVERWRITE       = ' '
*     NO_AUTH_CHECK           = ' '
*     CODEPAGE                = ' '
*     IGNORE_CERR             = ABAP_TRUE
*     REPLACEMENT             = '#'
*     WRITE_BOM               = ' '
*     TRUNC_TRAILING_BLANKS_EOL       = 'X'
*     WK1_N_FORMAT            = ' '
*     WK1_N_SIZE              = ' '
*     WK1_T_FORMAT            = ' '
*     WK1_T_SIZE              = ' '
*     WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*     SHOW_TRANSFER_STATUS    = ABAP_TRUE
*     VIRUS_SCAN_PROFILE      = '/SCET/GUI_DOWNLOAD'
*   IMPORTING
*     FILELENGTH              =
    TABLES
      data_tab                = gt_template
*     FIELDNAMES              = gt_header "每列的描述的内表(char 一个字段的内表)
    EXCEPTIONS
      file_write_error        = 1
      no_batch                = 2
      gui_refuse_filetransfer = 3
      invalid_type            = 4
      no_authority            = 5
      unknown_error           = 6
      header_not_allowed      = 7
      separator_not_allowed   = 8
      filesize_not_allowed    = 9
      header_too_long         = 10
      dp_error_create         = 11
      dp_error_send           = 12
      dp_error_write          = 13
      unknown_dp_error        = 14
      access_denied           = 15
      dp_out_of_memory        = 16
      disk_full               = 17
      dp_timeout              = 18
      file_not_found          = 19
      dataprovider_exception  = 20
      control_flush_error     = 21
      OTHERS                  = 22.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  APPEND_BDCDATA_BATCH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM append_bdcdata_batch .
  DATA lv_message TYPE c LENGTH 200.

  DATA gv_session TYPE apqi-groupid VALUE 'ZMM02_XSY01'.
*开启事务
  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
*     CLIENT              = SY-MANDT
*     DEST                = FILLER8
      group               = gv_session
*     HOLDDATE            = FILLER8
      keep                = 'X'
      user                = sy-uname
*     RECORD              = FILLER1
*     PROG                = SY-CPROG
*     DCPFM               = '%'
*     DATFM               = '%'
* IMPORTING
*     QID                 =
    EXCEPTIONS
      client_invalid      = 1
      destination_invalid = 2
      group_invalid       = 3
      group_is_locked     = 4
      holddate_invalid    = 5
      internal_error      = 6
      queue_error         = 7
      running             = 8
      system_lock_error   = 9
      user_invalid        = 10
      OTHERS              = 11.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.



  LOOP AT gt_material INTO gs_material .
 DATA : messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
    CLEAR : bdcdata,bdcdata[],
            messtab, messtab[].  "循环执行注意清空
    PERFORM append_screen USING 'SAPLWBABAP'     '0100'.
    PERFORM append_field USING 'BDC_CURSOR'      'RS38M-PROGRAMM'.
    PERFORM append_field USING 'BDC_OKCODE'      '=STRT'.
    PERFORM append_field USING 'RS38M-PROGRAMM'  'ZMM22004'.
    PERFORM append_field USING 'RS38M-FUNC_EDIT' 'X'.

    PERFORM append_screen USING 'ZMM22004'       '1000'.
    PERFORM append_field USING 'BDC_OKCODE'      '/EENDE'.
    PERFORM append_field USING 'BDC_CURSOR'      'S_LLIEF-LOW'.


    PERFORM append_screen USING 'SAPLWBABAP'     '0100'.
    PERFORM append_field USING 'BDC_CURSOR'      'RS38M-PROGRAMM'.
    PERFORM append_field USING 'BDC_OKCODE'      '=LEAV'.
    PERFORM append_field USING 'RS38M-PROGRAMM'  'ZMM22004'.
    PERFORM append_field USING 'RS38M-FUNC_EDIT' 'X'.

    CALL TRANSACTION 'MM02' USING bdcdata  "使用内表调用
*                               OPTIONS FROM GS_OPTION " CTU_PARAMS
                               UPDATE 'S' "更新模式, s同步 A 异步
                               MODE 'A' "显示模式: A前台  N 后台 E只显示错误.
                               MESSAGES INTO messtab.

*向SESSION中插入事务
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        tcode            = 'MM02'
*       POST_LOCAL       = NOVBLOCAL
*       PRINTING         = NOPRINT
*       SIMUBATCH        = ' '
*       CTUPARAMS        = ' '
      TABLES
        dynprotab        = bdcdata
      EXCEPTIONS
        internal_error   = 1
        not_open         = 2
        queue_error      = 3
        tcode_invalid    = 4
        printing_invalid = 5
        posting_invalid  = 6
        OTHERS           = 7.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.



  ENDLOOP.

*关闭SESSION
  CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
      not_open    = 1
      queue_error = 2
      OTHERS      = 3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ELSE.
    WRITE:/ 'SESSION创建成功!'.
  ENDIF.

ENDFORM.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值