Shared Top Border

Enterprise Resource
Planning Portal

 

Advertise | Founder BLOG

ERPGenie.COM ABAP Tips and Tricks Database

THE ultimate
ERP website

 

Forums | Vote for us |

Google    Other Search Options

Home arrow Utilities arrow ABAP Utilities arrow Up/Download SAPScript layouts
Up/Download SAPScript layouts PDF Print E-mail
User Rating: / 0
PoorBest 
Written by Jim Hawthorne   
Saturday, 20 January 2007
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:

 
< Prev   Next >

Google Search

Google Ads

Shared Bottom Border

Contact Us | Polls | Add URL | Contribute | Privacy | Terms | Feedback

Discussion Forum | BLOG | Consultants: Post your resume | Companies: Advertise on ERPGenie.COM | Post Job
Financials Consultant | Consultant Review | Gallia Consulting | Supply Chain Project | SAP Financials Forum
GenieHoldings.COM, Inc. | Genie Press | WorkflowGenie | ESAGenie | ERPTopSites | ABAP Tips and Tricks | SAP Solutions Database

EDIGenie | Searching Survivor