Enterprise Resource Planning PortalERPGenie.COM Enterprise Resource Planning Portal

   Advertise | Founder BLOG

Web ERPGenie.COM  Other Search Options

Home | Vote for us |

ERPGenie.COM -> SAP Technical -> ABAP -> Example code -> Upload / Download ABAP with dynpros, CUA, attr, text and includes

PROGRAM ZAPC0007
       LINE-SIZE 132
       LINE-COUNT 62
       NO STANDARD PAGE HEADING.
*
* This program up / downloads from / to a local dataset
* all the components of an ABAP - i.e TEXTS, the entire CUA
* including statuses and menus, DYNPROS and source code.
* Program documentation and variants are not handled.
*
* INCLUDED programs are automatically handled both on upload
* or download. INCLUDE selection can be excluded or generic
* e.g only handle INCLUDES starting with ZIN*
* INCLUDES within INCLUDES alos handled.
* The only restriction is on UPLOAD the INCLUDED programs must come
* from the same directory as the main program.
* On Download of course the ABAP must exist in the library.
*
* Note for LINUX and BATCH users
*
* This program was originally designed as a one off tool for
* getting ABAPS etc from a SAP R2 (IBM MVS mainframe system) into
* an R3 test system minimising the need for a large amount of
* mainframe sysprogs (anybody remember what they were !!) time
* and support to say nothing of access problems from TSO /JES2 /
* SAP R2. At that time network connections were patchy and the
* transport systems largely incompatable and not very reliable.
*
*
* This program was originally designed as a one off tool for
* Must run on Windows front end ---- If you are running SAP with
* LINUX on your work station you will have to change the WS_UPLOAD
* and WS_DOWNLOAD functions to reflect the Linux file system. The
* contents of the data sets themseleves do not need to be changed
*
* Program can easily be modified to run in batch and store
* the data on a UNIX host. Change the WS_UPLOAD and WS_DOWNLOAD
* to read from and write to UNIX data sets (OPEN FILE etc).
* You will also need to modify the parts of the program that get
* the DOS directory and display the Windows file paths.
* The actual abap data sets do not need to be changed.
*
*
* Rel 4.0 names can now be up to 40 bytes long
* Dynpros and CUA have changed from rel 3.1
* Tabstrips now loaded and unloaded in dynpros
*
* Please note restriction on 4.6 systems for users who
* have ABAP names which include '/'s in their names.
*
* Rel 4.6b, 4.6c Abap names can include the '/' in their names
* e.g /CUST1/CUST2/ORDER
*
* This causes problems when storing to a local file.
*
* a solution is to change the name to %CUST1%CUST2%ORDER i.e / will
* be changed to %. On upload the % should be changed back to /
* again. This change still needs to be implemented.
*
* If you don't use the / in the abap name then this is not a problem.
*
* If file to be uploaded is in rel 3 format then names are only 8
* bytes long.
*
* program uses 3 datasets per abap
* 1) abapname.eee source, dynpr logic, texts, CUA stuff
* 2) abapname.hhh dynpr header
* 3) abapname.fff dynpro fields.
*
* because of varying lengths and contents 3 data sets are used. The
* complexity of combining all these to 1 data set would make the
* program far too complex.
*
* NOTE: This version of the program can only be used on
* release 4.0 or higher. Once an ABAP has been converted
* to rel 4.0 it cannot be converted back to rel 3.0
* on a release 3/3.1 system. Release 4 CUA tables
* are different. Use release 3 version of this program
* for releases 3.0 and 3.1. Available on SAPFANS website.
*
* Note that data to be uploaded must have been previously downloaded
* by this program (any version since rel 2.0) - except for Initial
* Load -- see end of these comments.
*
* Dynpros and CUA statuses have changed since rel 3.1
* This program will handle rel 3.1 format on upload but will
* download in rel 4.0 format. To upload 3.1 format specify an 'X'
* in the rel3 parameter.
*
* If you have downloaded components in rel 4.0 format and you
* want to re-load to a 3.1 system you will have to load
* the source via standard upload and re-create dynpros and the CUA
* manually.
*
* As names can now be longer than 8 characters you can only
* use this program if the SAP front end (SAPGUI) supports
* long file names (WIN 95/98 or WIN NT). Windows 3.x will not
* work as the underlying DOS system cannot handle long file names.
* UPLOAD function and DOS directory.
*
* When an ABAP is selected for UPLOAD then the DOS
* directory is read into a table. A file called ABAP.BAT is created,
* and down loaded to the 'C' drive and executed.
* This file executes a DOS DIR command and pipes the output
* into a dataset which is then uploaded into an internal
* table on SAP.
*
* Note on running DOS commands from ABAP
*
* The first time this procedure is executed you will see a DOS window
* which you will have to close manually. To get round this
* use windows explorer to select the file ABAP.BAT and then
* right mouse click on the file name. Select the
* properties window. From this click the CLOSE on EXIT box. This
* will then automatically close the DOS function after it has
* executed. (Windows restriction).
*
* The DOS function has not been tested using Windows 2000 so
* it might not work. OK on W95,W98,WME and Windows NT (No Thanks)
*
* If INCLUDE programs are wanted on UPLOAD only the specified
* directory is searched.
*
* Instead of entering path name manually you can click on
* the path parameter. Because of Windows restriction you will
* have to select ANY file in the relevant directory.
* The path will then be copied on to the selection screen.
*
* To do still : Merge 3 files to one and compress output to .ZIP file
* fix 4.5 4.6 problem of abaps containing '/' in the name
* possibility to automatically up / download referenced
* function modules with selection criteria like INCLUDES
*
* To load the ist time into a system.
*
* Create program with ABAP editor and Upload the .EEE file.
* Delete ist line (????SRCE) in the ABAP EDITOR --NOT THE DISK FILE
* Delete all the source from the line that starts ????TEXT (towards
* the end file) till the end so the last line in your source is ENDFORM.
* DO NOT ALTER THE DISK FILE. DO THESE CHANGES IN THE ABAP EDITOR.
*
* Save file and execute
*
* Use following parameters (Note the ist time you won't get proper
* text on the selection screen).
*
* Function U
* Path full dos path containing source e.g c:\abaps\
* NOTE YOU MUST ENTER THE FINAL \ as above.
* REPID the program name. e.g ZZJIMHXX
* note that on the DISK you will see 3 files
* ZZJIMHXX.EEE, ZZJIMHXX.FFF, ZZJIMHXX.HHH
* just use the name before the dos qualifier - the
* program will do the rest
*
* ignore other parameters
* The program will then load itself with all the texts etc.
* It should now be ready for use.
*
* Macros
*
DEFINE DEFINE_TABLE.
  DATA: &1 LIKE &2 OCCURS &3 WITH HEADER LINE.
