Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

Download Modulepool program

Can we download module pool at one tine or we have to download each & every screen individually.

How can we dowload the module pool progam at one time.Plz guide.

Regards,

Vibhuti

Tags:
Former Member
Former Member replied

Hi Vibhuti,

http://www.sap-img.com/abap/download-and-upload-your-abap-program.htm

visit http://www.dalestech.com

Can check these links also.

http://sap.ittoolbox.com/code/archives.asp?d=1623&a=s&i=10

http://www.members.tripod.com/abap4/Upload_and_Download_ABAP_Source_Code.html

http://www.geocities.com/rmtiwari/Resources/Utilities/WebViewer.html

http://sap.ittoolbox.com/code/archives.asp?d=3333&a=s&i=10

http://www.sap-img.com/abap/download-and-upload-your-abap-program.htm

Hope it is helpful.

Manish

Download program and Classes.Download program and Classes.

ZREPTRAN_46C appears to allow downloading of classes

http://www.xaption.de/downloads/developer/index.php?Xaption=cd4ab5a11a5c26d34de38ed675bb6541

http://wiki.ittoolbox.com/index.php/Code:Download_and_upload_OO_ABAP_class_in_XML_format

Refer the code below. This should solve the purpose.

&----


*& Report ZZJIMHX *

*& *

&----


*& *

*& *

&----


PROGRAM ZZJIMHXX

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: U LIKE TEXTPOOL OCCURS 0 WITH HEADER LINE.

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

CONCATENATE FN1 DSNAME INTO FN1.

ELSE.

  • WRITE R-NAME TO FN1+66. "rel 4

CONCATENATE FN1 R-NAME INTO FN1.

ENDIF.

WHEN OTHERS.

  • WRITE R-NAME TO FN1+66. "rel 4

CONCATENATE FN1 R-NAME INTO FN1.

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

CONCATENATE FN1 '.HHH' INTO FN1.

CONCATENATE FN2 '.FFF' INTO FN2.

CONCATENATE FN3 '.EEE' INTO FN3.

  • 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 : 'ABAP : ' TO LINE.

WRITE R-NAME TO LINE+8.

WRITE 'has been restored - original name :'

TO LINE+55.

WRITE OLDNAME TO LINE+92.

CONDENSE LINE.

WRITE: / LINE.

ENDCASE.

ELSE.

CLEAR LINE.

WRITE : 'ABAP : ' TO LINE.

WRITE R-NAME TO LINE+8.

WRITE 'has been restored' TO LINE+55.

CONDENSE LINE.

WRITE: / LINE.

ENDIF.

ENDCASE.

ENDFORM.

/*****************************************************************/

/ */

/ print progname + dynpro nrs that have been processed. */

/ */

/*****************************************************************/

FORM LOOP_THROUGH_T.

LOOP AT T.

CLEAR LINE.

WRITE R-NAME TO LINE.

WRITE T-NUMBER TO LINE+50.

CONDENSE LINE.

WRITE: / LINE.

ENDLOOP.

ENDFORM.

/*****************************************************************/

/ */

/ Download Objects */

/ */

/*****************************************************************/

FORM DOWNLOAD_OBJECTS.

PERFORM UNLOAD_ABAP. "ABAP source, texts, attr

SELECT SINGLE * FROM TRDIR

WHERE NAME EQ R-NAME.

IF TRDIR-SUBC = 'I'.

CASE INCLUDES. "Included file wanted

WHEN 'Y'.

PERFORM SCAN4-INCLUDES.

ENDCASE.

ENDIF.

PERFORM UNLOAD_CUA. "CUA stuff

PERFORM DOWNLOAD_DATA. "Download EEE file to PC

PERFORM BUILD_T. "Build table of all dynpros in ABAP

DESCRIBE TABLE T LINES I.

CASE I.

WHEN 0. "if no dynpros exist then cannot download any

PERFORM DOWNLOAD_DATA. "Download EEE file to PC

WHEN OTHERS.

PERFORM UNLOAD_DYNPROS. "Get Raw dynpros from SAP

PERFORM UNLOAD_DYNPRO_COMPONENTS."Convert to table

PERFORM DOWNLOAD_DATA. "Download ABAP etc. to PC

PERFORM DOWNLOAD_BIN_H1. "Download dynpro header

PERFORM DOWNLOAD_BIN_F1. "Download dynpro fields

ENDCASE.

ENDFORM.

/*****************************************************************/

/ */

/ Split ABAP up into its component parts */

/ */

/ A) Program source (72) */

/ B) Texts (132) */

/ C) Attributes (117) */

/ D) CUA stuff (Various) */

/ */

/*****************************************************************/

FORM UNLOAD_ABAP.

/*****************************************************************/

/ */

/ Get ABAP language. Only required on download. */

/ */

/*****************************************************************/

SELECT SINGLE * FROM TRDIR

WHERE NAME EQ R-NAME.

MOVE TRDIR-RLOAD TO R-LANGUAGE.

READ REPORT R-NAME INTO S. "Get source into table S

MOVE '????SRCE' TO S-TXT.

INSERT S INDEX 1.

/*****************************************************************/

/ */

/ Text elements, Numbered texts, headings, selection texts */

/ Read text elements with logon language. If they don't */

/ exist read with the value taken from TRDIR. */

/ */

/*****************************************************************/

READ TEXTPOOL R-NAME INTO U LANGUAGE SY-LANGU.

IF SY-SUBRC NE 0.

READ TEXTPOOL R-NAME INTO U LANGUAGE R-LANGUAGE.

ENDIF.

DESCRIBE TABLE U LINES I.

CASE I.

WHEN 0.

WHEN OTHERS.

MOVE '????TEXT' TO S-TXT.

APPEND S.

LOOP AT U.

MOVE U-ID TO S-TXT(1).

MOVE U-KEY TO S-TXT+1(8).

  • CONDENSE U-ENTRY.

MOVE U-ENTRY TO S-TXT+9(171).

APPEND S.

DELETE U.

ENDLOOP.

ENDCASE.

/*****************************************************************/

/ */

/ Retrieve Attributes from TRDIR and add to table S */

/ Change language to logged on language */

/ */

/*****************************************************************/

MOVE '????ATTR' TO S-TXT.

APPEND S.

SELECT SINGLE * FROM TRDIR

WHERE NAME EQ R-NAME.

MOVE SY-LANGU TO TRDIR-RLOAD.

MOVE-CORRESPONDING TRDIR TO DIR.

MOVE DIR TO S-TXT.

APPEND S.

ENDFORM.

/*****************************************************************/

/ */

/ retrieve CUA stuff and append to table S. */

/ */

/*****************************************************************/

FORM UNLOAD_CUA.

MOVE R-NAME TO EU_KEY-NAME. "Program name for CUA

MOVE 'D' TO EU_KEY-SPRSL. "CUA seems to want D as lang

  • MOVE R-LANGUAGE TO EU_KEY-SPRSL. "Language "rel 2.2

  • IMPORT STA FUN MEN MTX ACT BUT PFK SET LAST INC STX DOC "rel 2.2

IMPORT STA STX FUN MEN MTX ACT BUT PFK SET LAST INC DOC "rel 3.0

ATT FDN MDN SYM FIN "rel 3.0

FROM DATABASE EUDB(CU) ID EU_KEY.

IF SY-SUBRC NE 0. "No statuses

EXIT.

ENDIF.

  • read titles in logged on language. If not present use

  • language from TRDIR.

CASE REL3.

WHEN SPACE. "(rel 4)

SELECT * FROM RSMPTEXTS WHERE PROGNAME EQ R-NAME

AND SPRSL = SY-LANGU.

MOVE-CORRESPONDING RSMPTEXTS TO FTX.

APPEND FTX.

ENDSELECT.

IF SY-SUBRC NE 0.

SELECT * FROM RSMPTEXTS WHERE PROGNAME EQ R-NAME

AND SPRSL = R-LANGUAGE.

MOVE-CORRESPONDING RSMPTEXTS TO FTX.

APPEND FTX.

ENDSELECT.

ENDIF.

DESCRIBE TABLE FTX LINES I.

IF I > 0.

MOVE '????FTXT' TO S-TXT.

APPEND S.

LOOP AT FTX.

MOVE FTX TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

WHEN OTHERS.

SELECT * FROM TITLE WHERE PROGNAME EQ R-NAME

AND DDLANGUAGE EQ SY-LANGU.

MOVE-CORRESPONDING TITLE TO TIT.

APPEND TIT.

ENDSELECT.

IF SY-SUBRC NE 0.

SELECT * FROM TITLE WHERE PROGNAME EQ R-NAME

AND DDLANGUAGE EQ R-LANGUAGE.

MOVE-CORRESPONDING TITLE TO TIT.

APPEND TIT.

ENDSELECT.

ENDIF.

ENDCASE.

DESCRIBE TABLE STA LINES I.

IF I > 0.

MOVE '????STAT' TO S-TXT.

APPEND S.

LOOP AT STA.

MOVE STA TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE FUN LINES I.

IF I > 0.

MOVE '????FUNC' TO S-TXT.

APPEND S.

LOOP AT FUN.

MOVE FUN TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE MEN LINES I.

IF I > 0.

MOVE '????MEN1' TO S-TXT.

APPEND S.

LOOP AT MEN.

MOVE MEN TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE MTX LINES I.

IF I > 0.

MOVE '????MTX1' TO S-TXT.

APPEND S.

LOOP AT MTX.

MOVE MTX TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE ACT LINES I.

IF I > 0.

MOVE '????ACTN' TO S-TXT.

APPEND S.

LOOP AT ACT.

MOVE ACT TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE BUT LINES I.

IF I > 0.

MOVE '????BUTN' TO S-TXT.

APPEND S.

LOOP AT BUT.

MOVE BUT TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE PFK LINES I.

IF I > 0.

MOVE '????PFKY' TO S-TXT.

APPEND S.

LOOP AT PFK.

