2017년 1월 30일 월요일

ZUPLOAD_DOWNLOAD_PROGRAM

*&---------------------------------------------------------------------*
*& 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                                                               *
************************************************************************
TABLESTRDIRRLGRAPD020SSSCRFIELDS.

************************************************************************
* DATA                                                                 *
************************************************************************
DATAG_MSGTXT(100),
      G_ANSWER,                        "Answer of Popup Window
      G_FLAG_ERR(10).

*..... Text element
DATAGT_TEXTPOOL LIKE TEXTPOOL OCCURS WITH HEADER LINE.

*..... Message classes
DATAG_ARBGB LIKE T100-ARBGB.        "Message class

DATABEGIN OF GT_MESSAGE OCCURS 0,
        ARBGB LIKE T100-ARBGB,
        MSGNR LIKE T100-MSGNR,
        TEXT  LIKE T100-TEXT,
      END OF GT_MESSAGE.

*..... Program & Menu
DATABEGIN OF GT_PROGTEXT OCCURS 0,
*         PROG LIKE TRDIR-NAME,
         TEXT(255),
      END OF GT_PROGTEXT.

*..... Include program
DATABEGIN OF GT_INCLUDE OCCURS 10,
        NAME LIKE TRDIR-NAME,
      END OF GT_INCLUDE.

*..... Process log
DATABEGIN OF GT_LOG OCCURS 0,
        STAT(5),
        TYPE(10),
        TEXT(80),
      END OF GT_LOG.