END-OF-DEFINITION.

DEFINE CLS.
  REFRESH &1.
  CLEAR &1.
END-OF-DEFINITION.

DEFINE INIT.
  IF &1 NE SPACE.
    SEARCH &1 FOR 
'. .'.
    IF SY-SUBRC = 0.
      WRITE 
'*' TO &1+SY-FDPOS(1).
    ENDIF.
    TRANSLATE &1 USING 
'*%'.
  ELSE.
    MOVE 
'%' TO &1.
  ENDIF.
END-OF-DEFINITION.
* end of macros
*/******************************************************************/
*/* */
*/* SAP standard tables */
*/* */
*/******************************************************************/
TABLES: D020S,                         
"Dynpro header
        D020T,                         
"Dynpro title
        D021T,                         
"Screen field keyword texts
        TRDIR,                         
"Attribute table
        TADIR,                         
"Dev. class etc.
        EUDB,                          
"CUA data
        TSTC,                          
"transaction data
        TITLE,                         
"CUA titles
        RSMPTEXTS.                     
"Function texts (rel 4.0)
*/******************************************************************/
*/* */
*/* Work tables to hold ABAP source etc, and dynpro */
*/* contents. */
*/* */
*/******************************************************************/
DATABEGIN OF H.                      
"Header
        INCLUDE STRUCTURE D020S.
DATAEND OF H.
DATABEGIN OF H1 OCCURS 10,           
"Header
      NAME(40)               TYPE C,                        
"rel 4
      NUMBER(4)              TYPE N.
        INCLUDE STRUCTURE D020S.
DATAEND OF H1.
DATABEGIN OF H2 OCCURS 0,            
"Rel 3 dynp. header
        CNAME(8)   TYPE C,
        CNUM(4)    TYPE C,
        NNAME(8)   TYPE C,
        NNUM(4)    TYPE C,
        FILL(51)   TYPE C,
        CDAT(6)    TYPE C,
        CTIM(6)    TYPE C,
      END OF H2.