MOVE PFK TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE SET LINES I.

IF I > 0.

MOVE '????SETS' TO S-TXT.

APPEND S.

LOOP AT SET.

MOVE SET TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

IF LAST NE SPACE.

MOVE '????LIST' TO S-TXT.

APPEND S.

MOVE LAST TO S-TXT.

APPEND S.

ENDIF.

DESCRIBE TABLE INC LINES I.

IF I > 0.

MOVE '????INCL' TO S-TXT.

APPEND S.

LOOP AT INC.

MOVE INC TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE STX LINES I.

IF I > 0.

MOVE '????STXT' TO S-TXT.

APPEND S.

LOOP AT STX.

MOVE STX TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE DOC LINES I.

IF I > 0.

MOVE '????DOCN' TO S-TXT.

APPEND S.

LOOP AT DOC.

MOVE DOC TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE TIT LINES I.

IF I > 0.

MOVE '????TITL' TO S-TXT.

APPEND S.

LOOP AT TIT.

MOVE TIT TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

  • Next 5 tables are rel 3.0 specific (ATT, FDN, MDN, SYM, FIN)

DESCRIBE TABLE ATT LINES I.

IF I > 0.

MOVE '????VATT' TO S-TXT.

APPEND S.

LOOP AT ATT.

MOVE ATT TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE FDN LINES I.

IF I > 0.

MOVE '????VFDN' TO S-TXT.

APPEND S.

LOOP AT FDN.

MOVE FDN TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE MDN LINES I.

IF I > 0.

MOVE '????VMDN' TO S-TXT.

APPEND S.

LOOP AT MDN.

MOVE MDN TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE SYM LINES I.

IF I > 0.

MOVE '????VSYM' TO S-TXT.

APPEND S.

LOOP AT SYM.

MOVE SYM TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

DESCRIBE TABLE FIN LINES I.

IF I > 0.

MOVE '????VFIN' TO S-TXT.

APPEND S.

LOOP AT FIN.

MOVE FIN TO S-TXT.

APPEND S.

ENDLOOP.

ENDIF.

ENDFORM.

/*****************************************************************/

/ */

/ Upload Objects. */

/ */

/*****************************************************************/

FORM UPLOAD_OBJECTS.

PERFORM UPLOAD_EEE. "ABAP,texts,attr dynpro logic

DESCRIBE TABLE E1 LINES I.

IF I > 0. "Do dynpro components exist

PERFORM UPLOAD_HHH. "dynpro header

PERFORM UPLOAD_FFF. "dynpro fields.

PERFORM RECONSTRUCT_DYNPROS. "load + gen dynpros

ENDIF.

ENDFORM.

/*****************************************************************/

/ */

/ Build table containing dynpro names and numbers */

/ */

/*****************************************************************/

FORM BUILD_T.

SELECT * FROM D020S WHERE PROG EQ R-NAME.

T-NUMBER = D020S-DNUM.

T-NAME = D020S-PROG.

APPEND T.

ENDSELECT.

ENDFORM.

/*****************************************************************/

/ */

/ Split dynpros into constituent parts. */

/ */

/*****************************************************************/

FORM UNLOAD_DYNPROS.

MOVE 'Y' TO FIRST-TIME.

LOOP AT T.

REFRESH: F, E.

CLEAR: H, F, E.

PERFORM BUILD_HHH. "Dynpro Header

PERFORM BUILD_FFF. "Dynpro Fields

PERFORM BUILD_EEE_DYNP. "Dynpro Logic

ENDLOOP.

ENDFORM.

/*****************************************************************/

/ */

/ Header H length 284. */

/ */

/*****************************************************************/

FORM BUILD_HHH.

MOVE T-NAME TO DYNNAME(40). "rel 4.

MOVE T-NUMBER TO DYNNAME+40(4). "rel 4.

IMPORT DYNPRO H F E M ID DYNNAME.

MOVE T-NAME TO H1-NAME.

MOVE T-NUMBER TO H1-NUMBER.

MOVE-CORRESPONDING H TO H1.

APPEND H1.

ENDFORM.

/*****************************************************************/

/ */

/ Fields D021S Len 87. */

/ */

/*****************************************************************/

FORM BUILD_FFF.

MOVE T-NAME TO F1-NAME.

MOVE T-NUMBER TO F1-NUMBER.

LOOP AT F.

MOVE-CORRESPONDING F TO F1.

APPEND F1.

DELETE F.

ENDLOOP.

ENDFORM.

/*****************************************************************/

/ */

/ Dynpro Logic D022S E */

/ */

/*****************************************************************/

FORM BUILD_EEE_DYNP.

MOVE T-NAME TO E1-NAME.

MOVE T-NUMBER TO E1-NUMBER.

LOOP AT E.

MOVE-CORRESPONDING E TO E1.

APPEND E1.

DELETE E.

ENDLOOP.

ENDFORM.

/*****************************************************************/

/ */

/ Unload Constituent parts of dynpro. */

/ */

/*****************************************************************/

FORM UNLOAD_DYNPRO_COMPONENTS.

MOVE '????LOGC' TO S-TXT.

APPEND S.

LOOP AT E1.

MOVE E1 TO S-TXT.

APPEND S.

DELETE E1.

ENDLOOP.

FREE E1.

LOOP AT T.

MOVE 'N' TO FOUND.

SELECT SINGLE * FROM D020T "use logged on language

WHERE PROG EQ T-NAME

AND DYNR EQ T-NUMBER

AND LANG EQ SY-LANGU.

IF SY-SUBRC NE 0. "try original language.

SELECT SINGLE * FROM D020T

WHERE PROG EQ T-NAME

AND DYNR EQ T-NUMBER

AND LANG EQ R-LANGUAGE.

ENDIF.

IF SY-SUBRC EQ 0.

IF FOUND = 'N'.

MOVE '????DTIT' TO S-TXT.

APPEND S.

MOVE 'Y' TO FOUND.

ENDIF.

MOVE T-NAME TO S-TXT.

WRITE T-NUMBER TO S-TXT+8(4).

WRITE D020T-DTXT TO S-TXT+12(60).

APPEND S.

ENDIF.

MOVE 'N' TO FOUND.

SELECT * FROM D021T

WHERE PROG EQ T-NAME

AND DYNR EQ T-NUMBER

AND LANG EQ SY-LANGU. "logged on language

IF FOUND = 'N'.

MOVE '????DTXT' TO S-TXT.

APPEND S.

MOVE 'Y' TO FOUND.

ENDIF.

MOVE-CORRESPONDING D021T TO DTXT.

MOVE DTXT TO S-TXT.

APPEND S.

ENDSELECT.

CASE SY-SUBRC.

WHEN 0.

WHEN OTHERS. "try original language

SELECT * FROM D021T

WHERE PROG EQ T-NAME

AND DYNR EQ T-NUMBER

AND LANG EQ R-LANGUAGE.

IF FOUND = 'N'.

MOVE '????DTXT' TO S-TXT.

APPEND S.

MOVE 'Y' TO FOUND.

ENDIF.

MOVE-CORRESPONDING D021T TO DTXT.

MOVE DTXT TO S-TXT.

APPEND S.

ENDSELECT.

ENDCASE.

ENDLOOP.

ENDFORM.

/*****************************************************************/

/ */

/ Build the original dynpro component tables. */

/ Table H1 contains 1 entry for each dynpro. H1 contains */

/ the header for the dynpro prefixed by the program name */

/ and dynpro number. */

/ By looping round this table we can re-build the F */

/ (Fields) and E (Logic) components. By stripping off the */

/ program name and dynpro number the original tables are */

/ re-created. (Tables F1 and E1 also have a prefix of */

/ Program name and dynpro nr). */

/ After the original set of tables has been re-created we */

/ use R3 - SYSTEM-CALL (rel 2.2) to generate the screen */

/ and then get the next entry in table H1 to build the */

/ next screen. For releases 3.0 and higher use generate */

/ dynpro. */

/ */

/*****************************************************************/

FORM RECONSTRUCT_DYNPROS.

LOOP AT H1.

CASE MAIN.

WHEN 'Y'.

  • if h1-name ne repid.

IF H1-NAME NE R1-NAME.

MOVE H1-NAME TO OLDNAME.

ENDIF.

ENDCASE.

PERFORM RECONSTRUCT_F.

PERFORM RECONSTRUCT_E.

MOVE-CORRESPONDING H1 TO H.

IF MAIN = 'Y'.

  • move repid to h-prog.

MOVE R1-NAME TO H-PROG.

  • move repid to dynname.

MOVE R1-NAME TO DYNNAME.

ELSE.

MOVE H1-NAME TO H-PROG.

MOVE H1-NAME TO DYNNAME.

ENDIF.

MOVE H1-NUMBER TO H-DNUM.

WRITE H1-NUMBER TO DYNNAME+40(4).

EXPORT DYNPRO H F E M ID DYNNAME.

  • SYSTEM-CALL GENERATE-SCREEN DYNNAME. "Up to rel 2.2

GENERATE DYNPRO H F E M ID DYNNAME "R 3.0, 4.0, 4.5

MESSAGE DYNPRO_MESSAGE

LINE DYNPRO_LINE

WORD DYNPRO_WORD.

REFRESH: M, F, E.

CLEAR: M, H, F, E.

ENDLOOP.

ENDFORM.

/*****************************************************************/

/ */

/ Re-build Fields table */

/ */

/*****************************************************************/

FORM RECONSTRUCT_F.

LOOP AT F1 WHERE NAME EQ H1-NAME AND

NUMBER EQ H1-NUMBER.

MOVE-CORRESPONDING F1 TO F.

APPEND F.

ENDLOOP.

ENDFORM.

/*****************************************************************/

/ */

/ Re-build Logic table */

/ */

/*****************************************************************/

FORM RECONSTRUCT_E.

LOOP AT E1 WHERE NAME EQ H1-NAME AND

NUMBER EQ H1-NUMBER.

