IMPORT/EXPORT DATA

来源:互联网 发布:淘宝宝贝怎么下架了 编辑:程序博客网 时间:2024/05/16 08:21

REPORT  ZJIEDATA MESSAGE-ID ZA.

TABLES DD02L.

TYPE-POOLS : ABAP.
FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE,
             <DYN_WA>,
             <DYN_FIELD>.

DATA: DY_TABLE TYPE REF TO DATA,
    DY_LINE  TYPE REF TO DATA,
    XFC TYPE LVC_S_FCAT,
    IFC TYPE LVC_T_FCAT.
DATA : J_ANSWER TYPE C.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: R_IMP RADIOBUTTON GROUP R1.
SELECTION-SCREEN COMMENT 3(10) TEXT-001.
PARAMETERS: R_EXP RADIOBUTTON GROUP R1.
SELECTION-SCREEN COMMENT 16(10) TEXT-002.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME.
PARAMETERS: WK_TABLE(30) TYPE C OBLIGATORY.
PARAMETERS: WK_FILE LIKE RLGRAP-FILENAME
             DEFAULT 'U:/input.txt' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B3.
SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (65) TEXT-003.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (65) TEXT-004.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (65) TEXT-005.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.

********************************************

AT SELECTION-SCREEN ON VALUE-REQUEST FOR WK_FILE.
CALL FUNCTION 'WS_FILENAME_GET'
 EXPORTING
   DEF_FILENAME           = '*.txt'
*   DEF_PATH               = ' '
*   MASK                   = ''
*   MODE                   = ' '
*   TITLE                  = ' '
 IMPORTING
   FILENAME               = WK_FILE
*   RC                     =
 EXCEPTIONS
   INV_WINSYS             = 1
   NO_BATCH               = 2
   SELECTION_CANCEL       = 3
   SELECTION_ERROR        = 4
   OTHERS                 = 5.

AT SELECTION-SCREEN .
  SELECT SINGLE *
    FROM DD02L
   WHERE TABNAME EQ WK_TABLE.
  IF SY-SUBRC NE 0.
    MESSAGE E000 WITH 'Table does not exist!'.
  ENDIF.
START-OF-SELECTION.

**********Creates a dyanamic internal table**********
  PERFORM GET_STRUCTURE.
  PERFORM CREATE_DYNAMIC_ITAB.

*  PERFORM WRITE_OUT.
  IF R_IMP EQ 'X'.
    PERFORM CHECK_AUTH.
    PERFORM GET_CONFIRM.
    IF J_ANSWER = '1'.
      PERFORM UPLOAD_DATA.
      PERFORM UPDATE_DATA.
    ELSE.
*      LEAVE TO SCREEN 0.
    ENDIF.
  ELSE.
  ENDIF.
  IF R_EXP EQ 'X'.
    PERFORM GET_DATA.
    PERFORM DOWNLOAD_DATA.
  ELSE.
  ENDIF.
END-OF-SELECTION.

*************************************************

*&--------------------------------------------------------------------*
*&      Form  get_structure
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM GET_STRUCTURE.
  DATA : IDETAILS TYPE ABAP_COMPDESCR_TAB,
       XDETAILS TYPE ABAP_COMPDESCR.
  DATA : REF_TABLE_DES TYPE REF TO CL_ABAP_STRUCTDESCR.
* Get the structure of the table.
  REF_TABLE_DES ?=
      CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( WK_TABLE ).
  IDETAILS[] = REF_TABLE_DES->COMPONENTS[].
  LOOP AT IDETAILS INTO XDETAILS.
    CLEAR XFC.
    XFC-FIELDNAME = XDETAILS-NAME .
    XFC-DATATYPE = XDETAILS-TYPE_KIND.
    XFC-INTTYPE = XDETAILS-TYPE_KIND.
    XFC-INTLEN = XDETAILS-LENGTH.
    XFC-DECIMALS = XDETAILS-DECIMALS.
    APPEND XFC TO IFC.
*    if sy-tabix = 1 and xfc-fieldname = 'MANDT'.
**remove client field
*    else.
*      APPEND xfc TO ifc.
*    endif.
  ENDLOOP.

ENDFORM.                    "get_structure

*&--------------------------------------------------------------------*
*&      Form  create_dynamic_itab
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM CREATE_DYNAMIC_ITAB.
* Create dynamic internal table and assign to FS
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG  = IFC
      I_LENGTH_IN_BYTE = 'X' "must add, or field length may wrong
    IMPORTING
      EP_TABLE         = DY_TABLE.
  ASSIGN DY_TABLE->* TO <DYN_TABLE>.