DATABEGIN OF F OCCURS 250.           
"Dynpro Fields
        INCLUDE STRUCTURE D021S.
DATAEND OF F.
DATABEGIN OF F1 OCCURS 500,          
"Dynpro Fields
      NAME(40)               TYPE C,                        
"rel 4
      NUMBER(4)              TYPE N.
        INCLUDE STRUCTURE D021S.
DATAEND OF F1.
DATABEGIN OF OLD_F1 OCCURS 0,        
"Dynpro Fields (rel 3)
      NAME(8)    TYPE C,
      NUMBER(4)     TYPE C.
        INCLUDE STRUCTURE D021SE_OLD.
DATAEND OF OLD_F1.
DATABEGIN OF F2 OCCURS 0,            
"Dynpro Fields (rel 3)
      TFIL(284)  TYPE C,
      END OF F2.
DATABEGIN OF M OCCURS 3.             
"Match codes (if any)
        INCLUDE STRUCTURE D023S.
DATAEND OF M.
DATABEGIN OF E OCCURS 0.             
"Dynpro Logic
        INCLUDE STRUCTURE D022S.
DATAEND OF E.
DATABEGIN OF E1 OCCURS 0,            
"Dynpro Logic
      NAME(40)               TYPE C,                        
"rel 4
      NUMBER(4)              TYPE N.
        INCLUDE STRUCTURE D022S.
DATAEND OF E1.
DATABEGIN OF T   OCCURS 0,           
"prog name and dynpro nrs
      NAME(40)     TYPE C,                                  
"rel 4
      NUMBER(4)    TYPE N,
 END OF T.
DATABEGIN OF R   OCCURS 56,          
"prog name and language
      NAME(40)     TYPE C,                                  
"rel 4
      LANGUAGE(1)  TYPE C,
   END OF R.
DATABEGIN OF S OCCURS 3000,
      TXT(180)               TYPE C,   
"rel 4 was 132
      END OF S.
DATABEGIN OF R1 OCCURS 50,           
"for include programs
        NAME(40)             TYPE C,                        
"rel 4
        INSTANCE(3)          TYPE P,
      END OF R1.
DATABEGIN OF S1 OCCURS 3000,
      TXT(180)               TYPE C,   
" rel 4 was 132
      END OF S1.
DATABEGIN OF U OCCURS 100,           
"Text elements
      TXT(180)               TYPE C,   
" rel 4 was 132
      END OF U.
DATABEGIN OF DIR.                    
"ABAP Attributes
        INCLUDE STRUCTURE TRDIR.
DATAEND OF DIR.
DATABEGIN OF DTXT.                   
"Dynpro field keyword texts
        INCLUDE STRUCTURE D021T.
DATAEND OF DTXT.
*/******************************************************************/
*/* */
*/* This data contains all the components of the */
*/* CUA such as menus, statuses, Pfkeys */
*/* */
*/* As from rel 4.5 Tabstrips are automatically copied as well */
*/* */
*/* The rel3 parameter must be set however to load the */
*/* correct version of the CUA tables if uploading rel 3 */
*/* data to a rel 4 system. */
*/* */
*/* Rel 4.0B can convert 3.1 and earlier CUA's */
*/* This could change later however. */
*/* */
*/******************************************************************/
* CUA Tables.
* Key of CUA tables in EUDB data set. Name is len 40 in rel 4.0
DATA BEGIN OF EU_KEY.
        INCLUDE STRUCTURE RSEU1_KEY.
DATA END OF EU_KEY.
* Status
DATA BEGIN OF STA OCCURS 0.
        INCLUDE STRUCTURE RSMPE_STAT.                       
" rel 4
DATA END OF STA.
* Functions
DATA BEGIN OF FUN OCCURS 0.
        INCLUDE STRUCTURE RSMPE_FUNT.                       
"rel 4
DATA END OF FUN.
* Menus
DATA BEGIN OF MEN OCCURS 0.
        INCLUDE STRUCTURE RSMPE_MEN.   
"rel 4.0
DATA END OF MEN.
* Menus (texts)
DATA BEGIN OF MTX OCCURS 0.
        INCLUDE STRUCTURE RSMPE_MNLT.  
"rel 4.0
DATA END OF MTX.
* Action Bar
DATA BEGIN OF ACT OCCURS 0.
        INCLUDE STRUCTURE RSMPE_ACT.   