MOVE-CORRESPONDING E1 TO E.

APPEND E.

ENDLOOP.

ENDFORM.

/*****************************************************************/

/ */

/ scan for included files (Upload) */

/ */

/*****************************************************************/

FORM SCAN4-INCLUDES.

IF FUNC = 'D'. "Downloads - whole table needs to be scanned

LOOP AT S.

PERFORM SEARCH-FUNC.

ENDLOOP.

ENDIF.

IF FUNC = 'U'. "On upload scan line by line as we are re-building abap

PERFORM SEARCH-FUNC.

ENDIF.

ENDFORM.

/*****************************************************************/

/ */

/ scan for text INCLUDE xxxxxxxx */

/ reject INCLUDE STRUCTURE as structure not a valid */

/ program name */

/ */

/*****************************************************************/

FORM SEARCH-FUNC.

CONDENSE S-TXT.

SEARCH S-TXT FOR '.INCLUDE .'.

CASE SY-SUBRC.

WHEN 0.

IF S-TXT+8(9) EQ 'STRUCTURE'

OR S-TXT+8(9) EQ 'structure'

OR S-TXT+8(6) EQ '<ICON>' "rel 3.0c 3.0d

OR S-TXT+8(6) EQ '<icon>'

OR S-TXT+8(6) EQ '<type>'

OR S-TXT+8(6) EQ '<TYPE>'

OR S-TXT+8(9) EQ '<methods>'

OR S-TXT+8(9) EQ '<METHODS>'.

EXIT.

ENDIF.

IF SY-FDPOS EQ 0. "INCLUDE must be in pos 1 (by reason of condense)

PERFORM VALIDATE_INCLUDE.

ELSE.

EXIT.

ENDIF.

ENDCASE.

ENDFORM.

/*****************************************************************/

/ */

/ Validate INCLUDES . */

/ */

/*****************************************************************/

FORM VALIDATE_INCLUDE.

SEARCH S-TXT FOR '...' STARTING AT 9 ENDING AT 39.

CASE SY-SUBRC.

WHEN 0.

WHEN OTHERS.

SEARCH S-TXT FOR '. .' STARTING AT 9 ENDING AT 38.

IF SY-SUBRC NE 0.

EXIT.

ENDIF.

ENDCASE.

IX = SY-FDPOS.

ASSIGN S-TXT+8(IX) TO <F>.

  • Now check for Include Mask for example if include mask was set to

  • Z* then only include programs whose first letter starts with a Z.

*

  • 1) get length of the INCLUDE program name. Must be less than or

  • equal 40.

  • 2) Compare it with the Include mask.

  • 3) If Ok add include program name to include table

  • clear i_include.

  • move <f> to i_include-name.

CLEAR I_INCL.

SEARCH IMASK FOR '.*.'.

IF SY-SUBRC = 0.

CONDENSE IMASK.

ENDIF.

IF ( <F> CP IMASK OR IMASK = ' ' ).

READ TABLE I_INCL WITH KEY = <F>.

IF SY-SUBRC NE 0.

MOVE <F> TO I_INCL-NAME.

  • move 1 to i_include-count.

  • collect i_include.

APPEND I_INCL.

ENDIF.

ENDIF.

ENDFORM.

/*****************************************************************/

/ */

/ Download table S. */

/ */

/*****************************************************************/

FORM DOWNLOAD_DATA.

CLEAR TXLINE.

WRITE 'Downloading ' TO TXLINE.

WRITE R1-NAME TO TXLINE+12.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

  • PERCENTAGE = 0

TEXT = TXLINE

EXCEPTIONS

OTHERS = 1.

  • CALL FUNCTION 'WS_DOWNLOAD'

  • EXPORTING

  • FILENAME = FN3

  • FILETYPE = 'ASC'

  • TABLES

  • DATA_TAB = S.

DATA: L_FILE TYPE STRING.

CLEAR: L_FILE.

MOVE FN3 TO L_FILE.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

  • BIN_FILESIZE =

FILENAME = L_FILE

  • FILETYPE = 'ASC'

  • APPEND = ' '

  • WRITE_FIELD_SEPARATOR = ' '

  • HEADER = '00'

  • TRUNC_TRAILING_BLANKS = ' '

  • WRITE_LF = 'X'

  • COL_SELECT = ' '

  • COL_SELECT_MASK = ' '

  • DAT_MODE = ' '

  • CONFIRM_OVERWRITE = ' '

  • NO_AUTH_CHECK = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • WRITE_BOM = ' '

  • TRUNC_TRAILING_BLANKS_EOL = 'X'

  • WK1_N_FORMAT = ' '

  • WK1_N_SIZE = ' '

  • WK1_T_FORMAT = ' '

  • WK1_T_SIZE = ' '

  • IMPORTING

  • FILELENGTH =

TABLES

DATA_TAB = S

  • FIELDNAMES =

EXCEPTIONS

FILE_WRITE_ERROR = 1

NO_BATCH = 2

GUI_REFUSE_FILETRANSFER = 3

INVALID_TYPE = 4

NO_AUTHORITY = 5

UNKNOWN_ERROR = 6

HEADER_NOT_ALLOWED = 7

SEPARATOR_NOT_ALLOWED = 8

FILESIZE_NOT_ALLOWED = 9

HEADER_TOO_LONG = 10

DP_ERROR_CREATE = 11

DP_ERROR_SEND = 12

DP_ERROR_WRITE = 13

UNKNOWN_DP_ERROR = 14

ACCESS_DENIED = 15

DP_OUT_OF_MEMORY = 16

DISK_FULL = 17

DP_TIMEOUT = 18

FILE_NOT_FOUND = 19

DATAPROVIDER_EXCEPTION = 20

CONTROL_FLUSH_ERROR = 21

OTHERS = 22.

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.

/*****************************************************************/

/ */

/ Download Binary files H1 */

/ */

/*****************************************************************/

FORM DOWNLOAD_BIN_H1.

DESCRIBE FIELD H1 LENGTH J IN BYTE MODE.

DESCRIBE TABLE H1 LINES I.

NR_OF_BYTES = I * J.

  • CALL FUNCTION 'WS_DOWNLOAD'

  • EXPORTING

  • FILENAME = FN1

  • FILETYPE = 'BIN'

  • BIN_FILESIZE = NR_OF_BYTES

  • IMPORTING

  • FILELENGTH = FILESIZE

  • TABLES

  • DATA_TAB = H1.

DATA: L_FILE TYPE STRING.

CLEAR: L_FILE.

MOVE FN1 TO L_FILE.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

  • BIN_FILESIZE =

FILENAME = L_FILE

FILETYPE = 'BIN'

  • APPEND = ' '

  • WRITE_FIELD_SEPARATOR = ' '

  • HEADER = '00'

  • TRUNC_TRAILING_BLANKS = ' '

  • WRITE_LF = 'X'

  • COL_SELECT = ' '

  • COL_SELECT_MASK = ' '

  • DAT_MODE = ' '

  • CONFIRM_OVERWRITE = ' '

  • NO_AUTH_CHECK = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • WRITE_BOM = ' '

  • TRUNC_TRAILING_BLANKS_EOL = 'X'

  • WK1_N_FORMAT = ' '

  • WK1_N_SIZE = ' '

  • WK1_T_FORMAT = ' '

  • WK1_T_SIZE = ' '

  • IMPORTING

  • FILELENGTH =

TABLES

DATA_TAB = H1

  • FIELDNAMES =

EXCEPTIONS

FILE_WRITE_ERROR = 1

NO_BATCH = 2

GUI_REFUSE_FILETRANSFER = 3

INVALID_TYPE = 4

NO_AUTHORITY = 5

UNKNOWN_ERROR = 6

HEADER_NOT_ALLOWED = 7

SEPARATOR_NOT_ALLOWED = 8

FILESIZE_NOT_ALLOWED = 9

HEADER_TOO_LONG = 10

DP_ERROR_CREATE = 11

DP_ERROR_SEND = 12

DP_ERROR_WRITE = 13

UNKNOWN_DP_ERROR = 14

ACCESS_DENIED = 15

DP_OUT_OF_MEMORY = 16

DISK_FULL = 17

DP_TIMEOUT = 18

FILE_NOT_FOUND = 19

DATAPROVIDER_EXCEPTION = 20

CONTROL_FLUSH_ERROR = 21

OTHERS = 22.

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.

/*****************************************************************/

/ */

/ Download Binary files F1 */

/ */

/*****************************************************************/

FORM DOWNLOAD_BIN_F1.

DESCRIBE FIELD F1 LENGTH J IN BYTE MODE.

DESCRIBE TABLE F1 LINES I.

NR_OF_BYTES = I * J.

  • CALL FUNCTION 'WS_DOWNLOAD'

  • EXPORTING

  • FILENAME = FN2

  • FILETYPE = 'BIN'

  • BIN_FILESIZE = NR_OF_BYTES

  • IMPORTING

  • FILELENGTH = FILESIZE

  • TABLES

  • DATA_TAB = F1.

DATA: L_FILE TYPE STRING.

CLEAR: L_FILE.

MOVE FN2 TO L_FILE.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

  • BIN_FILESIZE =

FILENAME = L_FILE

FILETYPE = 'BIN'

  • APPEND = ' '

  • WRITE_FIELD_SEPARATOR = ' '

  • HEADER = '00'

  • TRUNC_TRAILING_BLANKS = ' '

  • WRITE_LF = 'X'

  • COL_SELECT = ' '

  • COL_SELECT_MASK = ' '

  • DAT_MODE = ' '

  • CONFIRM_OVERWRITE = ' '

  • NO_AUTH_CHECK = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • WRITE_BOM = ' '

  • TRUNC_TRAILING_BLANKS_EOL = 'X'

  • WK1_N_FORMAT = ' '

  • WK1_N_SIZE = ' '

  • WK1_T_FORMAT = ' '

  • WK1_T_SIZE = ' '

  • IMPORTING

  • FILELENGTH =

