Sapscript Forms
Sapscript Forms
*/* */
*/* Utility ABAP to Download / Upload a layout set. */
*/* Note that in release 3.0D SAPSCRIPT will */
*/* hopefully be replaced by something much better !!! */
*/* */
*/* This ABAP is needed as the transport system doesn't seem */
*/* to handle layout sets very well. Besides I think the */
*/* correction and transport system is a load of */
*/* dogsbreath anyway. */
*/* */
*/* The following tables are loaded / unloaded on to disk. */
*/* */
*/* Header table */
*/* Lines - note this table contains several entries */
*/* for each entry in the header table. The */
*/* field INDX in table D ensures that on restore */
*/* the relevant entries are kept together */
*/* */
*/* Please note the following restrictions : */
*/* */
*/* A layout set may be COPIED from any client but this */
*/* program will only RESTORE / COPY it back into the client */
*/* you are logged on to */
*/* */
*/* Only the layout set in the ORIGINAL language will be copied. */
*/* If the language change causes problems logon with the */
*/* language of the layout set you want to upload. */
*/* */
*/* This program will only handle 1 layout set per execution. */
*/* I might make a generic front end which would allow */
*/* a bunch of layout sets to be handled together (e.g Z*) */
*/* if I have time. (in theory easy just build a table */
*/* containing the layout set names, loop round it and call */
*/* this program with the appropriate parameters. */
*/* Because DOS will only allow file names of up to 8 chars*/
*/* you cannot normally use the same name as the layout set*/
*/* as this can have up to 16 chars. */
*/* The dos data set name entered in as a parameter will */
*/* have .LLL appended to it. E.G if the data set entered */
*/* is INV01 then the file written to disk will be */
*/* called INV01.LLL */
*/* */
*/* Jim Hawthorne - PC Utilities */
*/* */
*/******************************************************************/
DATA: MSGTEXT(255).
DATA: PCFILE(128) TYPE C.
IF DSNAME IS INITIAL.
DSNAME = FORMNAME.
ENDIF.
WRITE PATH TO PCFILE(48).
WRITE DSNAME TO PCFILE+48(30).
WRITE '.LLL' TO PCFILE+78(4).
CONDENSE PCFILE NO-GAPS.
START-OF-SELECTION.
PERFORM CHECK_PARAMETER.
CASE FUNCTION.
WHEN 'D'.
PERFORM COLLECT_OBJECTS. "Collate
PERFORM COPY_OBJECTS. "collect into tables
PERFORM DOWNLOAD_TO_PC. "download
WRITE: / 'Layout set', FORMNAME,'has been downloaded to',
PCFILE(40),'from client ',QUELMAND.
WHEN 'U'.
PERFORM UPLOAD_FROM_PC. "upload
PERFORM BUILD_SRC. "de - collate from tables
PERFORM RESTORE_OBJECTS. "restore / insert
WRITE: / 'Layout set', ZIELFORM, 'has been restored from',
PCFILE(40), 'original name', LNAME.
WHEN OTHERS.
WRITE: / 'Invalid function - must be U(pload) or D(ownload)'.
STOP.
ENDCASE.
*/******************************************************************/
*/* */
*/* Check parameters Source Layout Set */
*/* Source client (default logged on client)*/
*/* Function (U= Upload D=Download) */
*/* Name for uploaded layout set */
*/* Dos data set name (note that */
*/* DOS file names are of format XXXXXXXX (8 long no file type) */
*/* whereas layout sets can be up to 16 chars long.) */
*/* This program automatically appends .LLL to the DOS filename */
*/* so if you change the type you will get an ERROR !! */
*/* */
*/* On upload the original source layout name is only used if */
*/* the target layout set name is blank. The program will */
*/* list out the original name the layout set was copied from.*/
*/* */
*/******************************************************************/
FORM CHECK_PARAMETER.
IF FORMNAME CA '*' AND ZIELFORM NE SPACE.
PERFORM WRITE_MESSAGE USING 'TD' '164' SPACE SPACE SPACE SPACE.
STOP.
ENDIF.
IF ZIELFORM EQ SPACE.
MOVE FORMNAME TO ZIELFORM.
ENDIF.
IF ZIELFORM NE SPACE.
PERFORM CHECK_NAME USING ZIELFORM.
ENDIF.
ENDFORM.
*/******************************************************************/
*/* */
*/* For Download read relevant data objects from the library */
*/* */
*/******************************************************************/
FORM COLLECT_OBJECTS.
TEXTNAME = FORMNAME.
TEXTNAME+16(1) = '*'.
CALL FUNCTION 'SELECT_TEXT'
EXPORTING
CLIENT = QUELMAND
DATABASE_ONLY = 'X'
ID = '*'
LANGUAGE = '*'
NAME = TEXTNAME
OBJECT = 'FORM'
IMPORTING
ENTRIES = ENTRIES
TABLES
SELECTIONS = SRC_HEADER
EXCEPTIONS
OTHERS = 01.
IF ENTRIES <= 0.
PERFORM WRITE_MESSAGE USING 'TD' '131'
FORMNAME '*' QUELMAND SPACE.
STOP.
ENDIF.
SORT SRC_HEADER BY TDNAME TDID.
LOOP AT SRC_HEADER.
IF SRC_HEADER-TDID = 'DEF'.
MASTERFORM = SRC_HEADER-TDNAME.
MASTERLANGUAGE = SRC_HEADER-TDSPRAS.
ENDIF.
IF SRC_HEADER-TDID = 'TXT'.
IF SRC_HEADER-TDNAME = MASTERFORM
AND SRC_HEADER-TDSPRAS <> MASTERLANGUAGE.
* delete src_header.
ENDIF.
ENDIF.
ENDLOOP.
D-INDX = 1.
LOOP AT SRC_HEADER.
MOVE 'S' TO D-TYPE.
MOVE-CORRESPONDING SRC_HEADER TO X.
MOVE X TO D-TXT.
APPEND D.
D-INDX = D-INDX + 1.
ENDLOOP.
ENDFORM.
*/******************************************************************/
*/* */
*/* Build source components ready for downloading. */
*/* */
************************************************************************
FORM BUILD_SRC.
LOOP AT D WHERE TYPE = 'S'.
MOVE D-TXT TO X.
MOVE-CORRESPONDING X TO SRC_HEADER.
APPEND SRC_HEADER.
ENDLOOP.
ENDFORM.
*/******************************************************************/
*/* */
*/* Restore layout set back into the library. */
*/* Format is Header, Header, Header, */
*/* for each header there exists a table LINES with a */
*/* variable nr of entries. Each header with iis associated */
*/* LINES table must be restored. */
*/* */
************************************************************************
FORM RESTORE_OBJECTS.
I = 1.
LOOP AT SRC_HEADER.
CASE SY-TABIX.
WHEN 1.
MOVE SRC_HEADER-TDNAME TO LNAME.
ENDCASE.
REFRESH LINES.
LOOP AT D WHERE TYPE EQ 'L'
AND INDX EQ I.
MOVE D-TXT TO Y.
MOVE-CORRESPONDING Y TO LINES.
APPEND LINES.
ENDLOOP.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = QUELMAND
ID = SRC_HEADER-TDID
LANGUAGE = SRC_HEADER-TDSPRAS
NAME = SRC_HEADER-TDNAME
OBJECT = SRC_HEADER-TDOBJECT
IMPORTING
HEADER = HEADER
TABLES
LINES = LINES
EXCEPTIONS
ID = 01
LANGUAGE = 02
NAME = 03
NOT_FOUND = 04
OBJECT = 05
REFERENCE_CHECK = 06.
ENDIF.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
CLIENT = SY-MANDT
HEADER = HEADER
SAVEMODE_DIRECT = 'X'
IMPORTING
NEWHEADER = HEADER
TABLES
LINES = LINES
EXCEPTIONS
OTHERS = 1.
* if header-tdid = 'DEF'.
* perform write_message using 'TD' '181' header-tdname(16)
* header-tdspras
* space space.
* else.
* perform write_message using 'TD' '182' header-tdname(16)
* header-tdspras
* space space.
* endif.
I = I + 1.
ENDLOOP.
CALL FUNCTION 'SAPSCRIPT_DELETE_LOAD'
EXPORTING
CLIENT = SY-MANDT
DELETE = 'X'
FORM = '*'
WRITE = SPACE.
ENDFORM.
*/******************************************************************/
*/* */
*/* collate objects into a dataset for downloading. */
*/* */
*/******************************************************************/
FORM COPY_OBJECTS.
D-INDX = 1.
LOOP AT SRC_HEADER.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = QUELMAND
ID = SRC_HEADER-TDID
LANGUAGE = SRC_HEADER-TDSPRAS
NAME = SRC_HEADER-TDNAME
OBJECT = SRC_HEADER-TDOBJECT
IMPORTING
HEADER = HEADER
TABLES
LINES = LINES
EXCEPTIONS
ID = 01
LANGUAGE = 02
NAME = 03
NOT_FOUND = 04
OBJECT = 05
REFERENCE_CHECK = 06.
LOOP AT LINES.
MOVE 'L' TO D-TYPE.
MOVE-CORRESPONDING LINES TO Y.
MOVE Y TO D-TXT.
APPEND D.
ENDLOOP.
D-INDX = D-INDX + 1.
ENDLOOP.
ENDFORM.
*/*********************************************************************/
*/* */
*/* SAP Physical DOWNLOAD to PC function */
*/* */
*/*********************************************************************/
FORM DOWNLOAD_TO_PC.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = PCFILE
* FILETYPE = TYPE
BIN_FILESIZE = FILESIZE
IMPORTING
FILELENGTH = FILESIZE
TABLES
DATA_TAB = D.
ENDFORM.
*/*********************************************************************/
*/* */
*/* SAP Physical UPLOAD from PC function */
*/* */
*/*********************************************************************/
FORM UPLOAD_FROM_PC.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = PCFILE
* FILETYPE = TYPE
* BIN_FILESIZE = FILESIZE
IMPORTING
FILELENGTH = FILESIZE
TABLES
DATA_TAB = D.
ENDFORM.
*/*********************************************************************/
*/* */
*/* Issue a message */
*/* */
*/*********************************************************************/