"rel 4.0
DATA END OF ACT.
* Push Buttons
DATA BEGIN OF BUT OCCURS 0.
        INCLUDE STRUCTURE RSMPE_BUT.   
"rel 4.0
DATA END OF BUT.
* PF-Keys
DATA BEGIN OF PFK OCCURS 0.
        INCLUDE STRUCTURE RSMPE_PFK.   
"rel 4.0
DATA END OF PFK.
* Function sets
DATA BEGIN OF SET OCCURS 0.
        INCLUDE STRUCTURE RSMPE_STAF.  
"rel 4.0
DATA END OF SET.
* Documentation
DATA BEGIN OF DOC OCCURS 0.
        INCLUDE STRUCTURE RSMPE_ATRT.  
"rel 4.0
DATA END OF DOC.
* Title codes with text
DATABEGIN OF TIT OCCURS 0.
        INCLUDE STRUCTURE RSMPE_TITT.  
"rel 4.0
DATAEND OF TIT.
DATA BEGIN OF FTX OCCURS 0.            
"rel 4.0
        INCLUDE STRUCTURE RSMPTEXTS.
DATA END OF FTX.
* rel 3.1 CUA components.
* Status
DATA BEGIN OF OLD_STA OCCURS 0.
        INCLUDE STRUCTURE RSEU1_GEN.   
" rel 3.1
DATA END OF OLD_STA.
* Functions
DATA BEGIN OF OLD_FUN OCCURS 0.
        INCLUDE STRUCTURE RSEU1_FUN.   
"rel 3.1
DATA END OF OLD_FUN.
* Menus
DATA BEGIN OF OLD_MEN OCCURS 0.
        INCLUDE STRUCTURE RSEU1_MEN.   
"rel 3.1
DATA END OF OLD_MEN.
* Menus (texts)
DATA BEGIN OF OLD_MTX OCCURS 0.
        INCLUDE STRUCTURE RSEU1_TXM.   
"rel 3.1
DATA END OF OLD_MTX.
* Action Bar
DATA BEGIN OF OLD_ACT OCCURS 0.
        INCLUDE STRUCTURE RSEU1_ACT.   
"rel 3.1
DATA END OF OLD_ACT.
* Push Buttons
DATA BEGIN OF OLD_BUT OCCURS 0.
        INCLUDE STRUCTURE RSEU1_BUT.   
"rel 3.1
DATA END OF OLD_BUT.
* PF-Keys
DATA BEGIN OF OLD_PFK OCCURS 0.
        INCLUDE STRUCTURE RSEU1_PFK.   
"rel 3.1
DATA END OF OLD_PFK.
* Function sets
DATA BEGIN OF OLD_SET OCCURS 0.
        INCLUDE STRUCTURE RSEU1_SET.   
"rel 3.1
DATA END OF OLD_SET.
* Documentation
DATA BEGIN OF OLD_DOC OCCURS 0.
        INCLUDE STRUCTURE RSEU1_ETM.   
"rel 3.1
DATA END OF OLD_DOC.
* Title codes with text
DATABEGIN OF OLD_TIT OCCURS 0.
        INCLUDE STRUCTURE TITLE.       
"rel 3.1
DATAEND OF OLD_TIT.
* dynamic function text
DATA BEGIN OF FDN OCCURS 1.
        INCLUDE STRUCTURE RSEU1_FDYN.  
"not req for rel 4.
DATA END OF FDN.
* Icons
DATA BEGIN OF FIN OCCURS 1.
        INCLUDE STRUCTURE RSEU1_ICON.  
"not req for rel 4
DATA END OF FIN.
* dynamic menu texts
DATA BEGIN OF MDN OCCURS 1.
        INCLUDE STRUCTURE RSEU1_MDYN.  
"not req for rel 4.
DATA END OF MDN.
* Symbol list
DATA BEGIN OF SYM OCCURS 0.
        INCLUDE STRUCTURE RSEU1_SYMB.
DATA END OF SYM.
* Status Short text
DATA BEGIN OF STX OCCURS 0.
        INCLUDE STRUCTURE RSEU1_CTX.
DATA END OF STX.
* Attributes for function key settings (menu bars) Rel 3.0
DATA BEGIN OF ATT OCCURS 0.
        INCLUDE STRUCTURE RSEU1_HAT.