TABLES

DATA_TAB = F1

  • FIELDNAMES =

EXCEPTIONS

FILE_WRITE_ERROR = 1

NO_BATCH = 2

GUI_REFUSE_FILETRANSFER = 3

INVALID_TYPE = 4

NO_AUTHORITY = 5

UNKNOWN_ERROR = 6

HEADER_NOT_ALLOWED = 7

SEPARATOR_NOT_ALLOWED = 8

FILESIZE_NOT_ALLOWED = 9

HEADER_TOO_LONG = 10

DP_ERROR_CREATE = 11

DP_ERROR_SEND = 12

DP_ERROR_WRITE = 13

UNKNOWN_DP_ERROR = 14

ACCESS_DENIED = 15

DP_OUT_OF_MEMORY = 16

DISK_FULL = 17

DP_TIMEOUT = 18

FILE_NOT_FOUND = 19

DATAPROVIDER_EXCEPTION = 20

CONTROL_FLUSH_ERROR = 21

OTHERS = 22.

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.

/*****************************************************************/

/ */

/ Upload data from file .EEE */

/ */

/*****************************************************************/

FORM UPLOAD_EEE.

CLEAR TXLINE.

WRITE 'Uploading ' TO TXLINE.

WRITE R1-NAME TO TXLINE+10.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

  • PERCENTAGE = 0

TEXT = TXLINE

EXCEPTIONS

OTHERS = 1.

MOVE 'Y' TO FIRST-TIME.

  • CALL FUNCTION 'WS_UPLOAD'

  • EXPORTING

  • FILENAME = FN3

  • FILETYPE = 'ASC'

  • IMPORTING

  • FILELENGTH = NR_OF_BYTES

  • TABLES

  • DATA_TAB = S1.

DATA: L_FILE TYPE STRING.

CLEAR: L_FILE.

MOVE FN3 TO L_FILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = L_FILE

  • FILETYPE = 'ASC'

  • HAS_FIELD_SEPARATOR = ' '

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = S1

EXCEPTIONS

FILE_OPEN_ERROR = 1

FILE_READ_ERROR = 2

NO_BATCH = 3

GUI_REFUSE_FILETRANSFER = 4

INVALID_TYPE = 5

NO_AUTHORITY = 6

UNKNOWN_ERROR = 7

BAD_DATA_FORMAT = 8

HEADER_NOT_ALLOWED = 9

SEPARATOR_NOT_ALLOWED = 10

HEADER_TOO_LONG = 11

UNKNOWN_DP_ERROR = 12

ACCESS_DENIED = 13

DP_OUT_OF_MEMORY = 14

DISK_FULL = 15

DP_TIMEOUT = 16

OTHERS = 17.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

LOOP AT S1.

IF S1-TXT(4) = '????'.

MOVE S1-TXT(8) TO NEW-FUNC.

IF FIRST-TIME = 'Y'.

MOVE S1-TXT(8) TO OLD-FUNC.

MOVE 'N' TO FIRST-TIME.

ELSE.

PERFORM STORE_COMPONENT.

MOVE NEW-FUNC TO OLD-FUNC.

ENDIF.

ENDIF.

IF S1-TXT(4) NE '????'.

PERFORM REBUILD-COMPONENT.

ENDIF.

ENDLOOP.

PERFORM STORE_COMPONENT. "last component still to be processed

PERFORM REBUILD-CUA. "re-build CUA, statuses, pfk etc

ENDFORM.

/*****************************************************************/

/ */

/ Upload Dynpro headers (HHH) and fields (FFF) */

/ titles and dynpro logic is contained in file .EEE */

/ and has already been processed. */

/ */

/*****************************************************************/

FORM UPLOAD_HHH.

DATA: L_FILE TYPE STRING.

CASE REL3.

WHEN 'X'.

  • CALL FUNCTION 'WS_UPLOAD'

  • EXPORTING

  • FILENAME = FN1

  • FILETYPE = 'BIN'

  • IMPORTING

  • FILELENGTH = NR_OF_BYTES

  • TABLES

  • DATA_TAB = H2.

CLEAR: L_FILE.

MOVE FN1 TO L_FILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = L_FILE

FILETYPE = 'BIN'

  • HAS_FIELD_SEPARATOR = ' '

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = H2

EXCEPTIONS

FILE_OPEN_ERROR = 1

FILE_READ_ERROR = 2

NO_BATCH = 3

GUI_REFUSE_FILETRANSFER = 4

INVALID_TYPE = 5

NO_AUTHORITY = 6

UNKNOWN_ERROR = 7

BAD_DATA_FORMAT = 8

HEADER_NOT_ALLOWED = 9

SEPARATOR_NOT_ALLOWED = 10

HEADER_TOO_LONG = 11

UNKNOWN_DP_ERROR = 12

ACCESS_DENIED = 13

DP_OUT_OF_MEMORY = 14

DISK_FULL = 15

DP_TIMEOUT = 16

OTHERS = 17.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

LOOP AT H2.

MOVE H2-CNAME TO H1-NAME.

MOVE H2-CNUM TO H1-NUMBER.

MOVE H2-NNAME TO H1-PROG.

MOVE H2-NNUM TO H1-DNUM.

MOVE H2-CTIM TO H1-TGEN.

WRITE '19' TO H1-DGEN(2).

WRITE H2-CDAT TO H1-DGEN+2(6).

  • WRITE H2-FILL TO H1+88(39).

WRITE H2-FILL(1) TO H1-TYPE.

WRITE H2-FILL+1(4) TO H1-FNUM.

WRITE H2-FILL+5(4) TO H1-DGRP.

  • WRITE H2-FILL+9(3) TO H1-BZMX.

  • MOVE H2-FILL+9(3) TO H1-BZMX.

  • WRITE H2-FILL+12(3) TO H1-BZBR.

  • WRITE H2-FILL+15(3) TO H1-MILI.

  • WRITE H2-FILL+18(3) TO H1-MICO.

  • WRITE H2-FILL+21(3) TO H1-MALI.

  • WRITE H2-FILL+24(3) TO H1-MACO.

  • WRITE H2-FILL+27(3) TO H1-NOLI.

  • WRITE H2-FILL+30(3) TO H1-NOCO.

  • WRITE H2-FILL+33(3) TO H1-VALP.

MOVE H2-FILL+9(3) TO H1-BZMX.

MOVE H2-FILL+12(3) TO H1-BZBR.

MOVE H2-FILL+15(3) TO H1-MILI.

MOVE H2-FILL+18(3) TO H1-MICO.

MOVE H2-FILL+21(3) TO H1-MALI.

MOVE H2-FILL+24(3) TO H1-MACO.

MOVE H2-FILL+27(3) TO H1-NOLI.

MOVE H2-FILL+30(3) TO H1-NOCO.

MOVE H2-FILL+33(3) TO H1-VALP.

WRITE H2-FILL+36(1) TO H1-CUAN.

WRITE H2-FILL+37(1) TO H1-HDAT.

WRITE H2-FILL+38(1) TO H1-SPRA.

APPEND H1.

ENDLOOP.

WHEN OTHERS.

  • CALL FUNCTION 'WS_UPLOAD'

  • EXPORTING

  • FILENAME = FN1

  • FILETYPE = 'BIN'

  • IMPORTING

  • FILELENGTH = NR_OF_BYTES

  • TABLES

  • DATA_TAB = H1.

CLEAR: L_FILE.

MOVE FN1 TO L_FILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = L_FILE

FILETYPE = 'BIN'

  • HAS_FIELD_SEPARATOR = ' '

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = H1

EXCEPTIONS

FILE_OPEN_ERROR = 1

FILE_READ_ERROR = 2

NO_BATCH = 3

GUI_REFUSE_FILETRANSFER = 4

INVALID_TYPE = 5

NO_AUTHORITY = 6

UNKNOWN_ERROR = 7

BAD_DATA_FORMAT = 8

HEADER_NOT_ALLOWED = 9

SEPARATOR_NOT_ALLOWED = 10

HEADER_TOO_LONG = 11

UNKNOWN_DP_ERROR = 12

ACCESS_DENIED = 13

DP_OUT_OF_MEMORY = 14

DISK_FULL = 15

DP_TIMEOUT = 16

OTHERS = 17.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDCASE.

LOOP AT H1.

MOVE H1-NAME TO T-NAME.

MOVE H1-NUMBER TO T-NUMBER.

APPEND T.

ENDLOOP.

ENDFORM.

/*****************************************************************/

/ */

/ Upload Binary file F1 - Dynpro fields */

/ */

/*****************************************************************/

FORM UPLOAD_FFF.

DATA: L_FILE TYPE STRING.

CASE REL3.

WHEN 'X'.

  • CALL FUNCTION 'WS_UPLOAD'

  • EXPORTING

  • FILENAME = FN2

  • FILETYPE = 'BIN'

  • IMPORTING

  • FILELENGTH = NR_OF_BYTES

  • TABLES

  • DATA_TAB = F2.

CLEAR: L_FILE.

MOVE FN2 TO L_FILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = L_FILE

FILETYPE = 'BIN'

  • HAS_FIELD_SEPARATOR = ' '

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = F2

EXCEPTIONS

FILE_OPEN_ERROR = 1

FILE_READ_ERROR = 2

NO_BATCH = 3

GUI_REFUSE_FILETRANSFER = 4

INVALID_TYPE = 5

NO_AUTHORITY = 6

UNKNOWN_ERROR = 7

BAD_DATA_FORMAT = 8

HEADER_NOT_ALLOWED = 9

SEPARATOR_NOT_ALLOWED = 10

HEADER_TOO_LONG = 11

UNKNOWN_DP_ERROR = 12

ACCESS_DENIED = 13

DP_OUT_OF_MEMORY = 14

DISK_FULL = 15

DP_TIMEOUT = 16

OTHERS = 17.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

