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. */ */* */ */******************************************************************/ DATA: BEGIN OF H. "Header INCLUDE STRUCTURE D020S. DATA: END OF H. DATA: BEGIN OF H1 OCCURS 10, "Header NAME(40) TYPE C, "rel 4 NUMBER(4) TYPE N. INCLUDE STRUCTURE D020S. DATA: END OF H1. DATA: BEGIN 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. DATA: BEGIN OF F OCCURS 250. "Dynpro Fields INCLUDE STRUCTURE D021S. DATA: END OF F. DATA: BEGIN OF F1 OCCURS 500, "Dynpro Fields NAME(40) TYPE C, "rel 4 NUMBER(4) TYPE N. INCLUDE STRUCTURE D021S. DATA: END OF F1. DATA: BEGIN OF OLD_F1 OCCURS 0, "Dynpro Fields (rel 3) NAME(8) TYPE C, NUMBER(4) TYPE C. INCLUDE STRUCTURE D021SE_OLD. DATA: END OF OLD_F1. DATA: BEGIN OF F2 OCCURS 0, "Dynpro Fields (rel 3) TFIL(284) TYPE C, END OF F2. DATA: BEGIN OF M OCCURS 3. "Match codes (if any) INCLUDE STRUCTURE D023S. DATA: END OF M. DATA: BEGIN OF E OCCURS 0. "Dynpro Logic INCLUDE STRUCTURE D022S. DATA: END OF E. DATA: BEGIN OF E1 OCCURS 0, "Dynpro Logic NAME(40) TYPE C, "rel 4 NUMBER(4) TYPE N. INCLUDE STRUCTURE D022S. DATA: END OF E1. DATA: BEGIN OF T OCCURS 0, "prog name and dynpro nrs NAME(40) TYPE C, "rel 4 NUMBER(4) TYPE N, END OF T. DATA: BEGIN OF R OCCURS 56, "prog name and language NAME(40) TYPE C, "rel 4 LANGUAGE(1) TYPE C, END OF R. DATA: BEGIN OF S OCCURS 3000, TXT(180) TYPE C, "rel 4 was 132 END OF S. DATA: BEGIN OF R1 OCCURS 50, "for include programs NAME(40) TYPE C, "rel 4 INSTANCE(3) TYPE P, END OF R1. DATA: BEGIN OF S1 OCCURS 3000, TXT(180) TYPE C, " rel 4 was 132 END OF S1. DATA: BEGIN OF U OCCURS 100, "Text elements TXT(180) TYPE C, " rel 4 was 132 END OF U. DATA: BEGIN OF DIR. "ABAP Attributes INCLUDE STRUCTURE TRDIR. DATA: END OF DIR. DATA: BEGIN OF DTXT. "Dynpro field keyword texts INCLUDE STRUCTURE D021T. DATA: END 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 DATA: BEGIN OF TIT OCCURS 0. INCLUDE STRUCTURE RSMPE_TITT. "rel 4.0 DATA: END 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 DATA: BEGIN OF OLD_TIT OCCURS 0. INCLUDE STRUCTURE TITLE. "rel 3.1 DATA: END 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) * DATA: BEGIN OF T_BDC_TAB OCCURS 0. INCLUDE STRUCTURE BDCDATA. "BDC data DATA: END OF T_BDC_TAB. DATA: BEGIN OF T_MESSTAB OCCURS 0. INCLUDE STRUCTURE BDCDATA. DATA: END 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.
DATA: BEGIN OF DOSDIR OCCURS 0, TEXT(72), END OF DOSDIR.
DATA: BEGIN OF I_PROG OCCURS 0, NAME(40), END OF I_PROG.
DATA: BEGIN OF I_PROGT OCCURS 0, NAME(40), END OF I_PROGT.
DATA: BEGIN OF I_INCLUDE OCCURS 0, NAME(40), HANDLED(1) TYPE C, END OF I_INCLUDE.
DATA: BEGIN OF I_INCL OCCURS 0, NAME(40), END OF I_INCL.
DATA: BUFFER(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 : |