DATA END OF ATT.
* Include-Menus
DATA BEGIN OF INC OCCURS 3.
        INCLUDE STRUCTURE RSEU1_INC.
DATA END OF INC.
* Last used numbers
DATA BEGIN OF LAST.
        INCLUDE STRUCTURE RSEU1_LST.
DATA END OF LAST.
*
* data for call transaction (SE41 to re-generate the CUA)
*
DATABEGIN OF T_BDC_TAB OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.     
"BDC data
DATAEND OF T_BDC_TAB.
DATABEGIN OF T_MESSTAB OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.
DATAEND OF T_MESSTAB.
*/******************************************************************/
*/* */
*/* Program data */
*/* */
*/******************************************************************/
DATA: NUMBER(4)               TYPE N,
      OLDNUM(4)               TYPE N,
      FILESIZE                TYPE I,
      NR_OF_BYTES             TYPE I,
      I(3)                    TYPE P,
      IX(3)                   TYPE P,
      J(3)                    TYPE P,
      L(3)                    TYPE P,
      CUA-FLAG(1)             TYPE C,
      CUA_RETURN(10)          TYPE C,
      DYNPRO_MESSAGE(160)     TYPE C,
      DYNPRO_LINE             TYPE P,
      DYNPRO_WORD(30)         TYPE C,
      NUM(3)                  TYPE N,
      DYNNAME(44)             TYPE C,
      FN1(128)                TYPE C,
      FN2(128)                TYPE C,
      FN3(128)                TYPE C,
      W_ITERATE(1)            TYPE C,
      MAIN(1)                 TYPE C,
      FUNC(1)                 TYPE C,
      OLDNAME(40)             TYPE C,
      OLD-FUNC(8)             TYPE C,
      NEW-FUNC(8)             TYPE C,
      FOUND(1)                TYPE C,
      LANGUAGE                LIKE SY-LANGU,
      FIRST-TIME(1)           TYPE C VALUE 
'Y',
      OK-CODE(5)              TYPE C,
      NAME(40)                TYPE C,                       
"rel 4
      TXLINE(70)              TYPE C,
      LINE(132)               TYPE C.
DATA:
      UL_FILE(128)          TYPE C,
      DL_FILE(128)          TYPE C,
      DOSLINE(72)           TYPE C.

DATABEGIN OF DOSDIR OCCURS 0,
        TEXT(72),
      END OF DOSDIR.

DATABEGIN OF I_PROG OCCURS 0,
      NAME(40),
      END OF I_PROG.

DATABEGIN OF I_PROGT OCCURS 0,
      NAME(40),
      END OF I_PROGT.

DATABEGIN OF I_INCLUDE OCCURS 0,
      NAME(40),
      HANDLED(1)   TYPE C,
      END OF I_INCLUDE.

DATABEGIN OF I_INCL OCCURS 0,
      NAME(40),
      END OF I_INCL.

DATABUFFER(1024).
DATA: WINSYS(3).
DATA: GLOBAL_FILEMASK_MASK(20), GLOBAL_FILEMASK_TEXT(20).
DATA: GLOBAL_FILEMASK_ALL(80).
DATA: T_FILENAME(128),
      TMP_FILENAME(128),
      T_MODE(1),
      FIELDLN     TYPE I.

DEFINE_TABLE I_DYNPFIELDS DYNPREAD 0.  
"dynpro fields to be updated

DATA: I_FLDS LIKE HELP_VALUE OCCURS 0 WITH HEADER LINE.
FIELD-SYMBOLS: <F>.
*/******************************************************************/
*/* */
*/* Parameters */
*/* */
*/******************************************************************/
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS REPID FOR TRDIR-NAME OBLIGATORY .
PARAMETERS:
      FUNCTION(1)       TYPE C OBLIGATORY,  
"Function
      DSNAME(40)        TYPE C,        
"Data set name
      INCLUDES(1)       TYPE C DEFAULT 
'N'"Resolve Includes
      IMASK(40)         TYPE C,        
"Include Mask
      CLASS             LIKE TRDIR-CLAS,
      AUTHOR            LIKE TRDIR-CNAM,          
"Author
      APPL              LIKE TRDIR-APPL,
      PATH(88)          TYPE C DEFAULT 'A:\',
      REL3(1)           TYPE C.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(70) TEXT-004.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(70) TEXT-005.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(70) TEXT-002.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(70) TEXT-003.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END  OF BLOCK A1.