LOOP AT F2.

  • OLD_F1 = F2.

MOVE F2(8) TO OLD_F1-NAME.

MOVE F2+8(4) TO OLD_F1-NUMBER.

MOVE F2+12(30) TO OLD_F1-FNAM.

MOVE F2+42(2) TO OLD_F1-DIDX.

MOVE F2+44(1) TO OLD_F1-FLG1.

MOVE F2+45(1) TO OLD_F1-FLG2.

MOVE F2+46(1) TO OLD_F1-FLG3.

MOVE F2+47(1) TO OLD_F1-FILL.

MOVE F2+48(1) TO OLD_F1-FMB1.

MOVE F2+49(1) TO OLD_F1-FMB2.

MOVE F2+50(1) TO OLD_F1-COLR.

MOVE F2+51(1) TO OLD_F1-LENG.

MOVE F2+52(1) TO OLD_F1-LINE.

MOVE F2+53(1) TO OLD_F1-COLN.

MOVE F2+54(1) TO OLD_F1-LTYP.

MOVE F2+55(1) TO OLD_F1-LANF.

MOVE F2+56(1) TO OLD_F1-LBLK.

MOVE F2+57(1) TO OLD_F1-LREP.

MOVE F2+58(3) TO OLD_F1-FMKY.

MOVE F2+61(3) TO OLD_F1-PAID.

MOVE F2+64(5) TO OLD_F1-UCNV.

MOVE F2+69(4) TO OLD_F1-TYPE.

MOVE F2+73(3) TO OLD_F1-AUTH.

MOVE F2+76(30) TO OLD_F1-WNAM.

MOVE F2+106(31) TO OLD_F1-DMAC.

MOVE F2+137(3) TO OLD_F1-GRP1.

MOVE F2+140(3) TO OLD_F1-GRP2.

MOVE F2+143(3) TO OLD_F1-GRP3.

MOVE F2+146(3) TO OLD_F1-GRP4.

MOVE F2+149(1) TO OLD_F1-ITYP.

MOVE F2+150(1) TO OLD_F1-AGLT.

MOVE F2+151(1) TO OLD_F1-ADEZ.

MOVE F2+152(132) TO OLD_F1-STXT.

APPEND OLD_F1.

ENDLOOP.

LOOP AT OLD_F1.

MOVE-CORRESPONDING OLD_F1 TO F1.

APPEND F1.

ENDLOOP.

WHEN OTHERS.

  • CALL FUNCTION 'WS_UPLOAD'

  • EXPORTING

  • FILENAME = FN2

  • FILETYPE = 'BIN'

  • IMPORTING

  • FILELENGTH = NR_OF_BYTES

  • TABLES

  • DATA_TAB = F1.

CLEAR: L_FILE.

MOVE FN2 TO L_FILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = L_FILE

FILETYPE = 'BIN'

  • HAS_FIELD_SEPARATOR = ' '

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = F1

EXCEPTIONS

FILE_OPEN_ERROR = 1

FILE_READ_ERROR = 2

NO_BATCH = 3

GUI_REFUSE_FILETRANSFER = 4

INVALID_TYPE = 5

NO_AUTHORITY = 6

UNKNOWN_ERROR = 7

BAD_DATA_FORMAT = 8

HEADER_NOT_ALLOWED = 9

SEPARATOR_NOT_ALLOWED = 10

HEADER_TOO_LONG = 11

UNKNOWN_DP_ERROR = 12

ACCESS_DENIED = 13

DP_OUT_OF_MEMORY = 14

DISK_FULL = 15

DP_TIMEOUT = 16

OTHERS = 17.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDCASE.

ENDFORM.

/*****************************************************************/

/ */

/ Re-construct data from file .EEE */

/ */

/*****************************************************************/

FORM REBUILD-COMPONENT.

CASE OLD-FUNC.

WHEN '????LOGC'. "Dynpro LOGIC.

CASE REL3.

WHEN 'X'.

SHIFT S1-TXT+8 RIGHT BY 32 PLACES.

ENDCASE.

MOVE S1-TXT TO E1.

APPEND E1.

/*****************************************************************/

/ */

/ Load ABAP Source code, CUA, pfkeys etc to int tables */

/ */

/*****************************************************************/

WHEN '????SRCE'.

MOVE S1-TXT TO S-TXT.

APPEND S.

CASE INCLUDES. "Included file wanted

WHEN 'Y'.

PERFORM SCAN4-INCLUDES.

ENDCASE.

  • if restoring / uploading rel 3.1 or lower different cua tables

  • are used. At generate CUA time these will be converted by the

  • system to rel 4.0

*

WHEN '????STAT'.

CASE REL3.

WHEN 'X'.

MOVE S1-TXT TO OLD_STA.

APPEND OLD_STA.

WHEN SPACE.

MOVE S1-TXT TO STA.

APPEND STA.

ENDCASE.

MOVE 'Y' TO CUA-FLAG.

WHEN '????FUNC'.

CASE REL3.

WHEN 'X'.

MOVE S1-TXT TO OLD_FUN.

APPEND OLD_FUN.

WHEN SPACE.

MOVE S1-TXT TO FUN.

APPEND FUN.

ENDCASE.

MOVE 'Y' TO CUA-FLAG.

WHEN '????MEN1'.

CASE REL3.

WHEN 'X'.

MOVE S1-TXT TO OLD_MEN.

APPEND OLD_MEN.

WHEN SPACE.

MOVE S1-TXT TO MEN.

APPEND MEN.

ENDCASE.

MOVE 'Y' TO CUA-FLAG.

WHEN '????MTX1'.

CASE REL3.

WHEN 'X'.

MOVE S1-TXT TO OLD_MTX.

APPEND OLD_MTX.

WHEN SPACE.

MOVE S1-TXT TO MTX.

APPEND MTX.

ENDCASE.

MOVE 'Y' TO CUA-FLAG.

WHEN '????ACTN'.

CASE REL3.

WHEN 'X'.

MOVE S1-TXT TO OLD_ACT.

APPEND OLD_ACT.

WHEN SPACE.

MOVE S1-TXT TO ACT.

APPEND ACT.

ENDCASE.

MOVE 'Y' TO CUA-FLAG.

WHEN '????BUTN'.

CASE REL3.

WHEN 'X'.

MOVE S1-TXT TO OLD_BUT.

APPEND OLD_BUT.

WHEN SPACE.

MOVE S1-TXT TO BUT.

APPEND BUT.

ENDCASE.

MOVE 'Y' TO CUA-FLAG.

WHEN '????PFKY'.

CASE REL3.

WHEN 'X'.

MOVE S1-TXT TO OLD_PFK.

APPEND OLD_PFK.

WHEN SPACE.

MOVE S1-TXT TO PFK.

APPEND PFK.

ENDCASE.

MOVE 'Y' TO CUA-FLAG.

WHEN '????SETS'.

CASE REL3.

WHEN 'X'.

MOVE S1-TXT TO OLD_SET.

APPEND OLD_SET.

WHEN SPACE.

MOVE S1-TXT TO SET.

APPEND SET.

ENDCASE.

MOVE 'Y' TO CUA-FLAG.

WHEN '????DOCN'.

CASE REL3.

WHEN 'X'.

MOVE S1-TXT TO OLD_DOC.

APPEND OLD_DOC.

WHEN SPACE.

MOVE S1-TXT TO DOC.

APPEND DOC.

ENDCASE.

MOVE 'Y' TO CUA-FLAG.

WHEN '????TITL'.

CASE REL3.

WHEN 'X'.

MOVE S1-TXT TO OLD_TIT.

APPEND OLD_TIT.

MOVE 'Y' TO CUA-FLAG.

WHEN SPACE.

MOVE S1-TXT TO TIT.

APPEND TIT.

ENDCASE.

MOVE 'Y' TO CUA-FLAG.

WHEN '????LIST'.

MOVE S1-TXT TO LAST.

MOVE 'Y' TO CUA-FLAG.

WHEN '????INCL'.

MOVE S1-TXT TO INC.

APPEND INC.

MOVE 'Y' TO CUA-FLAG.

WHEN '????STXT'.

MOVE S1-TXT TO STX.

APPEND STX.

MOVE 'Y' TO CUA-FLAG.

WHEN '????FTXT'.

MOVE S1-TXT TO FTX.

APPEND FTX.

MOVE 'Y' TO CUA-FLAG.

  • next 5 tables (ATT FDN MDN SYM and FIN) are rel 3.0 specific

WHEN '????VATT'.

MOVE S1-TXT TO ATT.

APPEND ATT.

MOVE 'Y' TO CUA-FLAG.

WHEN '????VFDN'.

MOVE S1-TXT TO FDN.

APPEND FDN.

MOVE 'Y' TO CUA-FLAG.

WHEN '????VMDN'.

MOVE S1-TXT TO MDN.

APPEND MDN.

MOVE 'Y' TO CUA-FLAG.

WHEN '????VSYM'.

MOVE S1-TXT TO SYM.

APPEND SYM.

MOVE 'Y' TO CUA-FLAG.

WHEN '????VFIN'.

MOVE S1-TXT TO FIN.

APPEND FIN.

MOVE 'Y' TO CUA-FLAG.

/*****************************************************************/

/ */

/ Load ABAP Text elements (Max length 132 - the system */

/ allows 255 but this program handles 132 only) */

/ */

/*****************************************************************/

WHEN '????TEXT'.

MOVE: S1-TXT(1) TO U-ID,

S1-TXT+1(8) TO U-KEY,

S1-TXT+9(171) TO U-ENTRY.

APPEND U.

/*****************************************************************/

/ */

/ Update ABAP's Attributes. */

/ */

/ Ensure Attribute updated before dynpro text or language */

/ may be wrong. If language field is blank then default */

/ (logon) language will be used */

/ */

/*****************************************************************/

WHEN '????ATTR'.

CASE REL3. "uploading rel 3

WHEN 'X'.

