0% found this document useful (0 votes)
112 views

Sapscript Forms

This ABAP program allows downloading and uploading of SAP layout sets between an SAP system and a PC. It reads layout set data from specific tables, collects the objects into internal tables, and downloads them to a file on the PC. For uploads, it uploads the file from the PC, reconstructs the objects from the internal tables, and restores the layout set objects back into the SAP system tables. The program handles a single layout set per execution but could be enhanced to support multiple sets by passing a table of set names. It operates on the logged in client system but can copy from any client.

Uploaded by

otracuentaaux5
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
112 views

Sapscript Forms

This ABAP program allows downloading and uploading of SAP layout sets between an SAP system and a PC. It reads layout set data from specific tables, collects the objects into internal tables, and downloads them to a file on the PC. For uploads, it uploads the file from the PC, reconstructs the objects from the internal tables, and restores the layout set objects back into the SAP system tables. The program handles a single layout set per execution but could be enhanced to support multiple sets by passing a table of set names. It operates on the logged in client system but can copy from any client.

Uploaded by

otracuentaaux5
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

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

*/* */
*/* 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 */
*/* */
*/******************************************************************/

PROGRAM ZZJIMH08 MESSAGE-ID TD.

PARAMETERS : FORMNAME LIKE STXH-TDFORM "source layout set


OBLIGATORY,
QUELMAND LIKE STXH-MANDT DEFAULT SY-MANDT, "Client
ZIELFORM LIKE STXH-TDFORM, "newname
FUNCTION(1) TYPE C, "Up / Download
DSNAME(30) TYPE C, "Dos data set name
PATH(48) TYPE C "Dos path
OBLIGATORY DEFAULT 'C:\TEMP\'.

TABLES: T100. "Mensajes


DATA: BEGIN OF X.
INCLUDE STRUCTURE THEAD.
DATA: END OF X.
DATA: BEGIN OF Y.
INCLUDE STRUCTURE TLINE.
DATA: END OF Y.
DATA: BEGIN OF D OCCURS 50,
TYPE(1) TYPE C,
INDX(3) TYPE C,
TXT(400) TYPE C,
END OF D.
DATA: BEGIN OF SRC_HEADER OCCURS 0. "Table of the forms to be copied
INCLUDE STRUCTURE THEAD.
DATA: END OF SRC_HEADER.
DATA: BEGIN OF HEADER.
INCLUDE STRUCTURE THEAD.
DATA: END OF HEADER.
DATA: BEGIN OF LINES OCCURS 0.
INCLUDE STRUCTURE TLINE.
DATA: END OF LINES.
DATA: ENTRIES LIKE SY-INDEX,
TEXTNAME LIKE THEAD-TDNAME, "Nombre del texto
MASTERFORM LIKE THEAD-TDNAME, "Nombre del texto
LNAME LIKE THEAD-TDFORM, "Nombre del formulario
MASTERLANGUAGE LIKE THEAD-TDSPRAS. "Clave de idioma
DATA:
TYPE(3) TYPE C, "File type - default ASCII
FILESIZE(8), "File size (MS-DOS)
I(3) TYPE C. "Work counter.

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.

MOVE-CORRESPONDING SRC_HEADER TO HEADER.


IF ZIELFORM NE SPACE AND FORMNAME NA '*'.
MOVE ZIELFORM(16) TO HEADER-TDNAME(16).
MOVE ZIELFORM(16) TO HEADER-TDFORM(16).
ENDIF.
IF HEADER-TDID = 'DEF'.
CALL FUNCTION 'SAPSCRIPT_CHANGE_OLANGUAGE'
EXPORTING
FORCED = 'X'
NAME = HEADER-TDNAME
OBJECT = HEADER-TDOBJECT
OLANGUAGE = HEADER-TDSPRAS
EXCEPTIONS
OTHERS = 01.
* perform write_message using 'TD' '180' header-tdname(16)
* header-tdspras
* space space.

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 */
*/* */
*/*********************************************************************/

FORM WRITE_MESSAGE USING MSG_AG MSG_NR V1 V2 V3 V4.

SELECT SINGLE * FROM T100 WHERE SPRSL = SY-LANGU


AND ARBGB = MSG_AG
AND MSGNR = MSG_NR.
IF SY-SUBRC = 0.
MSGTEXT = T100-TEXT.
ELSE.
MSGTEXT = '& & & &'.
ENDIF.
REPLACE '&' WITH V1 INTO MSGTEXT.
CONDENSE MSGTEXT.
REPLACE '&' WITH V2 INTO MSGTEXT.
CONDENSE MSGTEXT.
REPLACE '&' WITH V3 INTO MSGTEXT.
CONDENSE MSGTEXT.
REPLACE '&' WITH V4 INTO MSGTEXT.
CONDENSE MSGTEXT.
WRITE: / MSGTEXT.
ENDFORM.

FORM CHECK_NAME USING CNAME.


DATA:
LEN LIKE SY-FDPOS,
NAME(16).
FIELD-SYMBOLS: <NAME>.
NAME = CNAME.
LEN = STRLEN( NAME ).
IF LEN <= 0.
LEN = 1.
ENDIF.
ASSIGN NAME(LEN) TO <NAME>.
IF NAME(1) CN 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
PERFORM WRITE_MESSAGE USING 'TD' '118' NAME SPACE SPACE SPACE.
STOP.
ENDIF.
IF <NAME> CN 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'.
PERFORM WRITE_MESSAGE USING 'TD' '605' NAME SPACE SPACE SPACE.
STOP.
ENDIF.
ENDFORM.

You might also like