*/***************************************************************/
*/* */
*/* Check users workstation is running WINDOWS, */
*/* WINDOWS 95, or WINDOWS NT. OS/2 no good for */
*/* this application. */
*/* */
*/***************************************************************/

CALL FUNCTION 
'WS_QUERY'
     EXPORTING
          QUERY  = 
'WS'
     IMPORTING
          RETURN = WINSYS.
IF WINSYS(2) NE 
'WN'.                  "Win 3.X no good either
  WRITE: / 
'Windows NT or Windows 95/98 is required'.
  EXIT.
ENDIF.
*/***************************************************************/
*/* */
*/* Get names of programs to be handled. */
*/* Name can be a single value, many values or ranges */
*/* as per standard SELECT-OPTIONS on selection screen */
*/* */
*/* On Download read TRDIR and store program names in a table */
*/* as per selection options. */
*/* */
*/* On upload read the specified directory for all files of */
*/* type .EEE from specified directory */
*/* compare file names with selection criteria */
*/* */
*/***************************************************************/
MOVE FUNCTION TO FUNC.
MOVE 
'Y' TO MAIN.
CASE FUNC.
  WHEN 
'U'.                            "Upload required
    PERFORM READ_DOS_DIRECTORY.
    PERFORM GET_RANGE_UL.              
"Get list of progs to process
  WHEN 
'D'.                            "Download required
    PERFORM GET_RANGE_DL.              
"Get list of progs to process
  WHEN OTHERS.
    WRITE: / 
'Function not performed due to user request'.
    EXIT.