SHIFT S1-TXT+8 RIGHT BY 32 PLACES.

WHEN OTHERS.

ENDCASE.

MOVE S1-TXT TO DIR.

MOVE SY-MANDT TO NUM.

MOVE NUM TO DIR-RMAND. "Ensure uploaded to cor. client

CASE MAIN.

WHEN 'Y'.

  • if repid ne dir-name.

IF R1-NAME NE DIR-NAME.

MOVE DIR-NAME TO OLDNAME.

ENDIF.

  • move repid to dir-name.

MOVE R1-NAME TO DIR-NAME.

ENDCASE.

PERFORM UPDATE_TRDIR.

WHEN '????DTIT'. "Dynpro title

CASE REL3. "uploading rel 3

WHEN 'X'.

SHIFT S1-TXT+8 RIGHT BY 32 PLACES.

WHEN OTHERS.

ENDCASE.

CLEAR TRDIR.

SELECT SINGLE * FROM TRDIR WHERE NAME EQ R-NAME.

CASE MAIN.

WHEN 'Y'.

  • write repid to d020t-prog.

WRITE R1-NAME TO D020T-PROG.

WHEN OTHERS.

IF REL3 = ' '.

WRITE S1-TXT(40) TO D020T-PROG.

ELSE.

WRITE S1-TXT(8) TO D020T-PROG.

ENDIF.

ENDCASE.

WRITE S1-TXT+40(4) TO D020T-DYNR.

IF TRDIR-RLOAD EQ SPACE.

MOVE SY-LANGU TO TRDIR-RLOAD.

ENDIF.

MOVE TRDIR-RLOAD TO D020T-LANG.

WRITE S1-TXT+44(60) TO D020T-DTXT.

MODIFY D020T.

WHEN '????DTXT'.

CASE REL3. "uploading rel 3

WHEN 'X'.

SHIFT S1-TXT+8 RIGHT BY 32 PLACES.

WHEN OTHERS.

ENDCASE.

MOVE S1-TXT TO DTXT.

MOVE-CORRESPONDING DTXT TO D021T.

CASE MAIN.

WHEN 'Y'.

  • write repid to d021t-prog.

WRITE R1-NAME TO D021T-PROG.

WHEN OTHERS.

IF REL3 = 'X'.

WRITE S1-TXT(8) TO D021T-PROG.

ELSE.

WRITE S1-TXT(40) TO D021T-PROG.

ENDIF.

ENDCASE.

MODIFY D021T.

ENDCASE.

ENDFORM.

/*****************************************************************/

/ */

/ Store re-constructed component of ABAP back on to the library */

/ Note that any attribute found has already been stored back */

/ on TRDIR. */

/ */

/*****************************************************************/

FORM STORE_COMPONENT.

CASE OLD-FUNC. "ABAP source.

/*****************************************************************/

/ */

/ Store ABAP source code back into the library */

/ */

/*****************************************************************/

WHEN '????SRCE'.

CASE MAIN.

WHEN 'Y'.

  • insert report repid from s.

INSERT REPORT R1-NAME FROM S.

WHEN OTHERS.

INSERT REPORT R-NAME FROM S.

ENDCASE.

REFRESH S.

/*****************************************************************/

/ */

/ Store ABAP Text Elements Back into Library */

/ */

/*****************************************************************/

WHEN '????TEXT'.

  • CLEAR: U.

  • MOVE: S-TXT(1) TO U-ID,

  • S-TXT+1(8) TO U-KEY,

  • S-TXT+9(171) TO U-ENTRY.

  • CONDENSE U-ENTRY.

CASE MAIN.

WHEN 'Y'.

  • insert textpool repid from u language sy-langu.

INSERT TEXTPOOL R1-NAME FROM U LANGUAGE SY-LANGU.

WHEN OTHERS.

INSERT TEXTPOOL R-NAME FROM U LANGUAGE SY-LANGU.

ENDCASE.

REFRESH U.

ENDCASE.

ENDFORM.

/*****************************************************************/

/ */

/ Update Attributes */

/ */

/*****************************************************************/

FORM UPDATE_TRDIR.

MOVE-CORRESPONDING DIR TO TRDIR.

MODIFY TRDIR.

SELECT SINGLE * FROM TADIR

WHERE PGMID = 'R3TR'

AND OBJECT = 'PROG'

AND OBJ_NAME = TRDIR-NAME.

IF SY-SUBRC NE 0.

MOVE 'R3TR' TO TADIR-PGMID.

MOVE 'PROG' TO TADIR-OBJECT.

MOVE TRDIR-NAME TO TADIR-OBJ_NAME.

MOVE '$TMP' TO TADIR-DEVCLASS.

MOVE 'L' TO TADIR-CPROJECT.

MOVE SY-LANGU TO TADIR-MASTERLANG.

MOVE SY-SYSID TO TADIR-SRCSYSTEM.

INSERT TADIR.

ENDIF.

ENDFORM.

/*****************************************************************/

/ */

/ re-build the CUA, update the title table (if any entries */

/ exist) and update EUDB */

/ Finally generate the CUA */

/ */

/*****************************************************************/

FORM REBUILD-CUA.

IF CUA-FLAG = 'Y'.

PERFORM LOAD_CUA USING R-NAME SY-LANGU.

MOVE SY-LANGU TO TITLE-DDLANGUAGE.

MOVE R-NAME TO TITLE-PROGNAME.

CASE REL3.

WHEN 'X'.

LOOP AT TIT.

MOVE-CORRESPONDING TIT TO TITLE.

MODIFY TITLE.

ENDLOOP.

ENDCASE.

MOVE 'N' TO CUA-FLAG.

ENDIF.

ENDFORM.

/*****************************************************************/

/ */

/ Load the CUA */

/ */

/*****************************************************************/

FORM LOAD_CUA USING PROGRAM LANGUAGE.

EU_KEY-NAME = PROGRAM.

EU_KEY-SPRSL = LANGUAGE.

EU_KEY-SPRSL = 'D'.

DELETE FROM EUDB WHERE RELID = 'CU'

AND NAME = PROGRAM.

  • create new EUDB table entry

CLEAR EUDB.

EUDB-LANGU = 'D'.

EUDB-AUTOR = SY-UNAME.

EUDB-DATUM = SY-DATUM.

EUDB-ZEIT = SY-UZEIT.

EUDB-RELID = 'CU'.

EUDB-SRTF2 = 0.

EUDB-NAME = R-NAME.

EUDB-VAUTOR = SY-UNAME.

EUDB-VDATUM = SY-DATUM.

EUDB-VZEIT = SY-UZEIT.

  • insert into table

INSERT EUDB.

CASE REL3.

WHEN 'X'.

PERFORM TEXTNR.

SORT OLD_MTX.

  • EXPORT STA STX FUN MEN MTX ACT BUT PFK SET INC LAST DOC "rel 2.2

EXPORT STA FROM OLD_STA

FUN FROM OLD_FUN

MEN FROM OLD_MEN

MTX FROM OLD_MTX

ACT FROM OLD_ACT

BUT FROM OLD_BUT

PFK FROM OLD_PFK

SET FROM OLD_SET

DOC FROM OLD_DOC

TIT FROM OLD_TIT

STX

LAST

INC

ATT FDN MDN SYM FIN "rel 3.0

TO DATABASE EUDB(CU) ID EU_KEY.

*

  • REL 4.0 converts old CUA (3.1 and lower) to rel 4.

*

WHEN SPACE.

SORT MTX.

EXPORT STA FUN MEN MTX ACT BUT PFK SET DOC

TO DATABASE EUDB(CU) ID EU_KEY.

ENDCASE.

*

  • only entry with sprsl = D allowed

*

DELETE FROM EUDB WHERE RELID = 'CU'

AND NAME = PROGRAM

AND SPRSL = ' '.

*

*

  • set release in EUDB to ver 4.0 if appropriate. Rel 3.1G and earlier

  • will be handled and converted by the system

*

IF REL3 = ' '.

SELECT * FROM EUDB WHERE RELID = 'CU'

AND NAME = PROGRAM

AND SPRSL = 'D'.

MOVE '000040' TO EUDB-VERSION.

UPDATE EUDB.

EXIT.

ENDSELECT.

ELSE.

SELECT * FROM EUDB WHERE RELID = 'CU'

AND NAME = PROGRAM

AND SPRSL = 'D'.

MOVE ' ' TO EUDB-VERSION.

UPDATE EUDB.

EXIT.

ENDSELECT.

ENDIF.

LOOP AT FTX.

MOVE-CORRESPONDING FTX TO RSMPTEXTS.

CASE MAIN.

WHEN 'Y'.

  • move repid to rsmptexts-progname.

MOVE R1-NAME TO RSMPTEXTS-PROGNAME.

ENDCASE.

MODIFY RSMPTEXTS.

ENDLOOP.

  • call transaction se41 to generate the user interface

REFRESH T_BDC_TAB.

PERFORM BLD_DYNPRO USING:

'X' 'SAPMSMPE' '100',

' ' 'RSMPE-PROGRAM' PROGRAM,

' ' 'RSMPE-B_STATEXT' 'X',

' ' 'BDC_OKCODE ' 'CHNG'.

PERFORM BLD_DYNPRO USING:

'X' 'SAPMSSY0' '120',

' ' 'BDC_OKCODE ' 'GENR'.

PERFORM BLD_DYNPRO USING:

'X' 'SAPMSSY0' '120',

' ' 'BDC_OKCODE ' '/3'.

PERFORM BLD_DYNPRO USING:

'X' 'SAPMSMPE' '100',

' ' 'RSMPE-PROGRAM' PROGRAM,

' ' 'RSMPE-B_STATEXT' 'X',

' ' 'BDC_OKCODE ' '/3'.

CALL TRANSACTION 'SE41'

USING T_BDC_TAB

MODE 'E'

UPDATE 'S'

MESSAGES INTO T_MESSTAB.

CASE SY-SUBRC.