************************************************************************
* CONSTANTS                                                            *
************************************************************************
CONSTANTSC_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(11VALUE '%_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.
PARAMETERSP_RPROG  RADIOBUTTON GROUP R01
                      USER-COMMAND REXE    DEFAULT 'X'.
SELECTION-SCREEN COMMENT (10TP_RPROG FOR FIELD P_RPROG.

SELECTION-SCREEN POSITION 30.
PARAMETERSP_RSCR   RADIOBUTTON GROUP R01.
SELECTION-SCREEN COMMENT (10TP_RSCR  FOR FIELD P_RSCR.

SELECTION-SCREEN POSITION 55.
PARAMETERSP_RMENU  RADIOBUTTON GROUP R01.
SELECTION-SCREEN COMMENT (10TP_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(20TP_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(20TP_UPROG FOR FIELD P_UPROG.
PARAMETERSP_UPROG LIKE TRDIR-NAME,       "OBLIGATORY.
            P_UINCL AS CHECKBOX MODIF ID G01.
SELECTION-SCREEN COMMENT 70(10TP_UINCL FOR FIELD P_UINCL.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(20TP_USCR FOR FIELD P_UDNUM.
PARAMETERSP_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(20TP_DPROG FOR FIELD P_DPROG.
PARAMETERSP_DPROG LIKE TRDIR-NAME.        "OBLIGATORY.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(20TP_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(19TP_DMPRG FOR FIELD P_DMPRG.
PARAMETERSP_DMPRG AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(19TP_DMSG FOR FIELD P_DMSG.
PARAMETERSP_DMSG AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(19TP_DINCL FOR FIELD P_DINCL.
PARAMETERSP_DINCL AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(19TP_DSCR FOR FIELD P_DSCR.
PARAMETERSP_DSCR AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(19TP_DMENU FOR FIELD P_DMENU.
PARAMETERSP_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-SCREENBEGIN OF TABBED BLOCK TABB1 FOR 11 LINES,
                  TAB (20TABS1 USER-COMMAND EXUP,
                  TAB (20TABS2 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
  CLEARG_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 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.
  DATAL_DEFAULTL_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.
  DATAL_PATH LIKE RLGRAP-FILENAME.
  DATAL_DEFAULTL_TEXT1(70),  L_TEXT2(70)L_TITLE(70).

  CLEARGT_PROGTEXTGT_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.
  DATAL_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.
    CLEARGT_PROGTEXTGT_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.
  DATAL_PATH LIKE RLGRAP-FILENAME,
        LT_D020S LIKE D020S OCCURS WITH HEADER LINE.

  DATAL_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.
    CLEARL_DTXTL_HLT_FLT_ELT_MLT_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.
  DATAL_PATH LIKE RLGRAP-FILENAME.
  DATAL_DEFAULTL_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.
  CLEARGT_TEXTPOOLGT_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.

    CLEARGT_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.
  DATAL_HEAD(100),
        L_TAIL(100).

  DATALT_MSG(100OCCURS WITH HEADER LINE.

  DATALT_KW(30)          OCCURS WITH HEADER LINE,
        LT_TK  LIKE STOKEX OCCURS WITH HEADER LINE,
        LT_STM LIKE SSTMNT OCCURS WITH HEADER LINE.

  LOOP AT GT_INCLUDE.
    CLEARGT_PROGTEXTGT_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(1EQ '*' ).
        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
    CLEARLT_KWLT_KW[].
    LT_KW 'MESSAGE'.    APPEND LT_KW.
    LT_KW 'message'.    APPEND LT_KW.

    CLEARLT_TKLT_STMLT_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 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'.
      CLEARGT_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(1NA '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.
    CLEARFP_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.
  DATALT_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.
  DATAL_PATH LIKE RLGRAP-FILENAME.

  DATAL_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 OR
     L_ADM IS INITIAL.
    G_MSGTXT 'Menu does not exist'.
    PERFORM APPEND_LOG USING '%ERR' '%MENU' G_MSGTXT.
    EXIT.
  ENDIF.

*..... Download & append log
  CLEARGT_PROGTEXTGT_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(1EQ 'Z'  OR
                                NAME(1EQ 'Y'  OR
                                NAME(2EQ 'MZ' OR
                                NAME(2EQ 'MY' OR
                                NAME(2EQ 'LZ' OR
                                NAME(2EQ 'LY' )
                          OR  NAME(1EQ '<' ).

ENDFORM.                    " GET_INCLUDE_PROGRAM

*&---------------------------------------------------------------------*
*&      Form  UP_MAIN_PROG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UP_MAIN_PROG.
  DATAL_DEFAULTL_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.
  CLEARGT_TEXTPOOLGT_TEXTPOOL[].

  LOOP AT FT_PROGTEXT WHERE TEXT(5EQ '*%%$$'.
    IF '*-' NS FT_PROGTEXT-TEXT+5(1).
      CLEARGT_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.
  DATAL_DEFAULTL_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.
  DATAL_DEFAULTL_TEXT1(70),  L_TEXT2(70)L_TITLE(70).

  DATAL_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-PROGD020S-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.
  DATAL_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.
  CLEARFT_TEXTFT_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.
    CLEARFP_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.

  DATAHEADER_CHAR LIKE SCR_CHHEAD,
        DYNP_CHAR   LIKE SCR_CHFLD OCCURS WITH HEADER LINE,
        FIELDS_CHAR LIKE SCR_CHFLD OCCURS 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_COMMENT1APPEND DYNP_CHAR.
  DYNP_CHAR C_COMMENT2APPEND DYNP_CHAR.
  DYNP_CHAR C_STARS.    APPEND DYNP_CHAR.

* Identification
  DYNP_CHAR C_DYNPRO.         APPEND DYNP_CHAR.          "  '%_DYNPRO'
  DYNP_CHAR HEADER_CHAR-PROGAPPEND DYNP_CHAR.
  DYNP_CHAR HEADER_CHAR-DNUMAPPEND DYNP_CHAR.
  DYNP_CHAR SY-SAPRL.         APPEND DYNP_CHAR.
  DESCRIBE FIELD D020S-PROG LENGTH PROG_LEN IN BYTE MODE.
  DYNP_CHAR(16PROG_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.
    CLEARG_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.
  TYPESBEGIN OF DYNP_REL_TYPE,               "Dynpro-Releases
          REL(1),
          DOT(1),

          VERSION(2),
        END OF DYNP_REL_TYPE.

  DATASCRP_REL  TYPE DYNP_REL_TYPE VALUE '4.60',  "Rel. Scrp. 4.6A
        DYNP_REL  TYPE DYNP_REL_TYPE.               "akt. Rel. Dynpro

  DATADYNPRO_REL(4).

  DATADYNP_CHAR   LIKE SCR_CHFLD OCCURS WITH HEADER LINE,
        FIELDS_CHAR LIKE SCR_CHFLD OCCURS WITH HEADER LINE,
        HEADER_CHAR LIKE SCR_CHHEAD.

  DATABEGIN OF DYNP,
             PROG LIKE D020S-PROG,
             DNUM LIKE D020S-DNUM,
        END OF DYNP.

  DATASTATUS,
        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(13.                                    "#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_FLOWLOGICSTATUS '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_LENTO 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 OR SY-SUBRC EQ ).
  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.
  CLEARG_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(1NA 'YZ'.
          IF P_UINCL EQ 'X'.
            IF P_UPROG(2NE 'MZ' AND
               P_UPROG(2NE 'MY' ).
              G_MSGTXT 'Error in program name!!'.
              PERFORM WS_MSG USING 'E' G_MSGTXT.
              G_FLAG_ERR 'X'.  EXIT.
            ENDIF.
          ELSE.
            IF P_UPROG(5NE 'SAPMZ' AND
               P_UPROG(5NE '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.
  DATAL_PATH LIKE RLGRAP-FILENAME.

  CLEARGT_INCLUDEGT_INCLUDE[]GT_MESSAGEGT_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.

  CLEARGT_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
  CLEARGT_PROGTEXTGT_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
      FORMATINTENSIFIED OFFCOLOR COL_HEADING.
      WRITE/(80'Download Log'.
      FORMATINTENSIFIED OFFCOLOR COL_NORMAL.
      WRITE/ C_HYPHEN,
             /03 'Download path    :'P_DPATH(59).

    WHEN 'TABS1' OR 'EXUP'.     "Upload
      FORMATINTENSIFIED OFFCOLOR COL_HEADING.
      WRITE/(80'Upload Log'.
      FORMATINTENSIFIED OFFCOLOR 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.
  CLEARGT_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.
  CLEARFP_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.
      CLEARP_UDNUM.
    WHEN P_RSCR.
      CLEARP_UINCL.
    WHEN P_RMENU.
      CLEARP_UDNUMP_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.
  CLEARFP_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

댓글 없음:

댓글 쓰기