abap-下载和上传请求包

来源:互联网 发布:软件测试工作怎样 编辑:程序博客网 时间:2024/05/09 06:04

*&---------------------------------------------------------------------*
*& Report  Z_XL_UP_DOWN_REQUEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_XL_UP_DOWN_REQUEST.

TYPE-POOLS: trwbo, stms.
DATA:
    es_selected_request TYPE trwbo_request_header,
    es_selected_task TYPE trwbo_request_header,
    iv_organizer_type TYPE trwbo_calling_organizer,
    is_selection TYPE trwbo_selection.
DATA: folder TYPE string ,
      flag TYPE c        ,
      dir_trans TYPE text255  ,
      path2 TYPE text255 ,
      localfolder(128TYPE c ,
      upfilename(11TYPE c.
DATA:
  lt_request TYPE stms_tr_requests,
  lt_tp_maintain TYPE stms_tp_maintains.
DATA:
  et_request_infos TYPE stms_wbo_requests,
  request_info TYPE stms_wbo_request,
  request LIKE e070-trkorr.
DATABEGIN OF it_memo OCCURS 0 ,
        line(255TYPE c,
      END OF it_memo.
DATA: error LIKE boole-boole ,
      err_txt(100TYPE c .

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
PARAMETERS: download RADIOBUTTON GROUP typ USER-COMMAND sele DEFAULT 'X'.
PARAMETERS: upload RADIOBUTTON GROUP typ.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t2.
PARAMETERS:  p_file(255TYPE c LOWER CASE MODIF ID m2,
             p_client LIKE tmsbuffer-tarcli DEFAULT sy-mandt
                           MATCHCODE OBJECT h_t000 MODIF ID m2.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE t3.
PARAMETERS:p_reqnum TYPE trkorr MODIF ID m3,
           p_folder LIKE rlgrap-filename DEFAULT 'C:/' LOWER CASE MODIF ID m3 ,
           p_memo(255TYPE c MODIF ID m3.
SELECTION-SCREEN END OF BLOCK b3.
INITIALIZATION.
  t1 = '选择功能'.
  t2 = '上传参数'.
  t3 = '下载参数'.
  IF sy-opsys = 'Windows NT'.
    flag = '/'.
  ELSE.
    flag = '/'.
  ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_reqnum.
  iv_organizer_type = 'W'.
  is_selection-reqstatus = 'R'.
  CALL FUNCTION 'TR_PRESENT_REQUESTS_SEL_POPUP'
    EXPORTING
      iv_organizer_type   = iv_organizer_type
      is_selection        = is_selection
    IMPORTING
      es_selected_request = es_selected_request
      es_selected_task    = es_selected_task.
  p_reqnum = es_selected_request-trkorr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_folder.
  CALL METHOD cl_gui_frontend_services=>directory_browse
    CHANGING
      selected_folder = folder
    EXCEPTIONS
      cntl_error      = 1
      error_no_gui    = 2
      OTHERS          = 3.
  p_folder = folder.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  DATA:
    file TYPE file_table,
    rc TYPE i,
    file_table TYPE filetable,
    file_filter TYPE string VALUE '(K*.*)|K*.*||'.
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      file_filter             = file_filter
    CHANGING
      file_table              = file_table
      rc                      = rc
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  READ TABLE file_table INTO file INDEX 1.
  p_file = file.
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    CASE screen-group1.
      WHEN 'M2'.
        IF download = 'X'.
          screen-active = '0'.
        ELSE.
          screen-active = '1'.
        ENDIF.
      WHEN 'M3'.
        IF download = 'X'.
          screen-active = '1'.
        ELSE.
          screen-active = '0'.
        ENDIF.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.
START-OF-SELECTION.
  CALL FUNCTION 'RSPO_R_SAPGPARAM'
    EXPORTING
      name   = 'DIR_TRANS'
    IMPORTING
      value  = dir_trans
    EXCEPTIONS
      error  = 0
      OTHERS = 0.
  IF download = 'X'.
    IF p_reqnum = '' OR p_folder = ''.
      MESSAGE '必须输入请求号和地址' TYPE 'I'.
      EXIT.
    ENDIF.
    PERFORM downloadrequest.
  ELSE.
    IF p_client = '' OR p_file = '' .
      MESSAGE '必须输入文件名和Client' TYPE 'I'.
      EXIT.
    ENDIF.
    PERFORM uploadrequest.
    PERFORM addrequest.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  DOWNLOADREQUEST
*&---------------------------------------------------------------------*
FORM downloadrequest .
  CONCATENATE p_reqnum+3(7'.' p_reqnum(3INTO p_reqnum.
  CONCATENATE dir_trans 'cofiles' p_reqnum INTO path2 SEPARATED BY flag.
  CONCATENATE p_folder '/' p_reqnum INTO localfolder.
  PERFORM down_file USING path2
                          localfolder .
  p_reqnum(1) = 'R'.
  CONCATENATE dir_trans 'data' p_reqnum INTO path2 SEPARATED BY flag.
  CONCATENATE p_folder '/' p_reqnum INTO localfolder.
  PERFORM down_file USING path2
                          localfolder .
  IF p_memo <> ''.
    DATA str TYPE string.
    it_memo-line = p_memo.
    APPEND it_memo.
    p_reqnum(1) = 'K'.
    p_reqnum+8(3) = 'TXT'.
    CONCATENATE p_folder '/' p_reqnum INTO localfolder.
    str = localfolder .
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename = str
      TABLES
        data_tab = it_memo.
  ENDIF.
  MESSAGE '成功下载!' TYPE 'I'.
ENDFORM.                    " DOWNLOADREQUEST
*&--------------------------------------------------------------------*
*&      Form  DOWN_FILE
*&--------------------------------------------------------------------*
FORM down_file USING    p_path
                        file_name .
  DATA: path LIKE rcgfiletr-ftappl .
  DATA: localfile LIKE rcgfiletr-ftfront.
  path = p_path .
  localfile = file_name .
  CLEAR:error,err_txt.
  CALL FUNCTION 'C13Z_FILE_DOWNLOAD_BINARY'
    EXPORTING
      i_file_front_end    = localfile
      i_file_appl         = path
      i_file_overwrite    = 'X'
    IMPORTING
      e_flg_open_error    = error
      e_os_message        = err_txt
    EXCEPTIONS
      fe_file_open_error  = 1
      fe_file_exists      = 2
      fe_file_write_error = 3
      ap_no_authority     = 4
      ap_file_open_error  = 5
      ap_file_empty       = 6
      OTHERS              = 7.
  IF sy-subrc <> 0.
    IF sy-msgty = '' .
      sy-msgty = 'E' .
    ENDIF .
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  IF error = 'X'.
    MESSAGE err_txt TYPE 'I'.
    STOP.
  ENDIF.
ENDFORM.                               " DOWN_FILE
*&--------------------------------------------------------------------*
*&      Form  UP_FILE
*&--------------------------------------------------------------------*
FORM up_file USING      p_path
                        file_name .
  DATA: path LIKE rcgfiletr-ftappl .
  DATA: localfile LIKE rcgfiletr-ftfront.
  path = p_path .
  localfile = file_name .
  CLEAR:error,err_txt.
  CALL FUNCTION 'C13Z_FILE_UPLOAD_BINARY'
    EXPORTING
      i_file_front_end   = localfile
      i_file_appl        = path
      i_file_overwrite   = 'X'
    IMPORTING
      e_flg_open_error   = error
      e_os_message       = err_txt
    EXCEPTIONS
      fe_file_not_exists = 1
      fe_file_read_error = 2
      ap_no_authority    = 3
      ap_file_open_error = 4
      ap_file_exists     = 5
      OTHERS             = 6.
  IF sy-subrc <> 0.
    IF sy-msgty = '' .
      sy-msgty = 'E' .
    ENDIF .
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  IF error = 'X'.
    MESSAGE err_txt TYPE 'I'.
    STOP.
  ENDIF.
*  IF sy-subrc <> 0.
*    CASE sy-subrc  .
*      WHEN 1 .
*        MESSAGE '本地文件不存在!' TYPE 'I' .
*      WHEN 2 .
*        MESSAGE '读取本地文件出错!' TYPE 'I' .
*      WHEN 3 .
*        MESSAGE '服务器权限错误!' TYPE 'I' .
*      WHEN 4 .
*        MESSAGE '服务器文件打开错误!' TYPE 'I' .
*      WHEN 5 .
*        MESSAGE '服务器文件已经存在!' TYPE 'I' .
*      WHEN 6 .
*        MESSAGE '其他错误!' TYPE 'I' .
*    ENDCASE .
*  ENDIF.
ENDFORM.                    "UP_FILE
*&---------------------------------------------------------------------*
*&      Form  UPLOADREQUEST
*&---------------------------------------------------------------------*
FORM uploadrequest .
  DATA:
      filename LIKE sdbah-actid ,
      extension LIKE sdbad-funct,
      n TYPE i ,
      m TYPE i .
  CALL FUNCTION 'SPLIT_FILENAME'
    EXPORTING
      long_filename  = p_file
    IMPORTING
      pure_filename  = filename
      pure_extension = extension.
  CONCATENATE filename '.' extension INTO upfilename .
  CONCATENATE extension filename INTO request.
  CONCATENATE dir_trans 'cofiles' upfilename INTO path2 SEPARATED BY flag.
  PERFORM up_file USING path2
                        p_file .
  upfilename(1) = 'R'.
  CONCATENATE dir_trans 'data' upfilename INTO path2 SEPARATED BY flag.
  n = STRLEN( p_file ).
  m = n - 11 .
  p_file+m(1) = 'R'.
  PERFORM up_file USING path2
                        p_file .
ENDFORM.                    " UPLOADREQUEST
*&---------------------------------------------------------------------*
*&      Form  addrequest
*&---------------------------------------------------------------------*
FORM addrequest .
  DATA system LIKE tmscsys-sysnam .
  system = sy-sysid.
  CALL FUNCTION 'TR_AUTHORITY_CHECK_ADMIN'
    EXPORTING
      iv_adminfunction = 'TADD'
    EXCEPTIONS
      e_no_authority   = 1
      e_invalid_user   = 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.
    EXIT.
  ENDIF.
  CALL FUNCTION 'TMS_UI_APPEND_TR_REQUEST'
    EXPORTING
      iv_system             = system
      iv_request            = request
      iv_expert_mode        = 'X'
      iv_ctc_active         = 'X'
    EXCEPTIONS
      cancelled_by_user     = 1
      append_request_failed = 2
      OTHERS                = 3.
  CHECK sy-subrc = 0.
  CALL FUNCTION 'TMS_MGR_READ_TRANSPORT_REQUEST'
    EXPORTING
      iv_request                 = request
      iv_target_system           = system
    IMPORTING
      et_request_infos           = et_request_infos
    EXCEPTIONS
      read_config_failed         = 1
      table_of_requests_is_empty = 2
      system_not_available       = 3
      OTHERS                     = 4.
  CLEAR request_info.
  READ TABLE et_request_infos INTO request_info INDEX 1.
  IF request_info-e070-korrdev = 'CUST' AND NOT p_client IS INITIAL.
    CALL FUNCTION 'TMS_MGR_MAINTAIN_TR_QUEUE'
      EXPORTING
        iv_command                 = 'FILLCLIENT'
        iv_system                  = system
        iv_request                 = request
        iv_tarcli                  = p_client
        iv_monitor                 = 'X'
        iv_verbose                 = 'X'
      IMPORTING
        et_tp_maintains            = lt_tp_maintain
      EXCEPTIONS
        read_config_failed         = 1
        table_of_requests_is_empty = 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.
      EXIT.
    ENDIF.
  ENDIF.
  CALL FUNCTION 'TR_AUTHORITY_CHECK_ADMIN'
    EXPORTING
      iv_adminfunction = 'IMPS'
    EXCEPTIONS
      e_no_authority   = 1
      e_invalid_user   = 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.
    EXIT.
  ENDIF.
  CALL FUNCTION 'TMS_UI_IMPORT_TR_REQUEST'
    EXPORTING
      iv_system             = system
      iv_request            = request
      iv_tarcli             = p_client
      iv_some_active        = space
    EXCEPTIONS
      cancelled_by_user     = 1
      import_request_denied = 2
      import_request_failed = 3
      OTHERS                = 4.
ENDFORM.                    " addrequest

 

 

转自老白 的blog

原创粉丝点击