WHEN 0.

WHEN OTHERS.

WRITE: / 'Warning ---CUA for', PROGRAM, 'incorrect. RC=', SY-SUBRC.

ENDCASE.

MOVE 'N' TO CUA-FLAG.

ENDFORM.

/*****************************************************************/

/ */

/ Handle CUA texts */

/ */

/*****************************************************************/

FORM TEXTNR.

DATA: NO TYPE I.

  • rel 3.1 and earlier

LOOP AT OLD_MTX.

CHECK OLD_MTX-TEXTNR NE OLD_MTX-CODE.

OLD_MTX-TEXTNR = OLD_MTX-CODE.

MODIFY OLD_MTX.

ENDLOOP.

LOOP AT OLD_FUN.

CHECK OLD_FUN-TEXTNR = SPACE.

IF OLD_FUN-NO = '01' AND OLD_FUN-CODE CN '>0123456789'.

OLD_FUN-TEXTNR = OLD_FUN-CODE.

ELSE.

NO = LAST-TEXTNR + 1.

UNPACK NO TO LAST-TEXTNR.

OLD_FUN-TEXTNR = LAST-TEXTNR.

OLD_FUN-TEXTNR(1) = '>'.

ENDIF.

MODIFY OLD_FUN.

ENDLOOP.

ENDFORM.

/*****************************************************************/

/ */

/ Build data for BDC table (Call transaction SE41) */

/ */

/*****************************************************************/

FORM BLD_DYNPRO USING PU_DYNBEGIN TYPE ANY

PU_NAME TYPE ANY

PU_VALUE TYPE ANY.

CLEAR T_BDC_TAB.

IF PU_DYNBEGIN = 'X'.

MOVE: PU_DYNBEGIN TO T_BDC_TAB-DYNBEGIN,

PU_NAME TO T_BDC_TAB-PROGRAM,

PU_VALUE TO T_BDC_TAB-DYNPRO.

ELSE.

MOVE: PU_NAME TO T_BDC_TAB-FNAM,

PU_VALUE TO T_BDC_TAB-FVAL.

ENDIF.

APPEND T_BDC_TAB.

ENDFORM.

*

  • To get path and file name via F4 or mouse click use a call to

  • Windows via WS_FILENAME_GET.

  • Restriction is that a File must be selected to return any data

  • Program chops off the file name when a path is wanted so the

  • function can also be used to find the path on upload.

  • Any valid file name can then be entered

*

  • Note also that if a mouse click is done on program then the

  • path is copied as well.

*

AT SELECTION-SCREEN

ON VALUE-REQUEST FOR PATH.

CLS I_DYNPFIELDS.

PERFORM QUERY_FILENAME USING T_FILENAME T_MODE.

MOVE 'PATH' TO I_DYNPFIELDS-FIELDNAME.

MOVE PATH TO I_DYNPFIELDS-FIELDVALUE.

MOVE 0 TO I_DYNPFIELDS-STEPL.

APPEND I_DYNPFIELDS.

PERFORM UPDATE_SEL_SCREEN.

AT SELECTION-SCREEN

ON VALUE-REQUEST FOR REPID-LOW.

PERFORM QUERY_FILENAME USING T_FILENAME T_MODE.

CLS I_DYNPFIELDS.

MOVE 'REPID-LOW' TO I_DYNPFIELDS-FIELDNAME.

MOVE REPID-LOW TO I_DYNPFIELDS-FIELDVALUE.

MOVE 0 TO I_DYNPFIELDS-STEPL.

APPEND I_DYNPFIELDS.

MOVE 'PATH' TO I_DYNPFIELDS-FIELDNAME.

MOVE PATH TO I_DYNPFIELDS-FIELDVALUE.

MOVE 0 TO I_DYNPFIELDS-STEPL.

APPEND I_DYNPFIELDS.

PERFORM UPDATE_SEL_SCREEN.

AT SELECTION-SCREEN

ON VALUE-REQUEST FOR REPID-HIGH.

PERFORM QUERY_FILENAME USING T_FILENAME T_MODE.

CLS I_DYNPFIELDS.

MOVE 'REPID-HIGH' TO I_DYNPFIELDS-FIELDNAME.

MOVE REPID-HIGH TO I_DYNPFIELDS-FIELDVALUE.

MOVE 0 TO I_DYNPFIELDS-STEPL.

APPEND I_DYNPFIELDS.

MOVE 'PATH' TO I_DYNPFIELDS-FIELDNAME.

MOVE PATH TO I_DYNPFIELDS-FIELDVALUE.

MOVE 0 TO I_DYNPFIELDS-STEPL.

APPEND I_DYNPFIELDS.

PERFORM UPDATE_SEL_SCREEN.

/*****************************************************************/

/ */

/ Get file names (Windows) */

/ */

/*****************************************************************/

FORM QUERY_FILENAME USING DEF_PATH LIKE T_FILENAME

MODE TYPE C.

DATA: TMP_FILENAME LIKE T_FILENAME.

DATA: TMP_MASK LIKE GLOBAL_FILEMASK_ALL.

FIELD-SYMBOLS: <TMP_SYM>.

  • Build Filter for Fileselector

IF GLOBAL_FILEMASK_MASK IS INITIAL.

TMP_MASK = ',.,..'.

ELSE.

TMP_MASK = ','.

WRITE GLOBAL_FILEMASK_TEXT TO TMP_MASK+1.

WRITE ',' TO TMP_MASK+21.

WRITE GLOBAL_FILEMASK_MASK TO TMP_MASK+22.

WRITE '.' TO TMP_MASK+42.

CONDENSE TMP_MASK NO-GAPS.

ENDIF.

IF NOT GLOBAL_FILEMASK_ALL IS INITIAL.

TMP_MASK = GLOBAL_FILEMASK_ALL.

ENDIF.

FIELDLN = STRLEN( DEF_PATH ) - 1.

ASSIGN DEF_PATH+FIELDLN(1) TO <TMP_SYM>.

IF <TMP_SYM> = '/' OR <TMP_SYM> = '\'.

CLEAR <TMP_SYM>.

ENDIF.

CALL FUNCTION 'WS_FILENAME_GET'

EXPORTING

DEF_FILENAME = T_FILENAME

DEF_PATH = DEF_PATH

  • MASK = ',.,..'

MASK = TMP_MASK

MODE = MODE

  • TITLE = ' '

IMPORTING

FILENAME = TMP_FILENAME

  • RC =

EXCEPTIONS

INV_WINSYS = 01

NO_BATCH = 02

SELECTION_CANCEL = 03

SELECTION_ERROR = 04.

CASE SY-SUBRC.

WHEN 3. "User has cancelled selection.

EXIT.

ENDCASE.

T_FILENAME = TMP_FILENAME.

  • Try and get path name.

FIELDLN = STRLEN( T_FILENAME ).

L = FIELDLN - 1.

ASSIGN T_FILENAME+L(1) TO <TMP_SYM>.

WHILE <TMP_SYM> NE '\'.

L = L - 1.

ASSIGN T_FILENAME+L(1) TO <TMP_SYM>.

ENDWHILE.

L = L + 1.

ASSIGN T_FILENAME(L) TO <TMP_SYM>.

WRITE <TMP_SYM> TO PATH.

I = FIELDLN - L - 4.

SEARCH T_FILENAME FOR ' '.

ASSIGN T_FILENAME+L(I) TO <TMP_SYM>.

WRITE <TMP_SYM> TO REPID-LOW.

ENDFORM.

/*****************************************************************/

/ */

/ Update screen fields with value selected from table */

/ */

/*****************************************************************/

FORM UPDATE_SEL_SCREEN.

CALL FUNCTION 'DYNP_VALUES_UPDATE'

EXPORTING

DYNAME = SY-CPROG

DYNUMB = SY-DYNNR

TABLES

DYNPFIELDS = I_DYNPFIELDS

EXCEPTIONS

INVALID_ABAPWORKAREA = 1

INVALID_DYNPROFIELD = 2

INVALID_DYNPRONAME = 3

INVALID_DYNPROW_NUMMER = 4

INVALID_REQUEST = 5

NO_FIELDDESCRIPTION = 6

UNDEFIND_ERROR = 7

OTHERS = 8.

ENDFORM.

*

  • fix selection so that for example ZAC* chhoses ALL progs

  • starting with ZAC.

*

FORM GET_RANGE_DL.

SELECT * FROM TRDIR

APPENDING CORRESPONDING FIELDS OF TABLE I_PROG

WHERE NAME IN REPID.

LOOP AT REPID.

CASE REPID-OPTION.

WHEN 'BT'.

SEARCH REPID-HIGH FOR '.*.'.

IF SY-SUBRC = 0.

TRANSLATE REPID-HIGH USING '*%'.

ENDIF.

IF REPID-SIGN = 'I'.

SELECT * FROM TRDIR

APPENDING CORRESPONDING FIELDS OF TABLE I_PROG

WHERE NAME LIKE REPID-HIGH.

ENDIF.

ENDCASE.

ENDLOOP.

ENDFORM.

  • get proper selection range for upload programs

  • e.g if you specify Z to ZZJ* you will get ALL

  • progs from Z to ZZJ* unlike the SAP BETWEEN clause.

*

FORM GET_RANGE_UL.

LOOP AT I_PROGT.

IF I_PROGT-NAME IN REPID.

I_PROG-NAME = I_PROGT-NAME.

APPEND I_PROG.

ENDIF.

ENDLOOP.

LOOP AT REPID.

CASE REPID-OPTION.

WHEN 'BT'.

SEARCH REPID-HIGH FOR '.*.'.

IF SY-SUBRC = 0.

TRANSLATE REPID-HIGH USING '*%'.

ENDIF.

ENDCASE.

ENDLOOP.

LOOP AT I_PROGT.

  • needs to be done like this owing to way the IN cluse is implemented

LOOP AT REPID.

IF REPID-SIGN = 'I'

