ABAP 9 FILE_OPERATION文件操作代码块

2 篇文章 0 订阅
*&---------------------------------------------------------------------*
*& Report ZAXYZ_C9U2_FILE_OPERATION
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*

REPORT ZAXYZ_C9U2_FILE_OPERATION.

SELECTION-SCREEN : BEGIN OF LINE,
COMMENT 01(20) C_RFILE FOR FIELD RAD_FILE.
PARAMETERS: RAD_FILE  TYPE C RADIOBUTTON GROUP RAD DEFAULT 'X' USER-COMMAND R1.
SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 01(20) C_RBACH FOR FIELD RAD_BACH.
PARAMETERS: RAD_BACH  TYPE C RADIOBUTTON GROUP RAD.
SELECTION-SCREEN : END OF LINE.

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 01(20) C_FILE FOR FIELD P_FILE.
PARAMETERS: P_FILE  TYPE STRING VISIBLE LENGTH 50.   "STRINGの場合,検索ヘルプが設定されていない
SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 01(20) C_BATCH FOR FIELD P_BATCH.
PARAMETERS P_BATCH TYPE STRING VISIBLE LENGTH 50.
SELECTION-SCREEN: END OF LINE.
************************************************************************
*  MODEL: CLASS
************************************************************************
CLASS LCL_MODEL_DATA DEFINITION.

  PUBLIC SECTION.
    TYPES: BEGIN OF TY_RESULT,
             VBELN TYPE VBELN,
             ERNAM TYPE ERNAM,
           END OF TY_RESULT.

    CLASS-DATA: IT_RESULT TYPE TABLE OF TY_RESULT.

ENDCLASS.

CLASS LCL_MODEL_DATA IMPLEMENTATION.

ENDCLASS.

*&---------------------------------------------------------------------*
*& VIEW: CLASS
*&---------------------------------------------------------------------*
CLASS LCL_VIEW_RESULT DEFINITION.
  PUBLIC SECTION.
    METHODS: DISPLAY_DATA.

ENDCLASS.

CLASS LCL_VIEW_RESULT IMPLEMENTATION.

  METHOD DISPLAY_DATA.

    CL_SALV_TABLE=>FACTORY(
      EXPORTING
        LIST_DISPLAY = IF_SALV_C_BOOL_SAP=>FALSE
*           R_CONTAINER  =
*           CONTAINER_NAME =
      IMPORTING
        R_SALV_TABLE = DATA(O_SALV)
      CHANGING
        T_TABLE      = LCL_MODEL_DATA=>IT_RESULT
    ).

    O_SALV->GET_FUNCTIONS( )->SET_DEFAULT(
*            VALUE = IF_SALV_C_BOOL_SAP=>TRUE
    ).

    O_SALV->DISPLAY( ).

  ENDMETHOD.

ENDCLASS.
*&---------------------------------------------------------------------*
*& CONTROLLER: CLASS
*&---------------------------------------------------------------------*
CLASS LCL_MAIN DEFINITION.

  PUBLIC SECTION.
    CLASS-METHODS:
      SETUP_GUI_FILE_SEARCH_HELP,
      SETUP_BATCH_FILE_SEARCH_HELP,
      UPDATE_SELECTION_SCREEN.

    METHODS CONSTRUCTOR IMPORTING IM_TYPE       TYPE C
                                  IM_GUI_FILE   TYPE STRING
                                  IM_BATCH_FILE TYPE STRING.

    METHODS:
      EXCUTE_REPORT.

  PRIVATE SECTION.
    DATA: LOAD_TYPE TYPE C.
    DATA: FILENAME TYPE STRING.
    DATA: LO_VIEW TYPE REF TO LCL_VIEW_RESULT.
    DATA: LO_MODEL TYPE REF TO LCL_MODEL_DATA.
    METHODS:
      GUI_LOAD,
      BATCH_LOAD.

ENDCLASS.

CLASS LCL_MAIN IMPLEMENTATION.

  METHOD CONSTRUCTOR.
    LOAD_TYPE = SWITCH #( IM_TYPE
    WHEN 'X' THEN 'G'       "GUI UPLOAD
    ELSE 'B'               "BATCH LOAD
    ).
    FILENAME = SWITCH #( IM_TYPE
    WHEN 'X' THEN IM_GUI_FILE
    ELSE IM_BATCH_FILE
    ).

  ENDMETHOD.

  METHOD SETUP_BATCH_FILE_SEARCH_HELP.
    DATA: L_PATH TYPE DXFIELDS-LONGPATH.
    CHECK RAD_BACH IS NOT INITIAL.
    CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
      EXPORTING
        I_LOCATION_FLAG = '1'
        I_SERVER        = 'HDB_SA'
        I_PATH          = '//tmp/'
        FILEMASK        = '*.*'
*       FILEOPERATION   = 'R'
      IMPORTING
*       O_LOCATION_FLAG =
*       O_SERVER        =
        O_PATH          = L_PATH
*       ABEND_FLAG      =
      EXCEPTIONS
        RFC_ERROR       = 1
        ERROR_WITH_GUI  = 2
        OTHERS          = 3.
    SHIFT L_PATH BY 1 PLACES.
    P_BATCH = L_PATH.

  ENDMETHOD.

  METHOD SETUP_GUI_FILE_SEARCH_HELP.

    DATA: L_FILE_TABLE TYPE STANDARD TABLE OF FILE_TABLE,
          WA_SINGLE    TYPE FILE_TABLE,
          L_RC         TYPE I.
    CHECK RAD_FILE IS NOT INITIAL.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
      EXPORTING
        WINDOW_TITLE            = 'OPEN DIALOG'   " title of the file open dialog
