|
Utility ABAP to Download / Upload a layout set.
*/******************************************************************/ */* */ */* 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. Text elements I | 002 | Form does not exists in client & | I | 003 | con nombre & | I | 004 | Activo | I | 005 | Formularios copiados: | I | 009 | Cliente destino: Informacion de formulario copiada con clave | I | 010 | Cliente fuent = | I | 011 | Cliente destino = | I | 014 | Sobreescribir formulario & | I | 015 | en cliente destino & ? | I | 016 | Copiar formulario | I | 017 | Formulario con nombre gen. & en | I | 035 | invalido | R | | Carga/Descarga de formularios | S | DSNAME | Nombre DOS | S | FORMNAME | Nombre formulario | S | FUNCTION | U - Upload D - Download | S | PATH | Path DOS completo (fin en \) | S | QUELMAND | Copiar desde cliente | S | ZIELFORM | Nuevo nombre para formulario |
Related Items:
|