Reportanzeige als Baumstruktur

Mit dem folgenden Programm ist es einfach möglich, eine Auswahl an Programmen in einer Baumübersicht darzustellen. Es werden alle selektierten Reports als Knoten eines Baumes angezeigt. Durch Aufklicken eines Programms wird der Quelltext angezeigt. Durch einen Doppelklick auf den Programmnamen oder den Quelltext kann in das Coding verzweigt werden.

Beschreibung

Das Programm eignet sich wunderbar, um eigene Programme zu verwalten.

Der Quelltext wird erst eingelesen, wenn er auch angezeigt werden soll. Das Programm arbeitet also sehr schnell.


Enno’s ABAPs

Tipps zur verwendung

Suche

Um das Coding der angezeigten Programme zu durchsuchen, setzen Sie den Cursor auf den Root-Eintrag „Enno’s ABAPs“ und drücken Sie [Teilbaum expandieren]. Es dauert nun etwas, je nach Anzahl der selektierten Reports, da nun der Quelltext der Programme gelesen wird.

Nun können Sie mit STRG+F den Quellcode durchsuchen.

Selektion

Es werden in dem Programm nur Repors selektiert; also keine Modulpools oder Includes. Die Selektion kann aber einfach angepasst werden.

Mit dem Funktionsbaustein „RS_GET_ALL_INCLUDES“ können noch zusätzlich alle Includes zu einem Report ermittelt werden.

Coding

REPORT ZZSHOWREP MESSAGE-ID ZS.

DATA:
  LS_ATTR       TYPE STREEATTR,
  LV_ROOT_ID    LIKE SNODE-ID,
  LV_NEW_ID     LIKE SNODE-ID,
  LS_ADDRESS    TYPE BAPIADDR3,
  LT_RETURN     TYPE STANDARD TABLE OF BAPIRET2,
  LT_TPOOL      LIKE TEXTPOOL OCCURS 0 WITH HEADER LINE,
  LV_INDEX      TYPE I,
  LV_ANZAHL     TYPE I,
  LV_ZEILE(5)   TYPE C,
  LV_NAME       TYPE PROGRAMM,
  LT_QTEXT      LIKE ABAPSOURCE OCCURS 0 WITH HEADER LINE,
  BEGIN OF LT_NAME OCCURS 0,
    PROGRAMM TYPE PROGRAMM,
    TREE_ID  LIKE SNODE-ID,
  END OF LT_NAME.

*** Selektion
SELECT-OPTIONS:
  S_REPORT FOR LV_NAME  DEFAULT ‚ZZ*‘ OPTION CP,
  S_UNAME  FOR SY-UNAME DEFAULT SY-UNAME.

START-OF-SELECTION.
*** Selektion
  SELECT NAME FROM TRDIR INTO TABLE LT_NAME
   WHERE NAME IN S_REPORT
     AND CNAM IN S_UNAME
     AND SUBC IN (‚1′,’M‘).
  IF SY-SUBRC = 0.
*** sort
    SORT LT_NAME DESCENDING.

*** Benutzernamen lesen
   
CALL FUNCTION ‚BAPI_USER_GET_DETAIL‘
         EXPORTING
              USERNAME       = SY-UNAME
         IMPORTING
              ADDRESS        = LS_ADDRESS
         TABLES
              RETURN         = LT_RETURN.

    CONCATENATE LS_ADDRESS-FIRSTNAME “’s ABAPs‘ INTO LV_NAME.

*** Tree erzeugen
    CALL FUNCTION ‚RS_TREE_CREATE‘
         EXPORTING
              ROOT_NAME = LV_NAME
         IMPORTING
              ROOT_ID   = LV_ROOT_ID.

*** Reportnamen
    LOOP AT LT_NAME.
*** Reporttexte lesen
      READ TEXTPOOL LT_NAME-PROGRAMM
               INTO LT_TPOOL LANGUAGE SY-LANGU.

*** Tree-Attribute
      LS_ATTR-NLENGTH    = 30.
      LS_ATTR-COLOR      = 4.
      LS_ATTR-INTENSIV   = SPACE.
      LS_ATTR-TLENGTH    = 90.
      LS_ATTR-TCOLOR     = 6.
      LS_ATTR-TINTENSIV  = SPACE.
      LS_ATTR-TPOS       = 46.
      LS_ATTR-FORCE_PLUS = ‚X‘.

*** Programmbezeichnung
      READ TABLE LT_TPOOL WITH KEY ID = ‚R‘.
      LS_ATTR-TEXT      = LT_TPOOL-ENTRY.

