Make your own free website on Tripod.com
 

SAP ABAP Programming, Functional and Basis Components Books


Hiding ABAP Source code

PROGRAM ZHIDE NO STANDARD PAGE HEADING.
************************************************************************
* This program hides any ABAP's source code and protects it with a
* password in this source code.  So the first candidate to be hidden
* should be ZHIDE itself.
*
* After hiding, you can still run the abap (the load version is intact)
* but it cannot be displayed, edited, traced, transported or generated.
*
* If the ABAP is not hidden, the program hides it, if it is hidden, it
* unhides it.
*
* To execute this program, change the user name and password in this
* source code first.
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK BLOCK.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) PWD.
SELECTION-SCREEN POSITION 35.
PARAMETERS: PASSWORD(8) MODIF ID AAA.
SELECTION-SCREEN END OF LINE.
PARAMETERS: PROGRAM(8).
SELECTION-SCREEN END OF BLOCK BLOCK.
*
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF SCREEN-GROUP1 = 'AAA'.
      SCREEN-INVISIBLE = '1'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
*
INITIALIZATION.
  PWD = 'PASSWORD'.
*
START-OF-SELECTION.
  TABLES: TRDIR.
* User name and passsword check
  IF SY-UNAME <> 'SAP' OR PASSWORD <> 'PASSWORD'.
    WRITE: / 'Wrong password'.
    EXIT.
  ENDIF.
* SAP owned?
  IF NOT PROGRAM CP 'Z*' AND NOT PROGRAM CP 'Y*'.
    WRITE: / 'Do not hide original SAP programs!'.
    EXIT.
  ENDIF.
* Exists?
  SELECT SINGLE * FROM TRDIR WHERE NAME = PROGRAM.
  IF SY-SUBRC <> 0.
    WRITE: / 'Program does not exists!'.
    EXIT.
  ENDIF.
* Does it have a current generated version?
  DATA: F1 TYPE D, F3 TYPE D.
  DATA: F2 TYPE T, F4 TYPE T.
  EXEC SQL.
  SELECT UDAT, UTIME, SDAT, STIME INTO :F1, :F2, :F3, :F4 FROM D010LINF
                       WHERE PROG = :PROGRAM
  ENDEXEC.
  IF F1 < F3 OR ( F1 = F3 AND F2 < F4 ).
    WRITE: / 'The program has no recent generated version!'.
    EXIT.
  ENDIF.
* Compose a new program name
  DATA: NEW_NAME(8), I TYPE I, J TYPE I.
  NEW_NAME = PROGRAM.
  DO 8 TIMES.
    I = SY-INDEX - 1.
    NEW_NAME+I(1) = '_'.
* Search for acceptable program name variations
    J = 0.
    SELECT * FROM TRDIR WHERE NAME LIKE NEW_NAME.
      J = J + 1.
    ENDSELECT.
    IF J = 1.
      EXIT.
    ENDIF.
    NEW_NAME = PROGRAM.
  ENDDO.
* Cannot generate appropriate program name
  IF J > 1.
    WRITE: / 'Cannot generate appropriate program name'.
    EXIT.
  ENDIF.
* Check if it is already in d010s (already hidden)
  DATA: F5(8).
  EXEC SQL.
    SELECT PROG INTO :F5 FROM D010S WHERE PROG = :NEW_NAME
  ENDEXEC.
  IF F5 IS INITIAL.
* There is no such hidden program, hide it
    EXEC SQL.
      UPDATE D010S SET PROG = :NEW_NAME WHERE PROG = :PROGRAM
    ENDEXEC.
  ELSE.
* There is already a hidden program there, unhide it
    EXEC SQL.
      UPDATE D010S SET PROG = :PROGRAM WHERE PROG = :NEW_NAME
    ENDEXEC.
  ENDIF.

*** end of program

Back to Previous

Return to SAP Hints and Tips on Configuration and ABAP/4 Programming