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