* Create dynamic work area and assign to FS
  CREATE DATA DY_LINE LIKE LINE OF <DYN_TABLE>.
  ASSIGN DY_LINE->* TO <DYN_WA>.
ENDFORM.                    "create_dynamic_itab

*&--------------------------------------------------------------------*
*&      Form  get_data
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM GET_DATA.
* Select Data from table.
  SELECT * INTO TABLE <DYN_TABLE>
             FROM (WK_TABLE).
ENDFORM.                    "get_data
*Write out data from table.

*&--------------------------------------------------------------------*
*&      Form  write_out
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM WRITE_OUT.
  LOOP AT <DYN_TABLE> INTO <DYN_WA>.
    DO.
      ASSIGN COMPONENT  SY-INDEX
         OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
      IF SY-SUBRC <> 0.
        EXIT.
      ENDIF.
      IF SY-INDEX = 1.
        WRITE:/ <DYN_FIELD>.
      ELSE.
        WRITE: <DYN_FIELD>.
      ENDIF.
    ENDDO.
  ENDLOOP.
ENDFORM.                    "write_out
*&---------------------------------------------------------------------*
*&      Form  upload_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPLOAD_DATA .
  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      FILENAME                = WK_FILE
      FILETYPE                = 'DAT'
    TABLES
      DATA_TAB                = <DYN_TABLE>
    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
      GUI_REFUSE_FILETRANSFER = 8
      OTHERS                  = 9.
  IF SY-SUBRC <> 0.
    MESSAGE E000 WITH 'File does not exist'.
  ENDIF.
ENDFORM.                    " upload_data
*&---------------------------------------------------------------------*
*&      Form  update_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPDATE_DATA .
  DELETE (WK_TABLE) FROM TABLE <DYN_TABLE>.
  INSERT (WK_TABLE) FROM TABLE <DYN_TABLE> ACCEPTING DUPLICATE KEYS .
  IF SY-SUBRC = 0.
    MESSAGE S000 WITH 'Data has been uploaded to ' WK_TABLE.
  ELSEIF SY-SUBRC = 4.
    MESSAGE W000 WITH
    'There is duplicate record when upload data to ' WK_TABLE.
  ELSE.
    MESSAGE W000 WITH 'There is error when upload data to ' WK_TABLE.
  ENDIF.
ENDFORM.                    " update_data
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWNLOAD_DATA .
  DATA : N TYPE I,
         M TYPE I,
         P_FILENAME TYPE STRING.
  CONDENSE WK_FILE NO-GAPS.
  N = STRLEN( WK_FILE ).
  M = N - 4.
  CONCATENATE WK_FILE+0(M) 'D' '.txt' INTO WK_FILE.
  MOVE WK_FILE TO P_FILENAME.
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      FILENAME = P_FILENAME
      FILETYPE = 'DAT'
    TABLES
      DATA_TAB = <DYN_TABLE>.

  IF SY-SUBRC <> 0.
    MESSAGE E000 WITH 'DOWNLOAD FIALED!'.
  ELSE.
    MESSAGE S000 WITH WK_FILE.
  ENDIF.

ENDFORM.                    " DOWNLOAD_DATA
*&---------------------------------------------------------------------*
*&      Form  GET_CONFIRM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_CONFIRM .

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
     TITLEBAR                    = 'Import Notice'
*   DIAGNOSE_OBJECT             = ' '
     TEXT_QUESTION               = 'You will import data into database.Confirm it!'
     TEXT_BUTTON_1               = 'Yes'
*   ICON_BUTTON_1               = ' '
     TEXT_BUTTON_2               = 'No'
*   ICON_BUTTON_2               = ' '
*   DEFAULT_BUTTON              = '1'
*   DISPLAY_CANCEL_BUTTON       = 'X'
*   USERDEFINED_F1_HELP         = ' '
*   START_COLUMN                = 25
*   START_ROW                   = 6
*   POPUP_TYPE                  =
*   IV_QUICKINFO_BUTTON_1       = ' '
*   IV_QUICKINFO_BUTTON_2       = ' '
   IMPORTING
     ANSWER                      = J_ANSWER
* TABLES
*   PARAMETER                   =
   EXCEPTIONS
     TEXT_NOT_FOUND              = 1
     OTHERS                      = 2.
  IF SY-SUBRC <> 0.
    J_ANSWER = '2'.
  ENDIF.

ENDFORM.                    " GET_CONFIRM
*&---------------------------------------------------------------------*
*&      Form  CHECK_AUTH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_AUTH .
  IF SY-UNAME NE 'URJMIS8'.
    MESSAGE E000 WITH 'U have not authrization,pls ask xuesong!'.
  ELSE.
  ENDIF.
ENDFORM.                    " CHECK_AUTH

 

原创粉丝点击