ENDCASE.
SORT I_PROG.
DELETE ADJACENT DUPLICATES FROM I_PROG.
*
* For download INCLUDE handling can be resolved via function
* module call.
* All Includes within Includes are also resolved by the function
* module call.
*
* Note that this method does not work if program itself is of type
* I (it's an include)
* In this case we can still search the source.
*
IF FUNC = 
'D'.
  IF INCLUDES = 
'Y'.
    PERFORM GET_INCLUDES_DL.
    PERFORM PROCESS_INCLUDES_DL.
  ENDIF.
ENDIF.
*
* Program list from selection criteria i.e excluding INCLUDES found
*
LOOP AT I_PROG.
  MOVE I_PROG-NAME TO R1-NAME.
  APPEND R1.
  DESCRIBE TABLE R1 LINES I.
  WHILE I NE 0.
    PERFORM EXECUTE-FUNCTION.
  ENDWHILE.
  REFRESH R1.
ENDLOOP.
*
* We need to check now for INCLUDES on DOWNLOAD when the INCLUDE
* program itself is of type I. In this case the function call
* will not return the INCLUDES. For example we could be
* downloading ZTESTTOP (an Include itself) which as an include
* ZTEST01.
* The process fortunately is the same as the UPLOAD function
* except of course we need to read the library instead of the
* DOS directory
*
* process INCLUDE modules for Upload
* On upload the procedure is more complex as Includes within
* Includes can only be resolved by scanning the code and
* searching if the program exists in the directory.
* To get all INCLUDES within INCLUDES entries in table I_INCL
* that do not exist in I_INCLUDE are copied to table I_INCLUDE
* after each entire pass of table i_INCLUDE and table is then
* re-looped through. Programs in table I_INCLUDE that have already
* been processed have a "Y" indicator set in I_INCLUDE-AVAIL.
*
* if func = 'U'.
IF INCLUDES = 
'Y'.
  DESCRIBE TABLE I_INCL LINES I.
  IF I > 0.
    W_ITERATE = 
'Y'.
  ELSE.
    W_ITERATE = 
' '.
  ENDIF.
  WHILE W_ITERATE = 
'Y'.
    PERFORM PROCESS_INCLUDES_UL.
    PERFORM LOOP_THROUGH.
    DESCRIBE TABLE I_INCL LINES I.
    IF I > 0.
      W_ITERATE = 
'Y'.
    ELSE.
      W_ITERATE = 
' '.
    ENDIF.
  ENDWHILE.
* endif.
ENDIF.
DESCRIBE TABLE I_INCLUDE LINES I.
IF I > 0.
  SKIP 1.
  WRITE: / 
' Included Programs found'.
  SKIP 1.
  LOOP AT I_INCLUDE.
    WRITE I_INCLUDE-NAME TO LINE(40).
    CONDENSE LINE.
    WRITE: / LINE(80).
  ENDLOOP.
ENDIF.
*/******************************************************************/
*/* */
*/* Table R contains ABAP names to up / download. */
*/* Loop through table R and perform up / download */
*/* for each program. */
*/* */
*/* Table R1 contains INCLUDE names found (if any) */
*/* As each */
*/* */
*/******************************************************************/
FORM EXECUTE-FUNCTION.
  LOOP AT R1.
    MOVE-CORRESPONDING R1 TO R.
    APPEND R.
  ENDLOOP.
  REFRESH R1.
  LOOP AT R.
    REFRESH : T, E1, H1, F1, S, U.
    PERFORM PROCESS.
    MOVE 
'N' TO MAIN.
  ENDLOOP.
  REFRESH R.
  DESCRIBE TABLE R1 LINES I.
ENDFORM.
*/******************************************************************/
*/* */
*/* Build file names for UP/DOWNLOAD */
*/* */
*/* 3 files are generated per ABAP. */
*/* 1) ABAP Path\PROGNAME.EEE (ABAP, Attr,Texts) */
*/* Logic Path\PROGNAME.EEE (Dynpro Source Logic) */
*/* CUA Path\PROGNAME.EEE (CUA components - keys etc) */
*/* 2) Header Path\PROGNAME.HHH (Dynpro Header) */
*/* 3) Fields Path\PROGNAME.FFF (Dynpro Field definitions )*/
*/* */
*/* ( If alternate file name specified -DSNAME- this will */
*/* be used instead. This is only valid for the main program. */
*/* INCLUDED programs will have file names as specified */
*/* above). */
*/* */
*/* By using this scheme it saves the user from having to */
*/* be prompted for 3 file names. */
*/* */
*/* If you want multiple copies / versions on disk either */
*/* rename the old versions or specify a different directory in */
*/* the path parameter. */
*/* */
*/******************************************************************/
FORM PROCESS.
  MOVE PATH TO FN1.
  CASE MAIN.
    WHEN 
'Y'.
      IF DSNAME NE SPACE.
        WRITE DSNAME TO FN1+66.                             
"rel 4
      ELSE.
        WRITE R-NAME TO FN1+66.                             
"rel 4
      ENDIF.
    WHEN OTHERS.
      WRITE R-NAME TO FN1+66.                               
"rel 4
  ENDCASE.
  MOVE FN1 TO FN2.
  MOVE FN1 TO FN3.
  WRITE 
'.HHH' TO FN1+124(4).                               "rel 4
  WRITE 
'.FFF' TO FN2+124(4).                               "rel 4
  WRITE 
'.EEE' TO FN3+124(4).                               "rel 4
  CONDENSE FN1 NO-GAPS.
  CONDENSE FN2 NO-GAPS.
  CONDENSE FN3 NO-GAPS.
  NAME   = R-NAME.
  CASE FUNC.
    WHEN 
'D'.
      PERFORM DOWNLOAD_OBJECTS.
      CLEAR LINE.
      WRITE : 
'ABAP : ' TO LINE.
      WRITE R-NAME TO LINE+8.
      WRITE 
'has been unloaded' TO LINE+55.
      CONDENSE LINE.
      WRITE: / LINE.
      DESCRIBE TABLE T LINES I.
      IF I = 0.
        WRITE: / 
'No Dynpros were found for unload function'.
      ELSE.
        WRITE: / 
'The following Dynpros have been unloaded : '.
        PERFORM LOOP_THROUGH_T.
      ENDIF.
    WHEN 
'U'.
      PERFORM UPLOAD_OBJECTS.
      DESCRIBE TABLE T LINES I.
      CASE I.
        WHEN 0.
          WRITE:  / 
'No Dynpros were found for restore function'.
        WHEN OTHERS.
          WRITE: / 
'The following Dynpros have been restored : '.
          PERFORM LOOP_THROUGH_T.
      ENDCASE.
      IF MAIN EQ 
'Y'.
        CASE OLDNAME.
          WHEN SPACE.
            CLEAR LINE.
            WRITE : 
'ABAP : ' TO LINE.
            WRITE R-NAME TO LINE+8.
            WRITE 
'has been restored' TO LINE+55.
            CONDENSE LINE.
            WRITE: / LINE.
          WHEN OTHERS.
            CLEAR LINE.
            WRITE :