*** Programm einhängen
      CALL FUNCTION ‚RS_TREE_ADD_NODE‘
           EXPORTING
                NEW_NAME           = LT_NAME-PROGRAMM
                INSERT_ID          = LV_ROOT_ID
                RELATIONSHIP       = ‚CHILD‘
                DISPLAY_ATTRIBUTES = LS_ATTR
           IMPORTING
                NEW_ID             = LT_NAME-TREE_ID
           EXCEPTIONS
                OTHERS             = 2.
      IF SY-SUBRC = 0.
         MODIFY LT_NAME.
      ENDIF.
    ENDLOOP.

*** Anzeigen
    CALL FUNCTION ‚RS_TREE_LIST_DISPLAY‘
         EXPORTING
              CALLBACK_PROGRAM      = ‚ZZSHOWREP‘
              CALLBACK_USER_COMMAND = ‚USER‘
              STATUS                = ‚STANDARD‘.

  ENDIF.

*———————————————————————*
*       FORM USER                                                     *
*———————————————————————*

FORM USER TABLES   NODE STRUCTURE SEUCOMM
          USING    COMMAND
          CHANGING EXIT
                   LIST_REFRESH.

  CASE COMMAND.
   WHEN ‚TREP‘.

*** Alle expandieren
     LOOP AT LT_NAME.
          DELETE LT_NAME.
          PERFORM QUELLTEXT_EINFUEGEN
            USING LT_NAME-PROGRAMM LT_NAME-TREE_ID.
     ENDLOOP.

   WHEN ‚TRPI‘.

*** Doppelklick
    CASE NODE-SELFIELD.
      WHEN ‚PLUS‘.

*** Programm aufklappen: Sourcecode nachlesen
        READ TABLE LT_NAME TRANSPORTING NO FIELDS
              WITH KEY PROGRAMM = NODE-NAME.
        IF SY-SUBRC = 0.
          DELETE LT_NAME INDEX SY-TABIX.
          PERFORM QUELLTEXT_EINFUEGEN USING NODE-NAME NODE-ID.
        ENDIF.

      WHEN ‚NAME‘ OR ‚TEXT‘.

        CASE NODE-TLEVEL.
          WHEN 2.
*** Doppelklick auf den Programmnamen oder -bezeichnung
            LV_NAME = NODE-NAME.

            CALL FUNCTION ‚EDITOR_PROGRAM‘
                 EXPORTING
                      PROGRAM = LV_NAME.

          WHEN 3.
*** Doppelklick auf eine Zeile des Quelltextes
            LV_NAME  = NODE-TEXT2.
            LV_ZEILE = NODE-NAME.
            CALL FUNCTION ‚EDITOR_PROGRAM‘
                 EXPORTING
                      PROGRAM = LV_NAME
                      TOPLINE = LV_ZEILE.
        ENDCASE.
    ENDCASE.
  ENDCASE.

ENDFORM.

*&———————————————————————*
*&      Form  QUELLTEXT_EINFUEGEN
*&———————————————————————*
FORM QUELLTEXT_EINFUEGEN USING    FI_NAME
                                  FI_NEW_ID.

 LV_NEW_ID = FI_NEW_ID.

*** Reportsource lesen
  READ REPORT FI_NAME INTO LT_QTEXT.
*** Quelltext einhängen
  DESCRIBE TABLE LT_QTEXT LINES LV_ANZAHL.
  LV_INDEX = LV_ANZAHL.

*** Quelltext „rückwärts“ lesen, damit die Darstellung richtig wird
  DO LV_ANZAHL TIMES.
    READ TABLE  LT_QTEXT INDEX LV_INDEX.
    CLEAR LS_ATTR.
    WRITE LV_INDEX TO LV_ZEILE.
    LS_ATTR-TEXT2    = FI_NAME.
    LS_ATTR-NLENGTH  = 5.
    LS_ATTR-COLOR    = 2.
    LS_ATTR-INTENSIV = SPACE.
    LS_ATTR-TEXT     = LT_QTEXT-LINE.
    LS_ATTR-TLENGTH  = 72.

*** Quelltextzeile einfügen
    CALL FUNCTION ‚RS_TREE_ADD_NODE‘
         EXPORTING
              NEW_NAME           = LV_ZEILE
              INSERT_ID          = LV_NEW_ID
              RELATIONSHIP       = ‚CHILD‘
              DISPLAY_ATTRIBUTES = LS_ATTR
         EXCEPTIONS
              OTHERS             = 2.
    SUBTRACT 1 FROM LV_INDEX.
  ENDDO.

ENDFORM.                    “ QUELLTEXT_EINFUEGEN

 

Enno Wulff
follow me