*&---------------------------------------------------------------------*
*& Report ZUPLOAD_DOWNLOAD_PROGRAM
*&
*&---------------------------------------------------------------------*
************************************************************************
* Program Name : ZUPDOWNLOAD_PROGRAM *
* Description : Direct upload & download program (SAP ver4.6C)
* With GUI Status
* Screen : *
* Transaction code : *
* Updated Tables : *
* Input Parameters : *
* Return Codes : *
* Special Logic : *
* Includes : *
************************************************************************
* MODIFICATION LOG *
************************************************************************
* Date Rev # Programmer Description *
* --------- -------- ------------- ------------------------- *
************************************************************************
REPORT ZUPLOAD_DOWNLOAD_PROGRAM
NO STANDARD PAGE HEADING
LINE-SIZE 132.
************************************************************************
* INCLUDE PROGRAM *
************************************************************************
INCLUDE: <ICON>.
************************************************************************
* TABLES *
************************************************************************
TABLES: TRDIR, RLGRAP, D020S, SSCRFIELDS.
************************************************************************
* DATA *
************************************************************************
DATA: G_MSGTXT(100),
G_ANSWER, "Answer of Popup Window
G_FLAG_ERR(10).
*..... Text element
DATA: GT_TEXTPOOL LIKE TEXTPOOL OCCURS 0 WITH HEADER LINE.
*..... Message classes
DATA: G_ARBGB LIKE T100-ARBGB. "Message class
DATA: BEGIN OF GT_MESSAGE OCCURS 0,
ARBGB LIKE T100-ARBGB,
MSGNR LIKE T100-MSGNR,
TEXT LIKE T100-TEXT,
END OF GT_MESSAGE.
*..... Program & Menu
DATA: BEGIN OF GT_PROGTEXT OCCURS 0,
* PROG LIKE TRDIR-NAME,
TEXT(255),
END OF GT_PROGTEXT.
*..... Include program
DATA: BEGIN OF GT_INCLUDE OCCURS 10,
NAME LIKE TRDIR-NAME,
END OF GT_INCLUDE.
*..... Process log
DATA: BEGIN OF GT_LOG OCCURS 0,
STAT(5),
TYPE(10),
TEXT(80),
END OF GT_LOG.
************************************************************************
* CONSTANTS *
************************************************************************
CONSTANTS: C_STARS(64) VALUE '********************************'
& '********************************',
C_COMMENT1(64) VALUE '* THIS FILE IS GENERATED BY THE'
& ' SCREEN PAINTER. *',
C_COMMENT2(64) VALUE '* NEVER CHANGE IT MANUALLY, '
& 'PLEASE ! *',
C_DYNPRO(8) VALUE '%_DYNPRO',
C_HEADER(8) VALUE '%_HEADER',
C_PARAMS(8) VALUE '%_PARAMS',
C_DESCRIPT(13) VALUE '%_DESCRIPTION',
C_FIELDS(8) VALUE '%_FIELDS',
C_KREUZ(1) VALUE 'x',
C_FLOWLOGIC(11) VALUE '%_FLOWLOGIC',
C_HYPHEN(64) VALUE '--------------------------------'
& '--------------------------------',
C_TEXTCOM0(50) VALUE '*%%$$ T E X T '
& 'E L E M E N T S ',
C_TEXTCOM1(30) VALUE '*%%$$ R - Program titles',
C_TEXTCOM2(30) VALUE '*%%$$ T - List headers',
C_TEXTCOM3(30) VALUE '*%%$$ H - Column headers',
C_TEXTCOM4(30) VALUE '*%%$$ S - Selection texts',
C_TEXTCOM5(30) VALUE '*%%$$ I - Text symbols'.
************************************************************************
* MACRO *
************************************************************************
DEFINE GET_MENU.
LOOP AT &2.
CLEAR GT_PROGTEXT.
CONCATENATE &1 &2 INTO GT_PROGTEXT-TEXT.
APPEND GT_PROGTEXT.
ENDLOOP.
END-OF-DEFINITION.
DEFINE SET_MENU.
CLEAR &1.
WRITE GT_PROGTEXT+7 TO &1.
APPEND &1.
END-OF-DEFINITION.
************************************************************************
* SELECTION SCREEN ( SELECT-OPTIONS & PARAMETERS )
************************************************************************
*..... Upload
SELECTION-SCREEN BEGIN OF SCREEN 1001 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK BL3 WITH FRAME TITLE TT_OPT3.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS: P_RPROG RADIOBUTTON GROUP R01
USER-COMMAND REXE DEFAULT 'X'.
SELECTION-SCREEN COMMENT (10) TP_RPROG FOR FIELD P_RPROG.
SELECTION-SCREEN POSITION 30.
PARAMETERS: P_RSCR RADIOBUTTON GROUP R01.
SELECTION-SCREEN COMMENT (10) TP_RSCR FOR FIELD P_RSCR.
SELECTION-SCREEN POSITION 55.
PARAMETERS: P_RMENU RADIOBUTTON GROUP R01.
SELECTION-SCREEN COMMENT (10) TP_RMENU FOR FIELD P_RMENU.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BL3.
SELECTION-SCREEN BEGIN OF BLOCK BL4 WITH FRAME TITLE TT_OPT4.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(20) TP_UPATH FOR FIELD P_UPATH.
PARAMETERS P_UPATH LIKE RLGRAP-FILENAME. "OBLIGATORY
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(20) TP_UPROG FOR FIELD P_UPROG.
PARAMETERS: P_UPROG LIKE TRDIR-NAME, "OBLIGATORY.
P_UINCL AS CHECKBOX MODIF ID G01.
SELECTION-SCREEN COMMENT 70(10) TP_UINCL FOR FIELD P_UINCL.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(20) TP_USCR FOR FIELD P_UDNUM.
PARAMETERS: P_UDNUM LIKE D020S-DNUM MODIF ID G02.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN END OF BLOCK BL4.
SELECTION-SCREEN END OF SCREEN 1001.
*..... Download
SELECTION-SCREEN BEGIN OF SCREEN 1002 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TT_OPT1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(20) TP_DPROG FOR FIELD P_DPROG.
PARAMETERS: P_DPROG LIKE TRDIR-NAME. "OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(20) TP_DPATH FOR FIELD P_DPATH.
PARAMETERS P_DPATH LIKE RLGRAP-FILENAME "OBLIGATORY
DEFAULT 'C:\TEMP'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TT_OPT2.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(19) TP_DMPRG FOR FIELD P_DMPRG.
PARAMETERS: P_DMPRG AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(19) TP_DMSG FOR FIELD P_DMSG.
PARAMETERS: P_DMSG AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(19) TP_DINCL FOR FIELD P_DINCL.
PARAMETERS: P_DINCL AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(19) TP_DSCR FOR FIELD P_DSCR.
PARAMETERS: P_DSCR AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(19) TP_DMENU FOR FIELD P_DMENU.
PARAMETERS: P_DMENU AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BL2.
SELECTION-SCREEN END OF SCREEN 1002.
*..... Selection screen - include tabstrip contorl
SELECTION-SCREEN: BEGIN OF TABBED BLOCK TABB1 FOR 11 LINES,
TAB (20) TABS1 USER-COMMAND EXUP,
TAB (20) TABS2 USER-COMMAND EXDN,
END OF BLOCK TABB1.
************************************************************************
* INITIALIZATION
************************************************************************
INITIALIZATION.
PERFORM INITIALIZATION.
************************************************************************
* AT SELECTION-SCREEN ( ALL VARIATIONS ) *
************************************************************************
AT SELECTION-SCREEN OUTPUT.
PERFORM MODIFY_SCREEN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DPROG.
PERFORM F4_PROGRAM.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DPATH.
PERFORM F4_HELP_FOR_FOLDER
USING
'P_DPATH'
CHANGING
P_DPATH.
* PERFORM F4_FILEPATH USING '%DOWN' P_DPATH.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_UPATH.
PERFORM F4_FILEPATH USING '%UP' P_UPATH.
AT SELECTION-SCREEN.
PERFORM AT_SELECTION_SCREEN.
************************************************************************
* START-OF-SELECTION *
************************************************************************
START-OF-SELECTION.
PERFORM START_OF_SELECTION.
************************************************************************
* END-OF-SELECTION *
************************************************************************
END-OF-SELECTION.
PERFORM WRITE_LOG.
************************************************************************
* TOP-OF-PAGE *
************************************************************************
TOP-OF-PAGE.
PERFORM WRITE_HEADER.
************************************************************************
* TOP-OF-PAGE DURING LINE-SELECTION *
************************************************************************
* SY-LSIND = SY-LSIND - 1.
************************************************************************
* END-OF-PAGE *
************************************************************************
************************************************************************
* S U B R O U T I N E S *
* S U B R O U T I N E S *
* S U B R O U T I N E S *
************************************************************************
*&---------------------------------------------------------------------*
*& Form INITIALIZATION
*&---------------------------------------------------------------------*
FORM INITIALIZATION.
*..... Set text for selection screen
TT_OPT1 = 'General parameters'.
TT_OPT2 = 'Additional option'.
TT_OPT3 = 'Job choice'.
TT_OPT4 = 'General parameters'.
TP_DPROG = 'Original program'.
TP_DPATH = 'Download path'.
TP_DMPRG = 'Main program'.
TP_DMSG = 'Message class'.
TP_DINCL = 'Include progrm'.
TP_DSCR = 'Screen'.
TP_DMENU = 'Menu'.
TP_UPATH = 'Upload path & name'.
TP_UPROG = 'Target program'.
TP_USCR = 'Screen number'.
TP_UINCL = 'Include'.
TP_RPROG = 'Program'.
TP_RSCR = 'Screen'.
TP_RMENU = 'Menu'.
*..... Tabstrip
IF TABB1 IS INITIAL.
TABS1 = 'Upload'.
TABS2 = 'Download'.
TABB1-PROG = SY-REPID.
TABB1-DYNNR = 1001.
TABB1-ACTIVETAB = 'TABS1'.
ENDIF.
*.... Initialize variant
CLEAR: G_FLAG_ERR.
ENDFORM. "INITIALIZATION
*&---------------------------------------------------------------------*
*& Form F4_FILEPATH
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F4_FILEPATH USING FP_TYPE FP_PATH.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
* DEF_FILENAME = ' '
* DEF_PATH = ' '
MASK = ' ,*,*,*,*.'
MODE = '0'
* TITLE = ' '
IMPORTING
FILENAME = FP_PATH
* RC = '
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 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.
CHECK FP_TYPE EQ '%DOWN'.
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
EXPORTING
FULL_NAME = FP_PATH
IMPORTING
* STRIPPED_NAME =
FILE_PATH = FP_PATH
EXCEPTIONS
X_ERROR = 1
OTHERS = 2.
ENDFORM. " F4_FILEPATH
*&---------------------------------------------------------------------*
*& Form F4_HELP_FOR_FOLDER
*&---------------------------------------------------------------------*
FORM F4_HELP_FOR_FOLDER
USING
P_FIELDNAME
CHANGING
P_FOLDER.
DATA:
L_FOLDER TYPE STRING, " LIKE RLGRAP-FILENAME,
* OBJFILE TYPE REF TO CL_GUI_FRONTEND_SERVICES,
L_SELECTED_FOLDER TYPE STRING,
L_INITIAL_FOLDER TYPE STRING,
LT_DYNPFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.
LT_DYNPFIELDS-FIELDNAME = P_FIELDNAME.
APPEND LT_DYNPFIELDS.
CLEAR LT_DYNPFIELDS.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = LT_DYNPFIELDS.
READ TABLE LT_DYNPFIELDS
WITH KEY
FIELDNAME = P_FIELDNAME.
IF SY-SUBRC EQ 0.
L_FOLDER = LT_DYNPFIELDS-FIELDVALUE.
ENDIF.
* CREATE OBJECT OBJFILE.
IF NOT L_FOLDER IS INITIAL.
L_INITIAL_FOLDER = L_FOLDER.
ELSE.
* CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
* CHANGING
* DESKTOP_DIRECTORY = L_INITIAL_FOLDER
** EXCEPTIONS
** CNTL_ERROR = 1
** ERROR_NO_GUI = 2
** NOT_SUPPORTED_BY_GUI = 3
** OTHERS = 4
* .
* IF SY-SUBRC <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
ENDIF.
CALL METHOD CL_GUI_CFW=>FLUSH.
CALL METHOD CL_GUI_CFW=>UPDATE_VIEW.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
EXPORTING
* WINDOW_TITLE =
INITIAL_FOLDER = L_INITIAL_FOLDER
CHANGING
SELECTED_FOLDER = L_SELECTED_FOLDER
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* OBJFILE->DIRECTORY_BROWSE( EXPORTING INITIAL_FOLDER = L_INITIAL_FOLDER
* CHANGING SELECTED_FOLDER = L_SELECTED_FOLDER
* EXCEPTIONS CNTL_ERROR = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3 ).
IF SY-SUBRC = 0.
P_FOLDER = L_SELECTED_FOLDER.
ELSE.
WRITE: / 'An error has occured picking a folder'.
ENDIF.
ENDFORM. "F4_HELP_FOR_FOLDER
*&---------------------------------------------------------------------*
*& Form EXEC_DOWNLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXEC_DOWNLOAD.
DATA: L_DEFAULT, L_TEXT1(70), L_TEXT2(70), L_TITLE(70).
PERFORM CHECK_REQUIRED_FIELD USING '%DOWN'.
CHECK G_FLAG_ERR IS INITIAL.
L_DEFAULT = 'N'.
L_TEXT1 = 'Do you want to download the program?'.
L_TITLE = 'Notification'.
PERFORM POPUP_TO_CONFIRM USING L_DEFAULT L_TEXT1 L_TEXT2 L_TITLE
G_ANSWER.
CHECK G_ANSWER EQ 'J'.
IF P_DMPRG EQ 'X'.
PERFORM DOWN_MAIN_PROG.
ENDIF.
IF P_DINCL EQ 'X'.
PERFORM DOWN_INCLUDE_PROG.
ENDIF.
IF P_DSCR EQ 'X'.
PERFORM DOWN_SCREEN.
ENDIF.
IF P_DMENU EQ 'X'.
PERFORM DOWN_MENU.
ENDIF.
IF P_DMSG EQ 'X'.
PERFORM DOWN_MESSAGE.
ENDIF.
ENDFORM. " EXEC_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form DISPLAY_STATUS
*&---------------------------------------------------------------------*
* ???? ??? ??
*----------------------------------------------------------------------*
* --> FP_MSGTXT : ???
* --> FP_SECONDS : Delay time
*----------------------------------------------------------------------*
FORM DISPLAY_STATUS USING FP_MSGTXT FP_SECONDS.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 0
TEXT = FP_MSGTXT
EXCEPTIONS
OTHERS = 1.
CHECK FP_SECONDS GT 0.
CALL FUNCTION 'RZL_SLEEP'
EXPORTING
SECONDS = FP_SECONDS
EXCEPTIONS
ARGUMENT_ERROR = 1
OTHERS = 2.
ENDFORM. " DISPLAY_STATUS
*&---------------------------------------------------------------------*
*& Form DOWN_MAIN_PROG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWN_MAIN_PROG.
DATA: L_PATH LIKE RLGRAP-FILENAME.
DATA: L_DEFAULT, L_TEXT1(70), L_TEXT2(70), L_TITLE(70).
CLEAR: GT_PROGTEXT, GT_PROGTEXT[].
G_MSGTXT = 'Processing please wait...Main program'.
PERFORM DISPLAY_STATUS USING G_MSGTXT 0.
*..... Check exist
SELECT SINGLE NAME INTO TRDIR-NAME
FROM TRDIR
WHERE NAME EQ P_DPROG
AND SUBC IN ('1', 'M', 'F').
IF SY-SUBRC NE 0.
CONCATENATE 'Program' P_DPROG 'does not exist.'
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%ERR' '%MPRG' G_MSGTXT.
STOP.
ENDIF.
*..... Read the program contents into memory
READ REPORT P_DPROG INTO GT_PROGTEXT.
IF SY-SUBRC NE 0.
CONCATENATE 'Import error of' P_DPROG 'program!!'
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%ERR' '%MPRG' G_MSGTXT.
STOP.
ENDIF.
*..... Get text element
PERFORM ADD_TEXT_ELEMENT USING P_DPROG.
*..... Download & append log
CONCATENATE P_DPATH '\' P_DPROG '.TXT'
INTO L_PATH.
PERFORM WS_DOWNLOAD TABLES GT_PROGTEXT USING L_PATH G_FLAG_ERR.
IF G_FLAG_ERR IS INITIAL.
CONCATENATE P_DPROG '.TXT' INTO G_MSGTXT.
PERFORM APPEND_LOG USING '%OK' '%MPRG' G_MSGTXT.
ELSE.
PERFORM APPEND_LOG USING '%ERR' '%MPRG' G_MSGTXT.
ENDIF.
ENDFORM. " DOWN_MAIN_PROG
*&---------------------------------------------------------------------*
*& Form DOWN_INCLUDE_PROG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWN_INCLUDE_PROG.
DATA: L_PATH LIKE RLGRAP-FILENAME.
G_MSGTXT = 'Processing please wait...Include program'.
PERFORM DISPLAY_STATUS USING G_MSGTXT 0.
*..... Check exist
PERFORM GET_INCLUDE_PROGRAM TABLES GT_INCLUDE
USING P_DPROG.
DESCRIBE TABLE GT_INCLUDE LINES SY-TFILL.
IF SY-TFILL EQ 0.
G_MSGTXT = 'Include program does not exist'.
PERFORM APPEND_LOG USING '%ERR' '%IPRG' G_MSGTXT.
EXIT.
ENDIF.
LOOP AT GT_INCLUDE.
CLEAR: GT_PROGTEXT, GT_PROGTEXT[].
*..... Read the program contents into memory
READ REPORT GT_INCLUDE-NAME INTO GT_PROGTEXT.
IF SY-SUBRC NE 0.
CONCATENATE 'Import error of' GT_INCLUDE-NAME 'program!!'
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%ERR' '%IPRG' G_MSGTXT.
CONTINUE.
ENDIF.
*..... Get text element
PERFORM ADD_TEXT_ELEMENT USING GT_INCLUDE-NAME.
*..... Download & append log
CONCATENATE P_DPATH '\' GT_INCLUDE-NAME '.TXT'
INTO L_PATH.
PERFORM WS_DOWNLOAD TABLES GT_PROGTEXT USING L_PATH G_FLAG_ERR.
IF G_FLAG_ERR IS INITIAL.
CONCATENATE GT_INCLUDE-NAME '.TXT' INTO G_MSGTXT.
PERFORM APPEND_LOG USING '%OK' '%IPRG' G_MSGTXT.
ELSE.
PERFORM APPEND_LOG USING '%ERR' '%IPRG' G_MSGTXT.
ENDIF.
ENDLOOP.
ENDFORM. " DOWN_INCLUDE_PROG
*&---------------------------------------------------------------------*
*& Form DOWN_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWN_SCREEN.
DATA: L_PATH LIKE RLGRAP-FILENAME,
LT_D020S LIKE D020S OCCURS 0 WITH HEADER LINE.
DATA: L_DTXT LIKE D020T-DTXT,
L_H LIKE D020S,
LT_F LIKE D021S OCCURS 10,
LT_E LIKE D022S OCCURS 10,
LT_M LIKE D023S OCCURS 10.
G_MSGTXT = 'Processing please wait...Screen'.
PERFORM DISPLAY_STATUS USING G_MSGTXT 0.
*..... Check exist
SELECT * INTO TABLE LT_D020S
FROM D020S
WHERE PROG EQ P_DPROG
AND TYPE NOT IN ('S', 'W', 'J'). "Selection screen
IF SY-SUBRC NE 0.
G_MSGTXT = 'Screen does not exist'.
PERFORM APPEND_LOG USING '%ERR' '%SCR' G_MSGTXT.
EXIT.
ENDIF.
LOOP AT LT_D020S.
CLEAR: L_DTXT, L_H, LT_F, LT_E, LT_M, LT_F[], LT_E[], LT_M[].
*..... Import the screen contents
CALL FUNCTION 'RS_SCREEN_IMPORT'
EXPORTING
DYNNR = LT_D020S-DNUM
PROGNAME = LT_D020S-PROG
IMPORTING
DYNPRO_TEXT = L_DTXT
H_IMPORT = L_H
NEW_MASTER_LANGUAGE = SY-LANGU
TABLES
E_G = LT_E
F_G = LT_F
M_G = LT_M
EXCEPTIONS
NOT_EXECUTED = 1
NOT_FOUND = 2
OTHERS = 3.
IF SY-SUBRC NE 0.
CONCATENATE 'Import error of' LT_D020S-PROG LT_D020S-DNUM
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%ERR' '%SCR' G_MSGTXT.
CONTINUE.
ENDIF.
*..... Download & append log
CONCATENATE P_DPATH '\' LT_D020S-PROG '_' LT_D020S-DNUM '.TXT'
INTO L_PATH.
PERFORM RS_DYNPRO_DOWNLOAD TABLES LT_F LT_E LT_M
USING L_H L_DTXT L_PATH.
IF G_FLAG_ERR IS INITIAL.
CONCATENATE LT_D020S-PROG '_' LT_D020S-DNUM '.TXT'
INTO G_MSGTXT.
PERFORM APPEND_LOG USING '%OK' '%SCR' G_MSGTXT.
ELSE.
PERFORM APPEND_LOG USING '%ERR' '%SCR' G_MSGTXT.
ENDIF.
* CALL FUNCTION 'RS_DYNPRO_DOWNLOAD'
* EXPORTING
* HEADER = L_H
* DESCRIPT = L_DTXT
* FILE = L_PATH
* TABLES
* FIELDS = LT_F
* FLOWLOGIC = LT_E
* PARAMS = LT_M
* EXCEPTIONS
* INVALID_FILESIZE = 1
* INVALID_TABLE_WIDTH = 2
* INVALID_TYPE = 3
* NO_BATCH = 4
* UNKNOWN_ERROR = 5
* NOT_EXECUTED = 6
* OTHERS = 7.
*
* IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
ENDLOOP.
ENDFORM. " DOWN_SCREEN
*&---------------------------------------------------------------------*
*& Form EXEC_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXEC_UPLOAD.
DATA: L_PATH LIKE RLGRAP-FILENAME.
DATA: L_DEFAULT, L_TEXT1(70), L_TEXT2(70), L_TITLE(70).
PERFORM CHECK_REQUIRED_FIELD USING '%UP'.
CHECK G_FLAG_ERR IS INITIAL.
L_DEFAULT = 'N'.
L_TEXT1 = 'Do you want to upload the program?'.
L_TITLE = 'Notification'.
PERFORM POPUP_TO_CONFIRM USING L_DEFAULT L_TEXT1 L_TEXT2 L_TITLE
G_ANSWER.
CHECK G_ANSWER EQ 'J'.
CASE 'X'.
WHEN P_RPROG.
IF P_UINCL EQ 'X'.
PERFORM UP_INCLUDE_PROG.
ELSE.
PERFORM UP_MAIN_PROG.
ENDIF.
WHEN P_RSCR.
PERFORM UP_SCREEN.
WHEN P_RMENU.
PERFORM UP_MENU.
ENDCASE.
ENDFORM. " EXEC_UPLOAD
*&---------------------------------------------------------------------*
*& Form ADD_TEXT_ELEMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_TEXT_ELEMENT USING FP_PROG.
CLEAR: GT_TEXTPOOL, GT_TEXTPOOL[].
READ TEXTPOOL FP_PROG INTO GT_TEXTPOOL LANGUAGE SY-LANGU.
CHECK SY-SUBRC EQ 0.
SORT GT_TEXTPOOL BY ID KEY.
LOOP AT GT_TEXTPOOL.
AT FIRST.
APPEND INITIAL LINE TO GT_PROGTEXT.
CONCATENATE '*%%$$' C_STARS INTO GT_PROGTEXT.
APPEND GT_PROGTEXT.
GT_PROGTEXT = C_TEXTCOM0. APPEND GT_PROGTEXT.
CONCATENATE '*%%$$' C_HYPHEN INTO GT_PROGTEXT.
APPEND GT_PROGTEXT.
GT_PROGTEXT = C_TEXTCOM1. APPEND GT_PROGTEXT.
GT_PROGTEXT = C_TEXTCOM2. APPEND GT_PROGTEXT.
GT_PROGTEXT = C_TEXTCOM3. APPEND GT_PROGTEXT.
GT_PROGTEXT = C_TEXTCOM4. APPEND GT_PROGTEXT.
GT_PROGTEXT = C_TEXTCOM5. APPEND GT_PROGTEXT.
CONCATENATE '*%%$$' C_STARS INTO GT_PROGTEXT.
APPEND GT_PROGTEXT.
ENDAT.
CLEAR: GT_PROGTEXT.
* SHIFT GT_textpool BY 05 PLACES RIGHT.
* GT_textpool(05) = '*%%$$'.
* GT_PROGTEXT = GT_textpool.
WRITE: '*%%$$' TO GT_PROGTEXT-TEXT,
GT_TEXTPOOL+0 TO GT_PROGTEXT-TEXT+5.
APPEND GT_PROGTEXT.
* AT LAST.
* CONCATENATE '*%%$$' C_STARS INTO GT_PROGTEXT.
* APPEND GT_PROGTEXT.
* ENDAT.
ENDLOOP.
ENDFORM. " ADD_TEXT_ELEMENT
*&---------------------------------------------------------------------*
*& Form FIND_MESSAGE_CLASS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FIND_MESSAGE_CLASS.
DATA: L_HEAD(100),
L_TAIL(100).
DATA: LT_MSG(100) OCCURS 0 WITH HEADER LINE.
DATA: LT_KW(30) OCCURS 0 WITH HEADER LINE,
LT_TK LIKE STOKEX OCCURS 0 WITH HEADER LINE,
LT_STM LIKE SSTMNT OCCURS 0 WITH HEADER LINE.
LOOP AT GT_INCLUDE.
CLEAR: GT_PROGTEXT, GT_PROGTEXT[].
*..... Read the program contents into memory
READ REPORT GT_INCLUDE-NAME INTO GT_PROGTEXT.
IF SY-SUBRC NE 0.
CONCATENATE 'Import error of' GT_INCLUDE-NAME 'program!!'
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%ERR' '%MSG' G_MSGTXT.
CONTINUE.
ENDIF.
*..... Find the main message class
IF G_ARBGB IS INITIAL.
LOOP AT GT_PROGTEXT
WHERE NOT ( TEXT IS INITIAL OR TEXT(1) EQ '*' ).
TRANSLATE GT_PROGTEXT TO UPPER CASE.
IF GT_PROGTEXT CS 'MESSAGE-ID'.
SPLIT GT_PROGTEXT AT 'MESSAGE-ID' INTO L_HEAD L_TAIL.
TRANSLATE L_TAIL USING '. '.
SHIFT L_TAIL LEFT DELETING LEADING SPACE.
SPLIT L_TAIL AT SPACE INTO L_HEAD L_TAIL.
CONDENSE L_HEAD.
G_ARBGB = L_HEAD.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
*..... Find the messages
CLEAR: LT_KW, LT_KW[].
LT_KW = 'MESSAGE'. APPEND LT_KW.
LT_KW = 'message'. APPEND LT_KW.
CLEAR: LT_TK, LT_STM, LT_TK[], LT_STM[].
SCAN ABAP-SOURCE GT_PROGTEXT
TOKENS INTO LT_TK
STATEMENTS INTO LT_STM
KEYWORDS FROM LT_KW WITH ANALYSIS.
LOOP AT LT_STM.
ADD 1 TO LT_STM-FROM.
READ TABLE LT_TK INDEX LT_STM-FROM.
LT_MSG = LT_TK-STR.
COLLECT LT_MSG.
ENDLOOP.
LOOP AT LT_MSG.
CHECK LT_MSG NE 'ID'.
CLEAR: GT_MESSAGE.
TRANSLATE LT_MSG TO UPPER CASE.
SHIFT LT_MSG LEFT.
TRANSLATE LT_MSG USING '( ) '.
CONDENSE LT_MSG.
SPLIT LT_MSG AT SPACE INTO GT_MESSAGE-MSGNR GT_MESSAGE-ARBGB.
IF GT_MESSAGE-ARBGB IS INITIAL.
GT_MESSAGE-ARBGB = G_ARBGB.
ENDIF.
COLLECT GT_MESSAGE.
ENDLOOP.
ENDLOOP.
*..... Set message class
LOOP AT GT_MESSAGE WHERE ARBGB IS INITIAL.
GT_MESSAGE-ARBGB = G_ARBGB.
MODIFY GT_MESSAGE.
ENDLOOP.
DELETE GT_MESSAGE WHERE ARBGB(1) NA 'YZ'.
DELETE ADJACENT DUPLICATES FROM GT_MESSAGE COMPARING ARBGB MSGNR.
ENDFORM. " FIND_MESSAGE_CLASS
*&---------------------------------------------------------------------*
*& Form POPUP_TO_CONFIRM
*&---------------------------------------------------------------------*
* Display popup window & choose button
*----------------------------------------------------------------------*
* <-- FP_ANSWER : Return of answer
*----------------------------------------------------------------------*
FORM POPUP_TO_CONFIRM USING FP_DEFAULT FP_TEXT1 FP_TEXT2 FP_TITEL
FP_ANSWER.
CLEAR FP_ANSWER.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
DEFAULTOPTION = FP_DEFAULT
TEXTLINE1 = FP_TEXT1
TEXTLINE2 = FP_TEXT2
TITEL = FP_TITEL
CANCEL_DISPLAY = ''
IMPORTING
ANSWER = FP_ANSWER.
ENDFORM. " POPUP_TO_CONFIRM
*&---------------------------------------------------------------------*
*& Form WS_DOWNLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_PROGTEXT text
* -->P_L_PATH text
*----------------------------------------------------------------------*
FORM WS_DOWNLOAD TABLES FT_TEXT STRUCTURE GT_PROGTEXT
USING FP_PATH FP_FLAG.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = FP_PATH
FILETYPE = 'ASC'
TABLES
DATA_TAB = FT_TEXT
EXCEPTIONS
INVALID_FILESIZE = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
CUSTOMER_ERROR = 7
OTHERS = 8.
IF SY-SUBRC EQ 0.
CLEAR: FP_FLAG.
ELSE.
FP_FLAG = '%ERR'.
PERFORM MESSAGE_TEXT_BUILD
USING SY-MSGID SY-MSGNO SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
G_MSGTXT.
ENDIF.
ENDFORM. " WS_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form F4_PROGRAM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F4_PROGRAM.
DATA: LT_DYNPREAD LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.
LT_DYNPREAD-FIELDNAME = 'P_DPROG'.
APPEND LT_DYNPREAD.
PERFORM DYNP_VALUES_READ TABLES LT_DYNPREAD USING P_DPROG.
CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4'
EXPORTING
OBJECT_TYPE = 'PROG'
OBJECT_NAME = P_DPROG
SUPPRESS_SELECTION = ' '
IMPORTING
OBJECT_NAME_SELECTED = P_DPROG
EXCEPTIONS
CANCEL = 01.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " F4_PROGRAM
*&---------------------------------------------------------------------*
*& Form DYNP_VALUES_READ
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_DPROG text
*----------------------------------------------------------------------*
FORM DYNP_VALUES_READ TABLES FT_DYNPREAD STRUCTURE DYNPREAD
USING FP_VALUE.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = FT_DYNPREAD
EXCEPTIONS
OTHERS.
CHECK SY-SUBRC EQ 0.
READ TABLE FT_DYNPREAD INDEX 1.
FP_VALUE = FT_DYNPREAD-FIELDVALUE.
ENDFORM. " DYNP_VALUES_READ
*&---------------------------------------------------------------------*
*& Form DOWN_MENU
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWN_MENU.
DATA: L_PATH LIKE RLGRAP-FILENAME.
DATA: L_ADM LIKE RSMPE_ADM,
LT_STA LIKE RSMPE_STAT OCCURS 10 WITH HEADER LINE,
LT_FUN LIKE RSMPE_FUNT OCCURS 10 WITH HEADER LINE,
LT_MEN LIKE RSMPE_MEN OCCURS 10 WITH HEADER LINE,
LT_MTX LIKE RSMPE_MNLT OCCURS 10 WITH HEADER LINE,
LT_ACT LIKE RSMPE_ACT OCCURS 10 WITH HEADER LINE,
LT_BUT LIKE RSMPE_BUT OCCURS 10 WITH HEADER LINE,
LT_PFK LIKE RSMPE_PFK OCCURS 10 WITH HEADER LINE,
LT_SET LIKE RSMPE_STAF OCCURS 10 WITH HEADER LINE,
LT_DOC LIKE RSMPE_ATRT OCCURS 10 WITH HEADER LINE,
LT_TIT LIKE RSMPE_TITT OCCURS 10 WITH HEADER LINE,
LT_BIV LIKE RSMPE_BUTS OCCURS 10 WITH HEADER LINE.
G_MSGTXT = 'Processing please wait...Menu'.
PERFORM DISPLAY_STATUS USING G_MSGTXT 0.
*..... Check exist & Import
CALL FUNCTION 'RS_CUA_INTERNAL_FETCH'
EXPORTING
PROGRAM = P_DPROG
LANGUAGE = SY-LANGU
IMPORTING
ADM = L_ADM
TABLES
STA = LT_STA
FUN = LT_FUN
MEN = LT_MEN
MTX = LT_MTX
ACT = LT_ACT
BUT = LT_BUT
PFK = LT_PFK
SET = LT_SET
DOC = LT_DOC
TIT = LT_TIT
BIV = LT_BIV
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC NE 0 OR
L_ADM IS INITIAL.
G_MSGTXT = 'Menu does not exist'.
PERFORM APPEND_LOG USING '%ERR' '%MENU' G_MSGTXT.
EXIT.
ENDIF.
*..... Download & append log
CLEAR: GT_PROGTEXT, GT_PROGTEXT[].
CONCATENATE '%%ADM%%' L_ADM INTO GT_PROGTEXT-TEXT.
APPEND GT_PROGTEXT.
GET_MENU: '%%STA%%' LT_STA,
'%%FUN%%' LT_FUN,
'%%MEN%%' LT_MEN,
'%%MTX%%' LT_MTX,
'%%ACT%%' LT_ACT,
'%%BUT%%' LT_BUT,
'%%PFK%%' LT_PFK,
'%%SET%%' LT_SET,
'%%DOC%%' LT_DOC,
'%%TIT%%' LT_TIT,
'%%BIV%%' LT_BIV.
CONCATENATE P_DPATH '\' P_DPROG '_MENU.TXT'
INTO L_PATH.
PERFORM WS_DOWNLOAD TABLES GT_PROGTEXT USING L_PATH G_FLAG_ERR.
IF G_FLAG_ERR IS INITIAL.
CONCATENATE P_DPROG '_MENU.TXT' INTO G_MSGTXT.
PERFORM APPEND_LOG USING '%OK' '%MENU' G_MSGTXT.
ELSE.
PERFORM APPEND_LOG USING '%ERR' '%MENU' G_MSGTXT.
ENDIF.
ENDFORM. " DOWN_MENU
*&---------------------------------------------------------------------*
*& Form GET_INCLUDE_PROGRAM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_INCLUDE text
*----------------------------------------------------------------------*
FORM GET_INCLUDE_PROGRAM TABLES FT_INCLUDE STRUCTURE GT_INCLUDE
USING FP_PROG.
CALL FUNCTION 'GET_INCLUDETAB'
EXPORTING
PROGNAME = FP_PROG
TABLES
INCLTAB = FT_INCLUDE
EXCEPTIONS
OTHERS = 1.
CHECK SY-SUBRC EQ 0.
DELETE FT_INCLUDE WHERE NOT ( NAME(1) EQ 'Z' OR
NAME(1) EQ 'Y' OR
NAME(2) EQ 'MZ' OR
NAME(2) EQ 'MY' OR
NAME(2) EQ 'LZ' OR
NAME(2) EQ 'LY' )
OR ( NAME(1) EQ '<' ).
ENDFORM. " GET_INCLUDE_PROGRAM
*&---------------------------------------------------------------------*
*& Form UP_MAIN_PROG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UP_MAIN_PROG.
DATA: L_DEFAULT, L_TEXT1(70), L_TEXT2(70), L_TITLE(70).
G_MSGTXT = 'Processing please wait...Main program'.
PERFORM DISPLAY_STATUS USING G_MSGTXT 0.
*..... Check exist
SELECT SINGLE NAME INTO TRDIR-NAME
FROM TRDIR
WHERE NAME EQ P_UPROG.
IF SY-SUBRC EQ 0.
L_DEFAULT = 'N'.
L_TEXT2 = 'Do you want to overwrite?'.
L_TITLE = 'Notification'.
CONCATENATE 'Program' P_UPROG 'already exist.'
INTO L_TEXT1 SEPARATED BY SPACE.
PERFORM POPUP_TO_CONFIRM USING L_DEFAULT L_TEXT1 L_TEXT2 L_TITLE
G_ANSWER.
IF G_ANSWER NE 'J'.
STOP.
ENDIF.
ENDIF.
*..... Upload from local file
PERFORM WS_UPLOAD TABLES GT_PROGTEXT USING P_UPATH G_FLAG_ERR.
IF NOT ( G_FLAG_ERR IS INITIAL ).
PERFORM APPEND_LOG USING '%ERR' '%MPRG' G_MSGTXT.
STOP.
ENDIF.
*..... Delete text element in main program
PERFORM DEL_TEXT_ELEMENT TABLES GT_PROGTEXT.
*..... Create program
INSERT REPORT P_UPROG FROM GT_PROGTEXT.
IF SY-SUBRC EQ 0.
INSERT TEXTPOOL P_UPROG FROM GT_TEXTPOOL LANGUAGE SY-LANGU.
IF SY-SUBRC EQ 0.
PERFORM APPEND_LOG USING '%OK' '%MPRG' P_UPROG.
ELSE.
CONCATENATE P_UPROG 'Insert error of text element'
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%WAR' '%MPRG' G_MSGTXT.
ENDIF.
ELSE.
PERFORM MESSAGE_TEXT_BUILD
USING SY-MSGID SY-MSGNO SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
G_MSGTXT.
PERFORM APPEND_LOG USING '%ERR' '%MPRG' G_MSGTXT.
ENDIF.
ENDFORM. " UP_MAIN_PROG
*&---------------------------------------------------------------------*
*& Form DEL_TEXT_ELEMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_PROGTEXT text
*----------------------------------------------------------------------*
FORM DEL_TEXT_ELEMENT TABLES FT_PROGTEXT STRUCTURE GT_PROGTEXT.
CLEAR: GT_TEXTPOOL, GT_TEXTPOOL[].
LOOP AT FT_PROGTEXT WHERE TEXT(5) EQ '*%%$$'.
IF '*-' NS FT_PROGTEXT-TEXT+5(1).
CLEAR: GT_TEXTPOOL.
GT_TEXTPOOL = FT_PROGTEXT-TEXT+5.
APPEND GT_TEXTPOOL.
ENDIF.
DELETE FT_PROGTEXT.
ENDLOOP.
ENDFORM. " DEL_TEXT_ELEMENT
*&---------------------------------------------------------------------*
*& Form UP_INCLUDE_PROG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UP_INCLUDE_PROG.
DATA: L_DEFAULT, L_TEXT1(70), L_TEXT2(70), L_TITLE(70).
G_MSGTXT = 'Processing please wait...Include program'.
PERFORM DISPLAY_STATUS USING G_MSGTXT 0.
*..... Check exist
SELECT SINGLE NAME INTO TRDIR-NAME
FROM TRDIR
WHERE NAME EQ P_UPROG.
IF SY-SUBRC EQ 0.
L_DEFAULT = 'N'.
L_TEXT2 = 'Do you want to overwrite?'.
L_TITLE = 'Notification'.
CONCATENATE 'Program' P_UPROG 'already exist.'
INTO L_TEXT1 SEPARATED BY SPACE.
PERFORM POPUP_TO_CONFIRM USING L_DEFAULT L_TEXT1 L_TEXT2 L_TITLE
G_ANSWER.
IF G_ANSWER NE 'J'.
STOP.
ENDIF.
ENDIF.
*..... Upload from local file
PERFORM WS_UPLOAD TABLES GT_PROGTEXT USING P_UPATH G_FLAG_ERR.
IF NOT ( G_FLAG_ERR IS INITIAL ).
PERFORM APPEND_LOG USING '%ERR' '%IPRG' G_MSGTXT.
STOP.
ENDIF.
*..... Delete text element in main program
PERFORM DEL_TEXT_ELEMENT TABLES GT_PROGTEXT.
*..... Create program & Change program type
INSERT REPORT P_UPROG FROM GT_PROGTEXT.
IF SY-SUBRC EQ 0.
EXEC SQL.
UPDATE reposrc SET subc = 'I'
WHERE progname = p_uprog
AND r3state = 'A'.
ENDEXEC.
IF SY-SUBRC EQ 0.
INSERT TEXTPOOL P_UPROG FROM GT_TEXTPOOL LANGUAGE SY-LANGU.
IF SY-SUBRC EQ 0.
PERFORM APPEND_LOG USING '%OK' '%IPRG' P_UPROG.
ELSE.
CONCATENATE P_UPROG 'Insert error of text element'
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%WAR' '%IPRG' G_MSGTXT.
ENDIF.
ELSE.
CONCATENATE P_UPROG 'Update error of program type'
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%WAR' '%IPRG' G_MSGTXT.
ENDIF.
ELSE.
PERFORM MESSAGE_TEXT_BUILD
USING SY-MSGID SY-MSGNO SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
G_MSGTXT.
PERFORM APPEND_LOG USING '%ERR' '%IPRG' G_MSGTXT.
ENDIF.
ENDFORM. " UP_INCLUDE_PROG
*&---------------------------------------------------------------------*
*& Form UP_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UP_SCREEN.
DATA: L_DEFAULT, L_TEXT1(70), L_TEXT2(70), L_TITLE(70).
DATA: L_DTXT LIKE D020T-DTXT,
L_H LIKE D020S,
LT_F LIKE D021S OCCURS 10,
LT_E LIKE D022S OCCURS 10,
LT_M LIKE D023S OCCURS 10.
G_MSGTXT = 'Processing please wait...Screen'.
PERFORM DISPLAY_STATUS USING G_MSGTXT 0.
*..... Check exist
UNPACK P_UDNUM TO P_UDNUM.
SELECT SINGLE NAME INTO TRDIR-NAME
FROM TRDIR
WHERE NAME EQ P_UPROG
AND SUBC IN ('1', 'M').
IF SY-SUBRC NE 0.
CONCATENATE 'Program' P_UPROG 'does not exist.'
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%ERR' '%SCR' G_MSGTXT.
STOP.
ENDIF.
SELECT SINGLE PROG DNUM
INTO (D020S-PROG, D020S-DNUM)
FROM D020S
WHERE PROG EQ P_UPROG
AND DNUM EQ P_UDNUM.
IF SY-SUBRC EQ 0.
L_DEFAULT = 'N'.
L_TEXT2 = 'Do you want to overwrite?'.
L_TITLE = 'Notification'.
CONCATENATE 'Screen' P_UPROG P_UDNUM 'already exist.'
INTO L_TEXT1 SEPARATED BY SPACE.
PERFORM POPUP_TO_CONFIRM USING L_DEFAULT L_TEXT1 L_TEXT2 L_TITLE
G_ANSWER.
IF G_ANSWER NE 'J'.
STOP.
ENDIF.
ENDIF.
*..... Upload from local file
PERFORM RS_DYNPRO_UPLOAD TABLES LT_F LT_E LT_M
USING L_H L_DTXT P_UPATH P_UPROG P_UDNUM.
* CALL FUNCTION 'RS_DYNPRO_UPLOAD'
* EXPORTING
* FILE = P_UPATH
* IMPORTING
* HEADER = L_H
* DESCRIPT = L_DTXT
* TABLES
* FIELDS = LT_F
* FLOWLOGIC = LT_E
* PARAMS = LT_M
* CHANGING
* PROGRAM = P_USPROG
* DYNNR = P_USDNUM
* EXCEPTIONS
* INVALID_FILE = 1
* NOT_EXECUTED = 2
* WRONG_DYNPRO_NAME = 3
* INVALID_RELEASE = 4
* DAMAGED = 5
* OTHERS = 6.
*
* IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
*..... Create screen
CALL FUNCTION 'RS_SCREEN_EXPORT'
EXPORTING
DYNNR = P_UDNUM
DYNPRO_TEXT = L_DTXT
H_EXPORT = L_H
PROGNAME = P_UPROG
DYNPRO_LANGUAGE = SY-LANGU
TABLES
E_G = LT_E
F_G = LT_F
M_G = LT_M
EXCEPTIONS
CANCELED_BY_USER = 1
OTHERS = 2.
IF G_FLAG_ERR IS INITIAL.
CONCATENATE P_UPROG P_UDNUM
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%OK' '%SCR' G_MSGTXT.
ELSE.
PERFORM MESSAGE_TEXT_BUILD
USING SY-MSGID SY-MSGNO SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
G_MSGTXT.
PERFORM APPEND_LOG USING '%ERR' '%SCR' G_MSGTXT.
ENDIF.
ENDFORM. " UP_SCREEN
*&---------------------------------------------------------------------*
*& Form UP_MENU
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UP_MENU.
DATA: L_TRKEY LIKE TRKEY,
L_ADM LIKE RSMPE_ADM,
LT_STA LIKE RSMPE_STAT OCCURS 10 WITH HEADER LINE,
LT_FUN LIKE RSMPE_FUNT OCCURS 10 WITH HEADER LINE,
LT_MEN LIKE RSMPE_MEN OCCURS 10 WITH HEADER LINE,
LT_MTX LIKE RSMPE_MNLT OCCURS 10 WITH HEADER LINE,
LT_ACT LIKE RSMPE_ACT OCCURS 10 WITH HEADER LINE,
LT_BUT LIKE RSMPE_BUT OCCURS 10 WITH HEADER LINE,
LT_PFK LIKE RSMPE_PFK OCCURS 10 WITH HEADER LINE,
LT_SET LIKE RSMPE_STAF OCCURS 10 WITH HEADER LINE,
LT_DOC LIKE RSMPE_ATRT OCCURS 10 WITH HEADER LINE,
LT_TIT LIKE RSMPE_TITT OCCURS 10 WITH HEADER LINE,
LT_BIV LIKE RSMPE_BUTS OCCURS 10 WITH HEADER LINE.
G_MSGTXT = 'Processing please wait...Menu'.
PERFORM DISPLAY_STATUS USING G_MSGTXT 0.
*..... Check exist
SELECT SINGLE NAME INTO TRDIR-NAME
FROM TRDIR
WHERE NAME EQ P_UPROG
AND SUBC IN ('1', 'M').
IF SY-SUBRC NE 0.
CONCATENATE 'Program' P_UPROG 'does not exist.'
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%ERR' '%MENU' G_MSGTXT.
STOP.
ENDIF.
*..... Upload from local file
PERFORM WS_UPLOAD TABLES GT_PROGTEXT USING P_UPATH G_FLAG_ERR.
IF NOT ( G_FLAG_ERR IS INITIAL ).
PERFORM APPEND_LOG USING '%ERR' '%MENU' G_MSGTXT.
STOP.
ENDIF.
LOOP AT GT_PROGTEXT.
CASE GT_PROGTEXT(7).
WHEN '%%ADM%%'. WRITE GT_PROGTEXT+7 TO L_ADM.
WHEN '%%STA%%'. SET_MENU LT_STA.
WHEN '%%FUN%%'. SET_MENU LT_FUN.
WHEN '%%MEN%%'. SET_MENU LT_MEN.
WHEN '%%MTX%%'. SET_MENU LT_MTX.
WHEN '%%ACT%%'. SET_MENU LT_ACT.
WHEN '%%BUT%%'. SET_MENU LT_BUT.
WHEN '%%PFK%%'. SET_MENU LT_PFK.
WHEN '%%SET%%'. SET_MENU LT_SET.
WHEN '%%DOC%%'. SET_MENU LT_DOC.
WHEN '%%TIT%%'. SET_MENU LT_TIT.
WHEN '%%BIV%%'. SET_MENU LT_BIV.
ENDCASE.
ENDLOOP.
*..... Create menu
CALL FUNCTION 'RS_CUA_INTERNAL_WRITE'
EXPORTING
PROGRAM = P_UPROG
LANGUAGE = SY-LANGU
TR_KEY = L_TRKEY
ADM = L_ADM
* STATE = 'A'
TABLES
STA = LT_STA
FUN = LT_FUN
MEN = LT_MEN
MTX = LT_MTX
ACT = LT_ACT
BUT = LT_BUT
PFK = LT_PFK
SET = LT_SET
DOC = LT_DOC
TIT = LT_TIT
BIV = LT_BIV
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC EQ 0.
CONCATENATE 'Create menu to' P_UPROG
INTO G_MSGTXT SEPARATED BY SPACE.
PERFORM APPEND_LOG USING '%OK' '%MENU' G_MSGTXT.
ELSE.
PERFORM MESSAGE_TEXT_BUILD
USING SY-MSGID SY-MSGNO SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
G_MSGTXT.
PERFORM APPEND_LOG USING '%ERR' '%MENU' G_MSGTXT.
ENDIF.
ENDFORM. " UP_MENU
*&---------------------------------------------------------------------*
*& Form WS_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_PROGTEXT text
* -->P_P_PATH text
*----------------------------------------------------------------------*
FORM WS_UPLOAD TABLES FT_TEXT STRUCTURE GT_PROGTEXT
USING FP_PATH FP_FLAG.
CLEAR: FT_TEXT, FT_TEXT[].
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FP_PATH
FILETYPE = 'ASC'
TABLES
DATA_TAB = FT_TEXT
EXCEPTIONS
CONVERSION_ERROR = 01
FILE_OPEN_ERROR = 02
FILE_READ_ERROR = 03
INVALID_TABLE_WIDTH = 04
INVALID_TYPE = 05
NO_BATCH = 06
UNKNOWN_ERROR = 07.
IF SY-SUBRC EQ 0.
CLEAR: FP_FLAG.
ELSE.
FP_FLAG = '%ERR'.
PERFORM MESSAGE_TEXT_BUILD
USING SY-MSGID SY-MSGNO SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
G_MSGTXT.
ENDIF.
ENDFORM. " WS_UPLOAD
*&---------------------------------------------------------------------*
*& Form RS_DYNPRO_DOWNLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_PATH text
*----------------------------------------------------------------------*
FORM RS_DYNPRO_DOWNLOAD TABLES FT_F STRUCTURE D021S
FT_E STRUCTURE D022S
FT_M STRUCTURE D023S
USING FP_H FP_DTXT FP_PATH.
DATA: HEADER_CHAR LIKE SCR_CHHEAD,
DYNP_CHAR LIKE SCR_CHFLD OCCURS 0 WITH HEADER LINE,
FIELDS_CHAR LIKE SCR_CHFLD OCCURS 0 WITH HEADER LINE,
PROG_LEN TYPE P.
CALL FUNCTION 'RS_SCRP_HEADER_RAW_TO_CHAR'
EXPORTING
HEADER_INT = FP_H
IMPORTING
HEADER_CHAR = HEADER_CHAR
EXCEPTIONS
OTHERS = 1.
REFRESH DYNP_CHAR.
* Comment
DYNP_CHAR = C_STARS. APPEND DYNP_CHAR.
DYNP_CHAR = C_COMMENT1. APPEND DYNP_CHAR.
DYNP_CHAR = C_COMMENT2. APPEND DYNP_CHAR.
DYNP_CHAR = C_STARS. APPEND DYNP_CHAR.
* Identification
DYNP_CHAR = C_DYNPRO. APPEND DYNP_CHAR. " '%_DYNPRO'
DYNP_CHAR = HEADER_CHAR-PROG. APPEND DYNP_CHAR.
DYNP_CHAR = HEADER_CHAR-DNUM. APPEND DYNP_CHAR.
DYNP_CHAR = SY-SAPRL. APPEND DYNP_CHAR.
DESCRIBE FIELD D020S-PROG LENGTH PROG_LEN IN BYTE MODE.
DYNP_CHAR(16) = PROG_LEN. APPEND DYNP_CHAR.
* Header
DYNP_CHAR = C_HEADER. APPEND DYNP_CHAR. " '%_HEADER'
APPEND HEADER_CHAR TO DYNP_CHAR.
* Description
DYNP_CHAR = C_DESCRIPT. APPEND DYNP_CHAR. " '%_DESCRIPTION'
APPEND FP_DTXT TO DYNP_CHAR.
* Fieldlist
DYNP_CHAR = C_FIELDS. APPEND DYNP_CHAR. " '%_FIELDS'
CALL FUNCTION 'RS_SCRP_FIELDS_RAW_TO_CHAR'
TABLES
FIELDS_INT = FT_F
FIELDS_CHAR = FIELDS_CHAR
EXCEPTIONS
OTHERS = 1.
LOOP AT FIELDS_CHAR.
APPEND FIELDS_CHAR TO DYNP_CHAR.
ENDLOOP.
* Flowlogic
DYNP_CHAR = C_FLOWLOGIC. APPEND DYNP_CHAR. " '%_FLOWLOGIC'
LOOP AT FT_E.
APPEND FT_E TO DYNP_CHAR.
ENDLOOP.
** refresh flowlogic. "vjb 25.06.98
* Dynpro Parameters "vjb ab 4.6A (01.07.98)
IF FT_M IS REQUESTED.
DYNP_CHAR = C_PARAMS. APPEND DYNP_CHAR. " '%_PARAMS'
LOOP AT FT_M.
APPEND FT_M TO DYNP_CHAR.
ENDLOOP.
ENDIF.
* Download
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = FP_PATH
FILETYPE = 'ASC'
TABLES
DATA_TAB = DYNP_CHAR
EXCEPTIONS
INVALID_FILESIZE = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
CUSTOMER_ERROR = 7
OTHERS = 8.
IF SY-SUBRC EQ 0.
CLEAR: G_FLAG_ERR.
ELSE.
G_FLAG_ERR = '%ERR'.
PERFORM MESSAGE_TEXT_BUILD
USING SY-MSGID SY-MSGNO SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
G_MSGTXT.
ENDIF.
ENDFORM. " RS_DYNPRO_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form RS_DYNPRO_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_F text
* -->P_LT_E text
* -->P_LT_M text
* -->P_L_H text
* -->P_L_DTXT text
* -->P_P_UPATH text
*----------------------------------------------------------------------*
FORM RS_DYNPRO_UPLOAD TABLES FT_F STRUCTURE D021S
FT_E STRUCTURE D022S
FT_M STRUCTURE D023S
USING FP_H FP_DTXT FP_PATH FP_PROG FP_DNUM.
TYPES: BEGIN OF DYNP_REL_TYPE, "Dynpro-Releases
REL(1),
DOT(1),
VERSION(2),
END OF DYNP_REL_TYPE.
DATA: SCRP_REL TYPE DYNP_REL_TYPE VALUE '4.60', "Rel. Scrp. 4.6A
DYNP_REL TYPE DYNP_REL_TYPE. "akt. Rel. Dynpro
DATA: DYNPRO_REL(4).
DATA: DYNP_CHAR LIKE SCR_CHFLD OCCURS 0 WITH HEADER LINE,
FIELDS_CHAR LIKE SCR_CHFLD OCCURS 0 WITH HEADER LINE,
HEADER_CHAR LIKE SCR_CHHEAD.
DATA: BEGIN OF DYNP,
PROG LIKE D020S-PROG,
DNUM LIKE D020S-DNUM,
END OF DYNP.
DATA: STATUS,
RELEASE,
PROG_LEN TYPE P.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FP_PATH
FILETYPE = 'ASC'
TABLES
DATA_TAB = DYNP_CHAR
EXCEPTIONS
CONVERSION_ERROR = 01
FILE_OPEN_ERROR = 02
FILE_READ_ERROR = 03
INVALID_TABLE_WIDTH = 04
INVALID_TYPE = 05
NO_BATCH = 06
UNKNOWN_ERROR = 07.
IF SY-SUBRC NE 0.
PERFORM MESSAGE_TEXT_BUILD
USING SY-MSGID SY-MSGNO SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
G_MSGTXT.
PERFORM APPEND_LOG USING '%ERR' '%SCR' G_MSGTXT.
STOP.
ENDIF.
* is it really a dynpro file ?
READ TABLE DYNP_CHAR INDEX 5.
IF DYNP_CHAR <> C_DYNPRO. " '%_DYNPRO'
PERFORM MESSAGE_TEXT_BUILD
USING 37 250 SPACE SPACE SPACE SPACE G_MSGTXT.
PERFORM APPEND_LOG USING '%ERR' '%SCR' G_MSGTXT.
STOP.
ENDIF.
* release test ( < rel. 3)
READ TABLE DYNP_CHAR INDEX 8.
IF DYNP_CHAR(1) < 3. "#EC PORTABLE
PERFORM MESSAGE_TEXT_BUILD
USING 37 251 SPACE SPACE SPACE SPACE G_MSGTXT.
PERFORM APPEND_LOG USING '%ERR' '%SCR' G_MSGTXT.
STOP.
ENDIF.
* test dynpro name
READ TABLE DYNP_CHAR INDEX 6.
DYNP-PROG = DYNP_CHAR.
READ TABLE DYNP_CHAR INDEX 7.
DYNP-DNUM = DYNP_CHAR.
* fill header_char, fields_char, flowlogic, and dynpro parameters
REFRESH FIELDS_CHAR.
REFRESH FT_E.
REFRESH FT_M.
STATUS = ' '.
LOOP AT DYNP_CHAR.
CASE DYNP_CHAR.
WHEN C_DYNPRO. STATUS = '1'. " '%_DYNPRO'
WHEN C_HEADER. STATUS = 'H'. " '%_HEADER'
WHEN C_DESCRIPT. STATUS = 'D'. " '%_DESCRIPT'
WHEN C_FIELDS. STATUS = 'F'. " '%_FIELDS'
WHEN C_FLOWLOGIC. STATUS = 'E'. " '%_FLOWLOGIC'
WHEN C_PARAMS. STATUS = 'P'. " '%_PARAMS'
WHEN OTHERS.
CASE STATUS.
WHEN '1'.
STATUS = '2'.
WHEN '2'.
STATUS = '3'.
WHEN '3'.
RELEASE = DYNP_CHAR(1).
STATUS = '4'.
WHEN '4'.
PROG_LEN = DYNP_CHAR.
STATUS = 'H'.
WHEN 'H'.
IF DYNP-PROG EQ FP_PROG.
MOVE DYNP_CHAR(PROG_LEN) TO HEADER_CHAR(PROG_LEN).
MOVE DYNP_CHAR+PROG_LEN TO HEADER_CHAR+PROG_LEN.
ELSE.
MOVE FP_PROG(PROG_LEN) TO HEADER_CHAR(PROG_LEN).
MOVE DYNP_CHAR+PROG_LEN TO HEADER_CHAR+PROG_LEN.
ENDIF.
IF DYNP-DNUM NE FP_DNUM.
MOVE FP_DNUM(4) TO HEADER_CHAR+PROG_LEN(4).
ENDIF.
STATUS = ' '.
WHEN 'D'.
FP_DTXT = DYNP_CHAR.
WHEN 'F'.
FIELDS_CHAR = DYNP_CHAR.
APPEND FIELDS_CHAR.
WHEN 'E'.
FT_E = DYNP_CHAR.
APPEND FT_E.
WHEN 'P'.
FT_M = DYNP_CHAR.
APPEND FT_M.
ENDCASE.
ENDCASE.
ENDLOOP.
* translate header
CALL FUNCTION 'RS_SCRP_HEADER_CHAR_TO_RAW'
EXPORTING
HEADER_CHAR = HEADER_CHAR
IMPORTING
HEADER_INT = FP_H
EXCEPTIONS
OTHERS = 1.
* translate fieldlist
CALL FUNCTION 'RS_SCRP_FIELDS_CHAR_TO_RAW'
TABLES
FIELDS_INT = FT_F
FIELDS_CHAR = FIELDS_CHAR
EXCEPTIONS
OTHERS = 1.
* release check
CALL FUNCTION 'RS_DYNPRO_RELEASE_GET'
EXPORTING
DYNPRO_HEADER = FP_H
IMPORTING
DYNPRO_RELEASE = DYNPRO_REL.
DYNP_REL = DYNPRO_REL.
IF SCRP_REL < DYNP_REL. "#EC PORTABLE
PERFORM MESSAGE_TEXT_BUILD
USING 37 251 SPACE SPACE SPACE SPACE G_MSGTXT.
PERFORM APPEND_LOG USING '%ERR' '%SCR' G_MSGTXT.
STOP.
ENDIF.
CALL FUNCTION 'RS_SCRP_DYNPRO_CHECK'
TABLES
FIELDLIST = FT_F
FLOWLOGIC = FT_E
PARAMS = FT_M
CHANGING
HEADER = FP_H
EXCEPTIONS
DAMAGED_BUT_REPAIRED = 1
DAMAGED = 2
OTHERS = 3.
CHECK ( SY-SUBRC EQ 2 ) OR ( SY-SUBRC EQ 3 ).
PERFORM MESSAGE_TEXT_BUILD
USING SY-MSGID SY-MSGNO SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
G_MSGTXT.
PERFORM APPEND_LOG USING '%ERR' '%SCR' G_MSGTXT.
STOP.
ENDFORM. " RS_DYNPRO_UPLOAD
*&---------------------------------------------------------------------*
*& Form CHECK_REQUIRED_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_1145 text
*----------------------------------------------------------------------*
FORM CHECK_REQUIRED_FIELD USING FP_STATUS.
CLEAR: G_FLAG_ERR.
CASE FP_STATUS.
WHEN '%DOWN'.
IF ( P_DPROG IS INITIAL ) OR ( P_DPATH IS INITIAL ).
G_MSGTXT = 'Specify download program name & path!!'.
PERFORM WS_MSG USING 'E' G_MSGTXT.
G_FLAG_ERR = 'X'. EXIT.
ENDIF.
IF ( P_DMPRG IS INITIAL ) AND ( P_DMSG IS INITIAL ) AND
( P_DINCL IS INITIAL ) AND ( P_DSCR IS INITIAL ) AND
( P_DMSG IS INITIAL ).
G_MSGTXT = 'Check additional option!!'.
PERFORM WS_MSG USING 'E' G_MSGTXT.
G_FLAG_ERR = 'X'. EXIT.
ENDIF.
WHEN '%UP'.
IF P_UPATH IS INITIAL.
G_MSGTXT = 'Specify upload file path & name!!'.
PERFORM WS_MSG USING 'E' G_MSGTXT.
G_FLAG_ERR = 'X'. EXIT.
ENDIF.
IF P_UPROG IS INITIAL.
G_MSGTXT = 'Specify target program name!!'.
PERFORM WS_MSG USING 'E' G_MSGTXT.
G_FLAG_ERR = 'X'. EXIT.
ELSE.
IF P_UPROG(1) NA 'YZ'.
IF P_UINCL EQ 'X'.
IF ( P_UPROG(2) NE 'MZ' ) AND
( P_UPROG(2) NE 'MY' ).
G_MSGTXT = 'Error in program name!!'.
PERFORM WS_MSG USING 'E' G_MSGTXT.
G_FLAG_ERR = 'X'. EXIT.
ENDIF.
ELSE.
IF ( P_UPROG(5) NE 'SAPMZ' ) AND
( P_UPROG(5) NE 'SAPMY' ).
G_MSGTXT = 'Error in program name!!'.
PERFORM WS_MSG USING 'E' G_MSGTXT.
G_FLAG_ERR = 'X'. EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF ( P_RSCR EQ 'X' ) AND ( P_UDNUM IS INITIAL ).
G_MSGTXT = 'Specify screen number!!'.
PERFORM WS_MSG USING 'E' G_MSGTXT.
G_FLAG_ERR = 'X'. EXIT.
ENDIF.
ENDCASE.
ENDFORM. " CHECK_REQUIRED_FIELD
*&---------------------------------------------------------------------*
*& Form DOWN_MESSAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWN_MESSAGE.
DATA: L_PATH LIKE RLGRAP-FILENAME.
CLEAR: GT_INCLUDE, GT_INCLUDE[], GT_MESSAGE, GT_MESSAGE[], G_ARBGB.
G_MSGTXT = 'Processing please wait...Message class'.
PERFORM DISPLAY_STATUS USING G_MSGTXT 0.
*..... Find messages
PERFORM GET_INCLUDE_PROGRAM TABLES GT_INCLUDE
USING P_DPROG.
CLEAR: GT_INCLUDE.
GT_INCLUDE-NAME = P_DPROG.
INSERT GT_INCLUDE INDEX 1.
PERFORM FIND_MESSAGE_CLASS.
*..... Check exist
DESCRIBE TABLE GT_MESSAGE LINES SY-TFILL.
IF SY-TFILL EQ 0.
G_MSGTXT = 'Message class does not exist'.
PERFORM APPEND_LOG USING '%ERR' '%MSG' G_MSGTXT.
EXIT.
ENDIF.
*..... Get message text
CLEAR: GT_PROGTEXT, GT_PROGTEXT[].
SORT GT_MESSAGE BY ARBGB DESCENDING MSGNR.
LOOP AT GT_MESSAGE.
AT NEW ARBGB.
GT_PROGTEXT = C_STARS. APPEND GT_PROGTEXT.
PERFORM SELECT_T100T USING GT_MESSAGE-ARBGB GT_MESSAGE-TEXT.
CONCATENATE '* Message class :' GT_MESSAGE-ARBGB GT_MESSAGE-TEXT
INTO GT_PROGTEXT-TEXT SEPARATED BY SPACE.
APPEND GT_PROGTEXT.
GT_PROGTEXT = C_STARS. APPEND GT_PROGTEXT.
ENDAT.
PERFORM SELECT_T100
USING GT_MESSAGE-ARBGB GT_MESSAGE-MSGNR GT_MESSAGE-TEXT.
CLEAR GT_PROGTEXT.
GT_PROGTEXT = GT_MESSAGE-TEXT.
APPEND GT_PROGTEXT.
AT END OF ARBGB.
APPEND INITIAL LINE TO GT_PROGTEXT.
ENDAT.
AT LAST.
GT_PROGTEXT = C_STARS. APPEND GT_PROGTEXT.
ENDAT.
ENDLOOP.
*..... Download & append log
CONCATENATE P_DPATH '\' P_DPROG '_MSG.TXT'
INTO L_PATH.
PERFORM WS_DOWNLOAD TABLES GT_PROGTEXT USING L_PATH G_FLAG_ERR.
IF G_FLAG_ERR IS INITIAL.
CONCATENATE P_DPROG '_MSG.TXT' INTO G_MSGTXT.
PERFORM APPEND_LOG USING '%OK' '%MSG' G_MSGTXT.
ELSE.
PERFORM APPEND_LOG USING '%ERR' '%MSG' G_MSGTXT.
ENDIF.
ENDFORM. " DOWN_MESSAGE
*&---------------------------------------------------------------------*
*& Form WRITE_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_HEADER.
CASE TABB1-ACTIVETAB.
WHEN 'TABS2' OR 'EXDN'. "Download
FORMAT: INTENSIFIED OFF, COLOR COL_HEADING.
WRITE: /(80) 'Download Log'.
FORMAT: INTENSIFIED OFF, COLOR COL_NORMAL.
WRITE: / C_HYPHEN,
/03 'Download path :', P_DPATH(59).
WHEN 'TABS1' OR 'EXUP'. "Upload
FORMAT: INTENSIFIED OFF, COLOR COL_HEADING.
WRITE: /(80) 'Upload Log'.
FORMAT: INTENSIFIED OFF, COLOR COL_NORMAL.
WRITE: / C_HYPHEN,
/03 'Upload path :', P_UPATH(59).
ENDCASE.
ENDFORM. " WRITE_HEADER
*&---------------------------------------------------------------------*
*& Form WS_MSG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_3464 text
* -->P_G_MSGTXT text
*----------------------------------------------------------------------*
FORM WS_MSG USING FP_TYPE FP_TEXT.
CALL FUNCTION 'WS_MSG'
EXPORTING
MSG_TYPE = FP_TYPE
TEXT = FP_TEXT
TITL = 'Notification'.
ENDFORM. " WS_MSG
*&---------------------------------------------------------------------*
*& Form WRITE_LOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0960 text
* -->P_G_MSGTXT text
*----------------------------------------------------------------------*
FORM WRITE_LOG.
LOOP AT GT_LOG.
CASE GT_LOG-STAT.
WHEN '%OK'.
WRITE: /03 ICON_GREEN_LIGHT AS ICON.
WHEN '%WAR'.
WRITE: /03 ICON_YELLOW_LIGHT AS ICON.
WHEN '%ERR'.
WRITE: /03 ICON_RED_LIGHT AS ICON.
ENDCASE.
CASE GT_LOG-TYPE.
WHEN '%MPRG'.
WRITE: 'Main prg. :', GT_LOG-TEXT.
WHEN '%IPRG'.
WRITE: 'Include prg.:', GT_LOG-TEXT.
WHEN '%SCR'.
WRITE: 'Screen :', GT_LOG-TEXT.
WHEN '%MENU'.
WRITE: 'Menu :', GT_LOG-TEXT.
WHEN '%MSG'.
WRITE: 'Message :', GT_LOG-TEXT.
ENDCASE.
ENDLOOP.
ENDFORM. " WRITE_LOG
*&---------------------------------------------------------------------*
*& Form APPEND_LOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0960 text
* -->P_0961 text
* -->P_G_MSGTXT text
*----------------------------------------------------------------------*
FORM APPEND_LOG USING FP_STAT FP_TYPE FP_TEXT.
CLEAR: GT_LOG.
GT_LOG-STAT = FP_STAT.
GT_LOG-TYPE = FP_TYPE.
GT_LOG-TEXT = FP_TEXT.
APPEND GT_LOG.
ENDFORM. " APPEND_LOG
*&---------------------------------------------------------------------*
*& Form MESSAGE_TEXT_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SY_MSGID text
* -->P_SY_MSGNO text
* -->P_MSGV1 text
* -->P_MSGV2 text
* -->P_MSGV3 text
* -->P_MSGV4 text
* -->P_G_MSGTXT text
*----------------------------------------------------------------------*
FORM MESSAGE_TEXT_BUILD USING FP_MSGID FP_MSGNO FP_MSGV1 FP_MSGV2
FP_MSGV3 FP_MSGV4 FP_TEXT.
CLEAR: FP_TEXT.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = FP_MSGID
MSGNR = FP_MSGNO
MSGV1 = FP_MSGV1
MSGV2 = FP_MSGV2
MSGV3 = FP_MSGV3
MSGV4 = FP_MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = FP_TEXT.
ENDFORM. " MESSAGE_TEXT_BUILD
*&---------------------------------------------------------------------*
*& Form MODIFY_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MODIFY_SCREEN.
LOOP AT SCREEN.
CASE SCREEN-GROUP1.
WHEN 'G01'.
IF P_RPROG EQ 'X'.
SCREEN-INPUT = '1'.
ELSE.
SCREEN-INPUT = '0'.
ENDIF.
WHEN 'G02'.
IF P_RSCR EQ 'X'.
SCREEN-INPUT = '1'.
ELSE.
SCREEN-INPUT = '0'.
ENDIF.
WHEN OTHERS.
CONTINUE.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
CASE 'X'.
WHEN P_RPROG.
CLEAR: P_UDNUM.
WHEN P_RSCR.
CLEAR: P_UINCL.
WHEN P_RMENU.
CLEAR: P_UDNUM, P_UINCL.
ENDCASE.
ENDFORM. " MODIFY_SCREEN
*&---------------------------------------------------------------------*
*& Form AT_SELECTION_SCREEN
*&---------------------------------------------------------------------*
FORM AT_SELECTION_SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'EXUP'.
TABB1-DYNNR = 1001.
TABB1-ACTIVETAB = 'TABS1'.
WHEN 'EXDN'.
TABB1-DYNNR = 1002.
TABB1-ACTIVETAB = 'TABS2'.
ENDCASE.
ENDFORM. "AT_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*& Form START_OF_SELECTION
*&---------------------------------------------------------------------*
FORM START_OF_SELECTION.
CASE TABB1-ACTIVETAB.
WHEN 'TABS1' OR 'EXUP'.
PERFORM EXEC_UPLOAD.
WHEN 'TABS2' OR 'EXDN'.
PERFORM EXEC_DOWNLOAD.
ENDCASE.
ENDFORM. "START_OF_SELECTION
*&---------------------------------------------------------------------*
*& Form SELECT_T100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_MESSAGE_ARBGB text
* -->P_GT_MESSAGE_MSGNR text
* -->P_GT_MESSAGE_TEXT text
*----------------------------------------------------------------------*
FORM SELECT_T100 USING FP_ARBGB FP_MSGNR FP_TEXT.
CLEAR FP_TEXT.
SELECT SINGLE TEXT INTO FP_TEXT
FROM T100
WHERE SPRSL = SY-LANGU
AND ARBGB = FP_ARBGB
AND MSGNR = FP_MSGNR.
IF SY-SUBRC EQ 0.
CONCATENATE GT_MESSAGE-MSGNR FP_TEXT
INTO FP_TEXT SEPARATED BY SPACE.
ELSE.
FP_TEXT = FP_MSGNR.
ENDIF.
ENDFORM. " SELECT_T100
*&---------------------------------------------------------------------*
*& Form SELECT_T100T
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_MESSAGE_ARBGB text
* -->P_GT_MESSAGE_TEXT text
*----------------------------------------------------------------------*
FORM SELECT_T100T USING FP_ARBGB FP_TEXT.
CLEAR: FP_TEXT.
SELECT SINGLE STEXT INTO FP_TEXT
FROM T100T
WHERE SPRSL EQ SY-LANGU
AND ARBGB EQ FP_ARBGB.
ENDFORM. " SELECT_T100T
*%%$$****************************************************************
*%%$$ T E X T E L E M E N T S
*%%$$----------------------------------------------------------------
*%%$$ R - Program titles
*%%$$ T - List headers
*%%$$ H - Column headers
*%%$$ S - Selection texts
*%%$$ I - Text symbols
*%%$$****************************************************************
*%%$$R Program download and upload
댓글 없음:
댓글 쓰기