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

Login

Login to view more content!!!





Lost Password?
No account yet? Register

Registered Access

Poll

What area of ABAP are you interested in?
 
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

Statistics

Contribution Activity
Utilities: 39
Tips and Tricks: 337
Sample Code: 170
Total Contributions: 561

Member Activity
Members: 6341 since 2/1/2007!
New: 1 since yesterday!
Visitors: 1239456

Newest Members

Welcome our newest members:

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