AND REPID-OPTION = 'BT'.

IF I_PROGT-NAME CP REPID-HIGH.

I_PROG-NAME = I_PROGT-NAME.

APPEND I_PROG.

ENDIF.

ENDIF.

ENDLOOP.

ENDLOOP.

ENDFORM.

/**************************************************************/

/ */

/ Build DOS batch file to read relevant directory */

/ This might not work for W2K as native DOS is not */

/ supported as such. The DIR command should work */

/ otherwise you will have to modify this code to call a */

/ Windows function to get a directory listing. */

/ */

/**************************************************************/

FORM READ_DOS_DIRECTORY.

MOVE 'ECHO Reading Disk directory - please wait' TO DOSDIR-TEXT.

APPEND DOSDIR.

MOVE 'C:\DIR.$$$' TO UL_FILE.

MOVE 'C:\ABAP.BAT' TO DL_FILE.

WRITE 'DIR' TO DOSLINE.

WRITE PATH TO DOSLINE+4.

WRITE '/B > C:\DIR.$$$' TO DOSLINE+50.

CONDENSE DOSLINE.

MOVE DOSLINE TO DOSDIR-TEXT.

APPEND DOSDIR.

MOVE 'EXIT' TO DOSDIR-TEXT.

APPEND DOSDIR.

/**************************************************************/

/ */

/ Download DOS batch file */

/ */

/**************************************************************/

DATA: L_FILE TYPE STRING.

  • CALL FUNCTION 'WS_DOWNLOAD'

  • EXPORTING

  • FILENAME = DL_FILE

  • FILETYPE = 'DAT'

  • TABLES

  • DATA_TAB = DOSDIR.

CLEAR: L_FILE.

MOVE DL_FILE TO L_FILE.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

  • BIN_FILESIZE =

FILENAME = L_FILE

FILETYPE = 'DAT'

  • APPEND = ' '

  • WRITE_FIELD_SEPARATOR = ' '

  • HEADER = '00'

  • TRUNC_TRAILING_BLANKS = ' '

  • WRITE_LF = 'X'

  • COL_SELECT = ' '

  • COL_SELECT_MASK = ' '

  • DAT_MODE = ' '

  • CONFIRM_OVERWRITE = ' '

  • NO_AUTH_CHECK = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • WRITE_BOM = ' '

  • TRUNC_TRAILING_BLANKS_EOL = 'X'

  • WK1_N_FORMAT = ' '

  • WK1_N_SIZE = ' '

  • WK1_T_FORMAT = ' '

  • WK1_T_SIZE = ' '

  • IMPORTING

  • FILELENGTH =

TABLES

DATA_TAB = DOSDIR

  • FIELDNAMES =

EXCEPTIONS

FILE_WRITE_ERROR = 1

NO_BATCH = 2

GUI_REFUSE_FILETRANSFER = 3

INVALID_TYPE = 4

NO_AUTHORITY = 5

UNKNOWN_ERROR = 6

HEADER_NOT_ALLOWED = 7

SEPARATOR_NOT_ALLOWED = 8

FILESIZE_NOT_ALLOWED = 9

HEADER_TOO_LONG = 10

DP_ERROR_CREATE = 11

DP_ERROR_SEND = 12

DP_ERROR_WRITE = 13

UNKNOWN_DP_ERROR = 14

ACCESS_DENIED = 15

DP_OUT_OF_MEMORY = 16

DISK_FULL = 17

DP_TIMEOUT = 18

FILE_NOT_FOUND = 19

DATAPROVIDER_EXCEPTION = 20

CONTROL_FLUSH_ERROR = 21

OTHERS = 22.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

/**************************************************************/

/ */

/ Execute it and pipe output to DIR.$$$ on C drive */

/ */

/**************************************************************/

CALL FUNCTION 'WS_EXECUTE'

EXPORTING

COMMANDLINE = DL_FILE

INFORM = 'X' "// synchronous

PROGRAM = 'C:\ABAP.BAT'.

REFRESH DOSDIR.

/**************************************************************/

/ */

/ Upload directory listing to SAP */

/ */

/**************************************************************/

  • CALL FUNCTION 'WS_UPLOAD'

  • EXPORTING

  • FILENAME = UL_FILE

  • FILETYPE = 'DAT'

  • TABLES

  • DATA_TAB = DOSDIR.

CLEAR: L_FILE.

MOVE UL_FILE TO L_FILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = L_FILE

  • FILETYPE = 'DAT'

  • HAS_FIELD_SEPARATOR = ' '

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = DOSDIR

EXCEPTIONS

FILE_OPEN_ERROR = 1

FILE_READ_ERROR = 2

NO_BATCH = 3

GUI_REFUSE_FILETRANSFER = 4

INVALID_TYPE = 5

NO_AUTHORITY = 6

UNKNOWN_ERROR = 7

BAD_DATA_FORMAT = 8

HEADER_NOT_ALLOWED = 9

SEPARATOR_NOT_ALLOWED = 10

HEADER_TOO_LONG = 11

UNKNOWN_DP_ERROR = 12

ACCESS_DENIED = 13

DP_OUT_OF_MEMORY = 14

DISK_FULL = 15

DP_TIMEOUT = 16

OTHERS = 17.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

LOOP AT DOSDIR.

SEARCH DOSDIR-TEXT FOR '.EEE '.

CASE SY-SUBRC.

WHEN 0.

ASSIGN DOSDIR-TEXT(SY-FDPOS) TO <F>.

I_PROGT-NAME = <F>.

APPEND I_PROGT.

WHEN OTHERS.

ENDCASE.

ENDLOOP.

ENDFORM.

/**************************************************************/

/ */

/ Get Include programs for upload via function module. */

/ */

/**************************************************************/

FORM GET_INCLUDES_DL.

REFRESH I_INCL.

LOOP AT I_PROG.

CALL FUNCTION 'RS_GET_ALL_INCLUDES'

EXPORTING

PROGRAM = I_PROG-NAME

  • WITH_INACTIVE_INCLS = ' '

TABLES

INCLUDETAB = I_INCL

EXCEPTIONS

NOT_EXISTENT = 1

NO_PROGRAM = 2

OTHERS = 3.

*

  • if function pool (SAPLxxxx) then always need the

  • SAP generated include LxxxUXX as well.

*

IF I_PROG(4) = 'SAPL'. "Function Pool

ASSIGN I_PROG-NAME+3(37) TO <F>.

CONCATENATE <F> 'UXX' INTO I_INCL-NAME.

APPEND I_INCL.

ENDIF.

LOOP AT I_INCL.

SEARCH IMASK FOR '.*.'.

IF SY-SUBRC = 0.

CONDENSE IMASK.

ENDIF.

IF ( I_INCL-NAME CP IMASK OR IMASK EQ ' ' ).

READ TABLE I_INCLUDE WITH KEY NAME = I_INCL-NAME.

IF SY-SUBRC NE 0.

MOVE I_INCL-NAME TO I_INCLUDE-NAME.

APPEND I_INCLUDE.

ENDIF.

ENDIF.

ENDLOOP.

REFRESH I_INCL.

ENDLOOP.

ENDFORM.

/**************************************************************/

/ */

/ Handle Include programs (download) */

/ */

/**************************************************************/

FORM PROCESS_INCLUDES_DL.

LOOP AT I_INCLUDE. "Now handle all included programs found

*

  • check included program has not already been down / up loaded

  • Check on download if INCLUDE program exists in Library

  • check on UPLOAD if INCLUDE exists in the directory

*

READ TABLE I_PROG WITH KEY NAME = I_INCLUDE-NAME.

CASE SY-SUBRC.

WHEN 4. "Program not yet handled.

SELECT SINGLE * FROM TRDIR

WHERE NAME = I_INCLUDE-NAME.

IF SY-SUBRC = 0.

MOVE I_INCLUDE-NAME TO R1-NAME.

MOVE 'Y' TO I_INCLUDE-HANDLED.

MODIFY I_INCLUDE.

APPEND R1.

ENDIF.

ENDCASE.

DESCRIBE TABLE R1 LINES I.

WHILE I NE 0. "

PERFORM EXECUTE-FUNCTION.

ENDWHILE.

REFRESH R1.

ENDLOOP.

ENDFORM.

*

  • Look for Includes in uploaded programs or on download

  • when handling INCLUDE programs themselves

*

FORM PROCESS_INCLUDES_UL.

*

LOOP AT I_INCL.

  • is included file in the directory

  • The mask (e..g Z*) will have already been checked by the scan

  • process.

IF FUNC = 'D'.

SELECT SINGLE * FROM TRDIR WHERE NAME = I_INCL-NAME.

ENDIF.

IF FUNC = 'U'.

READ TABLE I_PROGT WITH KEY NAME = I_INCL-NAME.

ENDIF.

IF SY-SUBRC = 0.

  • check if the include has already been processed

READ TABLE I_INCLUDE WITH KEY NAME = I_INCL-NAME.

IF SY-SUBRC = 4.

MOVE I_INCL-NAME TO I_INCLUDE-NAME.

MOVE ' ' TO I_INCLUDE-HANDLED.

APPEND I_INCLUDE.

ENDIF.

ENDIF.

ENDLOOP.

REFRESH I_INCL.

ENDFORM.

*

  • scan through included table

*

FORM LOOP_THROUGH.

LOOP AT I_INCLUDE "Now handle all included programs found

WHERE HANDLED = ' '.

MOVE I_INCLUDE-NAME TO R1-NAME.

APPEND R1.

MOVE 'Y' TO I_INCLUDE-HANDLED.

MODIFY I_INCLUDE.

DESCRIBE TABLE R1 LINES I.

WHILE I NE 0. "

PERFORM EXECUTE-FUNCTION.

ENDWHILE.

REFRESH R1.

ENDLOOP.

ENDFORM.

<b>Reward points if this helps.

Manish</b>

0 View this answer in context
Not what you were looking for? View more on this topic or Ask a question