Enterprise Resource Planning PortalERPGenie.COM Enterprise Resource Planning Portal

   Advertise | Founder BLOG

Web ERPGenie.COM  Other Search Options

Home | Vote for us |

ERPGenie.COM -> SAP Technical -> ABAP -> Example code -> Up/Download SAPScript layouts

  • use program RSTXSCRP
*/******************************************************************/

*/*                                                             */

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