*       DEFAULT_EXTENSION       =
*       DEFAULT_FILENAME        =
*       FILE_FILTER             =
*       WITH_ENCODING           =
*       INITIAL_DIRECTORY       =
*       MULTISELECTION          =
      CHANGING
        FILE_TABLE              = L_FILE_TABLE "Table Hloding Selected Files
        RC                      = L_RC          "Return Code, Number of Files or -1 If Error Occured
*       USER_ACTION             =
*       FILE_ENCODING           =
      EXCEPTIONS
        FILE_OPEN_DIALOG_FAILED = 1
        CNTL_ERROR              = 2
        ERROR_NO_GUI            = 3
        NOT_SUPPORTED_BY_GUI    = 4
        OTHERS                  = 5.
* 成功した場合
    IF SY-SUBRC = 0.

      READ TABLE L_FILE_TABLE INTO WA_SINGLE INDEX 1 TRANSPORTING FILENAME.
      P_FILE = WA_SINGLE-FILENAME.

    ENDIF.
  ENDMETHOD.

  METHOD UPDATE_SELECTION_SCREEN.
    LOOP AT SCREEN.
      IF SCREEN-NAME = 'P_FILE'.
        SCREEN-INPUT = SWITCH #( RAD_FILE
          WHEN 'X' THEN 1
          ELSE 0
        ).
        MODIFY SCREEN.

      ENDIF.

      IF SCREEN-NAME = 'P_BATCH'.
        SCREEN-INPUT = SWITCH #( RAD_FILE
        WHEN 'X' THEN 1
        ELSE 1
        ).
        MODIFY SCREEN.

      ENDIF.

    ENDLOOP.

  ENDMETHOD.

  METHOD EXCUTE_REPORT.

    LO_VIEW = NEW LCL_VIEW_RESULT( ).  "初期化:VIEW
    IF LOAD_TYPE = 'G'.
      GUI_LOAD( ).
    ELSE.
      BATCH_LOAD( ).
    ENDIF.
    LO_VIEW->DISPLAY_DATA( ).

  ENDMETHOD.

  METHOD BATCH_LOAD.
* structure & string
    DATA: WA_FILE     TYPE LCL_MODEL_DATA=>TY_RESULT.
    DATA: FILE_STRING TYPE STRING.
    TRANSLATE FILENAME TO LOWER CASE.
    OPEN DATASET FILENAME FOR INPUT IN TEXT MODE ENCODING DEFAULT.

    DO.
      READ DATASET FILENAME INTO FILE_STRING.
      IF SY-SUBRC <> 0.
        EXIT.

      ENDIF.
      SPLIT FILE_STRING AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
        INTO WA_FILE-VBELN WA_FILE-ERNAM.
      APPEND WA_FILE TO LCL_MODEL_DATA=>IT_RESULT.

    ENDDO.
    CLOSE DATASET FILENAME.

  ENDMETHOD.

  METHOD GUI_LOAD.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
      EXPORTING
        FILENAME                = FILENAME
*       FILETYPE                = 'ASC'
        HAS_FIELD_SEPARATOR     = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB  "TABで分割
*       HEADER_LENGTH           = 0
*       READ_BY_LINE            = 'X'
*       DAT_MODE                = SPACE
*       CODEPAGE                = SPACE
*       IGNORE_CERR             = ABAP_TRUE
*       REPLACEMENT             = '#'
*       VIRUS_SCAN_PROFILE      =
*      IMPORTING
*       FILELENGTH              =
*       HEADER                  =
      CHANGING
        DATA_TAB                = LCL_MODEL_DATA=>IT_RESULT
*       ISSCANPERFORMED         = SPACE
      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
        NOT_SUPPORTED_BY_GUI    = 17
        ERROR_NO_GUI            = 18
        OTHERS                  = 19.
    IF SY-SUBRC <> 0.
*     Implement suitable error handling here
    ENDIF.


  ENDMETHOD.


ENDCLASS.

************************************************************************
*  INITIALIZATION
************************************************************************
INITIALIZATION.
  PERFORM F_INIT_SET.
************************************************************************
*  SearchHelp - Definition
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  LCL_MAIN=>SETUP_BATCH_FILE_SEARCH_HELP( ).

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_BATCH.
  LCL_MAIN=>SETUP_BATCH_FILE_SEARCH_HELP( ).

AT SELECTION-SCREEN OUTPUT.
  LCL_MAIN=>UPDATE_SELECTION_SCREEN( ).

************************************************************************
*  Main Program
************************************************************************
START-OF-SELECTION.
  DATA(O_REPORT) = NEW LCL_MAIN(
    IM_TYPE       = RAD_FILE
    IM_GUI_FILE   = P_FILE
    IM_BATCH_FILE = P_BATCH
    ).

  O_REPORT->EXCUTE_REPORT( ).

  "model view controller
  "selection-screen
  "process selection-screen, controller,
*&---------------------------------------------------------------------*
*& Form F_INIT_SET
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM F_INIT_SET .

  MOVE:
    'ONLINE'   TO C_RFILE,
    'BATCH'  TO C_RBACH,
    'ONLINE' TO C_FILE,
    'BATCH' TO C_BATCH.

ENDFORM.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值