扫描 ABAP 报表源

*文本元素:
*text symbols:
*001 行     源代码 (
*002 源代码                                                                     行     报表
*003 输入搜索字符串
*004 屏幕
*005 源代码                                                                    行     屏幕
*006 字符串
*401 下载结果
*A10 报表/屏幕选择
*A20 搜索标准
*A30 搜索区域
*H01 源扫描字符串:
*M01 未找到
*M02 命中字符串
*M03 无效的光标定位
*T01 日期:
*T02 时间:

*selection text
*APPL 应用
*CNAM 创建者
*COMMENT 忽略注释行
*DEVCLASS 开发类
*DYNNR 屏幕
*D_PGLST 程序名清单
*D_PG_CD 程序名+含被查找字串的代码行
*INCLU 扩展 INCLUDE
*MASK 标记搜索
*MODIASS 更改修正辅助
*PLUSMINU 找到位置 +/- x 行
*RB_ALL ABAP 和屏幕
*RB_CODE ABAP 程序
*RB_DYN 屏幕流逻辑
*REPNAME 程序名
*SSTRING 查找字符串
*SUBC   程序类型
*UNAM 最后修改人

 


*----------------------------------------------------------------------*
* Scan a set of reports for a particular string
*----------------------------------------------------------------------*
REPORT RPR_ABAP_SOURCE_SCAN MESSAGE-ID 56
                            NO STANDARD PAGE HEADING LINE-SIZE 150.

TABLES: D020S,
        TADIR,
        TRDIR,
        TUCHK3.

TYPES:  BEGIN OF RESULT_LN,
          NUM(6),
          REPNAME LIKE SY-REPID,
          DYNNR   LIKE SY-DYNNR,
          LINE_NO(6) TYPE N,
          TEXT    LIKE RSTXP-TDLINE,
          SSTRING,
       END OF RESULT_LN,

       RESULT_TAB TYPE RESULT_LN OCCURS 0.

DATA: DISPTYPE   VALUE 'A',
      DTAB       TYPE RESULT_TAB WITH HEADER LINE,
      FTAB       TYPE RESULT_TAB WITH HEADER LINE,
      HIT_COUNT  TYPE I,
      TABIX      LIKE SY-TABIX,
      TEXT_LINE  LIKE RSTXP-TDLINE,
      TOP_FLAG.
DATA: DISPLIST.

DATA: BEGIN OF DYN OCCURS 0,
        PROG  LIKE D020S-PROG,
        DNUM  LIKE D020S-DNUM,
      END OF DYN,

      BEGIN OF FM OCCURS 0,
        OBJ_NAME LIKE TADIR-OBJ_NAME,
      END OF FM,

      BEGIN OF IRDIR OCCURS 50,
        NAME LIKE TRDIR-NAME,
      END OF IRDIR,

      BEGIN OF ITAB OCCURS 50,
        REPNAME LIKE SY-REPID,
      END OF ITAB,

      ITAB_II LIKE ITAB OCCURS 50 WITH HEADER LINE,

     BEGIN OF RTAB OCCURS 0,
       TEXT LIKE RPY_DYFLOW-LINE,
     END OF RTAB,

     RTAB_LCASE LIKE LINE OF RTAB,
     RTAB_TMP   LIKE LINE OF RTAB.

TYPES : BEGIN OF TYPE_RESULT,
          REPNAME LIKE SY-REPID,
          COUNT(6),
        END OF TYPE_RESULT.

TYPES : BEGIN OF TYPE_DOWNLOAD,
          NUM(6),
          REPNAME LIKE SY-REPID,
*          dynnr LIKE sy-dynnr,
        END OF TYPE_DOWNLOAD.

DATA: NUM(6).

DATA: ITAB_RESULT TYPE TYPE_RESULT OCCURS 0 WITH HEADER LINE.
DATA:      ITAB0 LIKE FTAB OCCURS 0 WITH HEADER LINE.
DATA: ITAB_DOWNLOAD TYPE TYPE_DOWNLOAD OCCURS 0 WITH HEADER LINE.
DATA: ITAB_PG_CODE LIKE FTAB OCCURS 0 WITH HEADER LINE.
*data: itab_code

DATA: COUNT(6) VALUE 0.

DATA: FILE_NAME TYPE LOCALFILE.

SELECTION-SCREEN: BEGIN OF BLOCK A10 WITH FRAME TITLE A10.
SELECT-OPTIONS:   REPNAME  FOR TRDIR-NAME MEMORY ID SCAN_REPID,
                  DYNNR    FOR D020S-DNUM,
                  SUBC     FOR TRDIR-SUBC,
                  APPL     FOR TRDIR-APPL,
                  CNAM     FOR TRDIR-CNAM,
                  UNAM     FOR TRDIR-UNAM,
                  DEVCLASS FOR TADIR-DEVCLASS.
SELECTION-SCREEN: END OF BLOCK A10,
                  BEGIN OF BLOCK A20 WITH FRAME TITLE A20.
SELECT-OPTIONS:   SSTRING     FOR TUCHK3-OBJECT NO INTERVALS.
PARAMETERS:       PLUSMINU(2) TYPE N DEFAULT 2,
                  INCLU       AS CHECKBOX DEFAULT 'X',
                  MODIASS     AS CHECKBOX,
                  COMMENT     AS CHECKBOX,
                  MASK        AS CHECKBOX.
SELECTION-SCREEN: END OF BLOCK A20.

SELECTION-SCREEN: BEGIN OF BLOCK A30 WITH FRAME TITLE A30.
PARAMETERS:       RB_CODE  RADIOBUTTON GROUP R10,
                  RB_DYN   RADIOBUTTON GROUP R10,
                  RB_ALL   RADIOBUTTON GROUP R10.
SELECTION-SCREEN: END OF BLOCK A30.

SELECTION-SCREEN: BEGIN OF BLOCK A40 WITH FRAME TITLE TEXT-401.
PARAMETERS:
*                  d_code  AS CHECKBOX,
                  D_PGLST AS CHECKBOX,
                  D_PG_CD AS CHECKBOX.
SELECTION-SCREEN: END OF BLOCK A40.

DATA: STRING LIKE SSTRING-LOW.

INITIALIZATION.
  A10 = 'Report/Dynpro Selektion'(A10).
  A20 = 'Suchkriterien'(A20).
  A30 = 'Suchbereich'(A30).

TOP-OF-PAGE.
*  PERFORM top_of_page.

TOP-OF-PAGE DURING LINE-SELECTION.
*  PERFORM top_of_page.

AT SELECTION-SCREEN.
  IF SSTRING[] IS INITIAL AND MODIASS IS INITIAL.
    MESSAGE E016 WITH 'Bitte Suchstring eingeben'(003).
  ENDIF.

START-OF-SELECTION.
  IF NOT MODIASS IS INITIAL.
    SSTRING-SIGN    = 'I'.
    SSTRING-OPTION  = 'EQ'.
    SSTRING-LOW     = '{'.
    APPEND SSTRING.
    SSTRING-LOW     = '}'.
    APPEND SSTRING.
  ENDIF.

  READ TABLE SSTRING INDEX 1.
  DESCRIBE TABLE SSTRING LINES SY-TFILL.
  IF SY-TFILL = 1.
    STRING = SSTRING-LOW.
  ELSE.
    CONCATENATE SSTRING-LOW
               '...'
                INTO STRING SEPARATED BY SPACE.
  ENDIF.

  SET PF-STATUS 'MAIN'.

  IF NOT DEVCLASS[] IS INITIAL.
    SELECT OBJ_NAME INTO TABLE IRDIR
      FROM TADIR
      WHERE PGMID  = 'R3TR'
      AND   OBJECT = 'PROG'
      AND   DEVCLASS IN DEVCLASS.

    SELECT OBJ_NAME INTO TABLE FM
      FROM TADIR
      WHERE PGMID  = 'R3TR'
      AND   OBJECT = 'FUGR'
      AND   DEVCLASS IN DEVCLASS.

    LOOP AT FM.
      CONCATENATE 'SAPL'
                   FM-OBJ_NAME INTO IRDIR.
      APPEND IRDIR.
    ENDLOOP.
  ENDIF.

  IF NOT REPNAME[] IS INITIAL.
    SELECT NAME APPENDING TABLE IRDIR
      FROM TRDIR
      WHERE NAME IN REPNAME
      AND   CNAM IN CNAM
      AND   UNAM IN UNAM
      AND   SUBC IN SUBC
      AND   APPL IN APPL.
  ENDIF.

  CHECK NOT IRDIR[] IS INITIAL.

  IF RB_CODE IS INITIAL.
*   Also scan dynpro flow logic
    SELECT PROG DNUM INTO TABLE DYN
      FROM D020S FOR ALL ENTRIES IN IRDIR
      WHERE PROG = IRDIR-NAME
      AND   DNUM IN DYNNR.
  ENDIF.

  IF NOT INCLU IS INITIAL.
    LOOP AT IRDIR.
      REFRESH ITAB_II.
      CALL FUNCTION 'GET_INCLUDES'
           EXPORTING
                PROGNAME = IRDIR-NAME
           TABLES
                INCLTAB  = ITAB_II.

      APPEND LINES OF ITAB_II TO ITAB.
    ENDLOOP.
  ENDIF.

  APPEND LINES OF IRDIR TO ITAB.
  SORT ITAB.
  DELETE ADJACENT DUPLICATES FROM ITAB.

  IF RB_DYN IS INITIAL.
    LOOP AT ITAB.
      READ REPORT ITAB-REPNAME INTO RTAB.
      CHECK SY-SUBRC = 0.
      IF NOT COMMENT IS INITIAL.
        DELETE RTAB
          WHERE TEXT(1) = '*'.
      ENDIF.

      LOOP AT SSTRING.
        IF MASK IS INITIAL.
          SEARCH RTAB FOR SSTRING-LOW.
          CHECK SY-SUBRC = 0.
        ELSE.
          SY-TABIX = 1.
        ENDIF.

        LOOP AT RTAB FROM SY-TABIX.
          TABIX      = SY-TABIX.
          RTAB_LCASE = RTAB.
          TRANSLATE RTAB TO UPPER CASE.

          CASE MASK.
            WHEN SPACE.
              IF RTAB-TEXT CS SSTRING-LOW.
                PERFORM: GET_HIT_SET USING RTAB_LCASE TABIX SPACE.
              ENDIF.

            WHEN OTHERS.
              IF RTAB-TEXT CP SSTRING-LOW.
                PERFORM: GET_HIT_SET USING RTAB_LCASE TABIX SPACE.
              ENDIF.
          ENDCASE.
        ENDLOOP.
      ENDLOOP.
    ENDLOOP.
  ENDIF.

  FREE: ITAB.

  IF RB_CODE IS INITIAL.
    LOOP AT DYN.
      PERFORM GET_DYNPRO_FLOW_LOGIC.
      IF NOT COMMENT IS INITIAL.
        DELETE RTAB
          WHERE TEXT(1) = '*'.
      ENDIF.

      LOOP AT SSTRING.
        IF MASK IS INITIAL.
          SEARCH RTAB FOR SSTRING-LOW.
          CHECK SY-SUBRC = 0.
        ELSE.
          SY-TABIX = 1.
        ENDIF.

        LOOP AT RTAB FROM SY-TABIX.
          TABIX      = SY-TABIX.
          RTAB_LCASE = RTAB.
          TRANSLATE RTAB TO UPPER CASE.

          CASE MASK.
            WHEN SPACE.
              IF RTAB-TEXT CS SSTRING-LOW.
                PERFORM: GET_HIT_SET USING RTAB_LCASE TABIX 'D'.
              ENDIF.

            WHEN OTHERS.
              IF RTAB-TEXT CP SSTRING-LOW.
                PERFORM: GET_HIT_SET USING RTAB_LCASE TABIX 'D'.
              ENDIF.
          ENDCASE.
        ENDLOOP.
      ENDLOOP.
    ENDLOOP.
  ENDIF.

  FREE: DYN.

END-OF-SELECTION.
  IF FTAB[] IS INITIAL AND DTAB[] IS INITIAL.
    MESSAGE S016 WITH 'String'(006) STRING 'nicht gefunden'(M01).
    EXIT.
  ENDIF.

  SORT: FTAB BY REPNAME LINE_NO SSTRING DESCENDING,
        DTAB BY REPNAME DYNNR LINE_NO SSTRING DESCENDING.

  DELETE ADJACENT DUPLICATES FROM: FTAB COMPARING REPNAME LINE_NO,
                                   DTAB COMPARING REPNAME DYNNR LINE_NO.

  MESSAGE S016 WITH HIT_COUNT 'Treffer f黵 String'(M02) STRING.

*  perform:
*            display_ftab_alt,
*           display_dtab_alt.

*-------------------
  REFRESH ITAB_PG_CODE.
  MOVE FTAB[] TO ITAB_PG_CODE[].

  REFRESH ITAB0.
  MOVE FTAB[] TO ITAB0[].
  SORT ITAB0 BY REPNAME.
  DELETE ADJACENT DUPLICATES FROM ITAB0 COMPARING REPNAME.
  CLEAR NUM.
  LOOP AT ITAB0.
    NUM = NUM + 1.
    ITAB0-NUM = NUM .
    MODIFY ITAB0.
    CLEAR ITAB0.
  ENDLOOP.

  LOOP AT ITAB0.
    ITAB_DOWNLOAD-REPNAME = ITAB0-REPNAME.
    ITAB_DOWNLOAD-NUM = ITAB0-NUM.
    APPEND ITAB_DOWNLOAD.
    CLEAR ITAB0.
    CLEAR ITAB_DOWNLOAD.
  ENDLOOP.


  DELETE FTAB WHERE SSTRING NE 'X' OR TEXT EQ SPACE.

  LOOP AT FTAB.
    READ TABLE ITAB0 WITH KEY REPNAME = FTAB-REPNAME.
    IF SY-SUBRC = 0.
      FTAB-NUM = ITAB0-NUM.
      MODIFY FTAB.
    ENDIF.
    CLEAR ITAB0.
    CLEAR FTAB.
  ENDLOOP.

*  sort ftab by repname.
*  delete adjacent duplicates from ftab comparing repname.
  PERFORM DISPLAY_HEAD_LINE_M.
  PERFORM DISPLAY_ITAB_ALT.

  IF D_PGLST = 'X'.
    CLEAR FILE_NAME.
    CALL FUNCTION 'DOWNLOAD'
     EXPORTING
          FILENAME   = FILE_NAME
          FILETYPE   = 'DAT'
          ITEM = 'Download Program List'
     TABLES
          DATA_TAB   = ITAB_DOWNLOAD
*              fieldnames = head_tab_sum
     EXCEPTIONS
          OTHERS     = 1.
  ENDIF.

*  IF d_code = 'X'.
*
*  ENDIF.

  IF D_PG_CD = 'X'.
    CLEAR FILE_NAME.
    CALL FUNCTION 'DOWNLOAD'
     EXPORTING
          FILENAME   = FILE_NAME
          FILETYPE   = 'DAT'
          ITEM = 'Download Program and hitted source code'
     TABLES
          DATA_TAB   = ITAB_PG_CODE
*              fieldnames = head_tab_sum
     EXCEPTIONS
          OTHERS     = 1.
  ENDIF.

*--------------------

AT LINE-SELECTION.
  PERFORM CALL_EDITOR.

AT USER-COMMAND.
  CASE SY-UCOMM.
    WHEN 'TOGL'.
      CLEAR DISPLIST.
      CASE DISPTYPE.
        WHEN 'M'.
          DISPTYPE = 'A'.
          PERFORM DISPLAY_HEAD_LINE_M.
          PERFORM DISPLAY_ITAB_ALT.
*          perform: display_ftab_alt,
*                   display_dtab_alt.
        WHEN 'A'.
          DISPTYPE = 'M'.
          PERFORM DISPLAY_HEAD_LINE_A.
          PERFORM: DISPLAY_FTAB,
                   DISPLAY_DTAB.
      ENDCASE.
      SY-LSIND = SY-LSIND - 1.
    WHEN 'DISPPG'.
      DISPLIST = 'X'.
      PERFORM FRM_DISPLAY_PROGRAM_NAME.

    WHEN 'DOWNLOAD'.
      CLEAR FILE_NAME.
      CALL FUNCTION 'DOWNLOAD'
       EXPORTING
            FILENAME   = FILE_NAME
            FILETYPE   = 'DAT'
            ITEM = 'Download Program List'
       TABLES
            DATA_TAB   = ITAB_DOWNLOAD
*              fieldnames = head_tab_sum
       EXCEPTIONS
            OTHERS     = 1.
  ENDCASE.

*---------------------------------------------------------------------*
*       FORM APPEND_FTAB                                              *
*---------------------------------------------------------------------*
FORM APPEND_FTAB USING TEXT    LIKE RTAB_LCASE
                       LINE_NO LIKE SY-TABIX
                       SSTRING TYPE C
                       SOURCE  TYPE C.

  DATA: LN TYPE RESULT_LN.

  LN-LINE_NO = LINE_NO.
  LN-TEXT    = TEXT.
  LN-SSTRING = SSTRING.

  IF SOURCE IS INITIAL.
    LN-REPNAME = ITAB-REPNAME.
    APPEND LN TO FTAB.
  ELSE.
    LN-REPNAME = DYN-PROG.
    LN-DYNNR   = DYN-DNUM.
    APPEND LN TO DTAB.
    CLEAR: LN-DYNNR.
  ENDIF.

  IF NOT LN-SSTRING IS INITIAL.
    ADD 1 TO HIT_COUNT.
  ENDIF.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM TOP_OF_PAGE                                              *
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE.
  DATA: REPNAME(50).
  ULINE /(150).
  FORMAT INTENSIFIED ON.
  WRITE: / SY-VLINE.

  IF TOP_FLAG = 'A'.
    REPNAME = FTAB-REPNAME.
  ELSE.
    CONCATENATE DTAB-REPNAME
               'Dynpro'(004)
                DTAB-DYNNR
                INTO REPNAME SEPARATED BY SPACE.
  ENDIF.

  CASE DISPTYPE.
    WHEN 'A'.
      ITAB_RESULT-REPNAME = REPNAME.
      ITAB_RESULT-COUNT = COUNT + 1.
      APPEND ITAB_RESULT.
      CONCATENATE 'Zeile  Source Code ('(001)
                   REPNAME
                   ')' INTO TEXT_LINE.
      WRITE: TEXT_LINE.
    WHEN 'M'.
      IF TOP_FLAG = 'A'.
        WRITE: 'Source Code ...'(002).
      ELSE.
        WRITE: 'Source Code ...'(005).
      ENDIF.
  ENDCASE.
  WRITE: 150 SY-VLINE.
  ULINE (150).
ENDFORM.
*---------------------------------------------------------------------*
*       FORM DISPLAY_FTAB                                             *
*---------------------------------------------------------------------*
*       Display search results
*---------------------------------------------------------------------*
FORM DISPLAY_FTAB.
  CHECK RB_DYN IS INITIAL.

  TOP_FLAG = 'A'.

*  new-page.

  LOOP AT FTAB.
    FORMAT HOTSPOT ON.
    IF FTAB-SSTRING IS INITIAL.
      WRITE: / SY-VLINE,
               FTAB-TEXT INTENSIFIED OFF.
    ELSE.
      WRITE: / SY-VLINE,
               FTAB-TEXT INTENSIFIED OFF COLOR COL_TOTAL.
    ENDIF.
    WRITE:   SY-VLINE       NO-GAP,
             FTAB-LINE_NO   NO-GAP INTENSIFIED,
             SY-VLINE       NO-GAP,
             FTAB-REPNAME   NO-GAP INTENSIFIED,
        150  SY-VLINE       NO-GAP.

    HIDE: FTAB-REPNAME,
          FTAB-LINE_NO.

    AT END OF REPNAME.
      FORMAT HOTSPOT OFF.
      ULINE /(150).
    ENDAT.
  ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM DISPLAY_DTAB                                             *
*---------------------------------------------------------------------*
*       Display search results (dynpro)
*---------------------------------------------------------------------*
FORM DISPLAY_DTAB.
  CHECK RB_CODE IS INITIAL.

  TOP_FLAG = 'D'.

*  new-page.

  LOOP AT DTAB.
    FORMAT HOTSPOT ON.
    IF DTAB-SSTRING IS INITIAL.
      WRITE: / SY-VLINE,
               DTAB-TEXT INTENSIFIED OFF.
    ELSE.
      WRITE: / SY-VLINE,
               DTAB-TEXT INTENSIFIED OFF COLOR COL_TOTAL.
    ENDIF.
    WRITE:   SY-VLINE       NO-GAP,
             DTAB-LINE_NO   NO-GAP INTENSIFIED,
             SY-VLINE       NO-GAP,
             DTAB-REPNAME   NO-GAP INTENSIFIED,
             DTAB-DYNNR     NO-GAP INTENSIFIED,
        150  SY-VLINE       NO-GAP.

    HIDE:    DTAB-REPNAME,
             DTAB-DYNNR,
             DTAB-LINE_NO.

    AT END OF REPNAME.
      FORMAT HOTSPOT OFF.
      ULINE /(150).
    ENDAT.
  ENDLOOP.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM DISPLAY_FTAB_ALT
*---------------------------------------------------------------------*
*       Display hit list without report name on every line
*---------------------------------------------------------------------*
FORM DISPLAY_FTAB_ALT.
  CHECK RB_DYN IS INITIAL.

  TOP_FLAG = 'A'.

*  new-page.

  LOOP AT FTAB.

    AT NEW REPNAME.
      FORMAT HOTSPOT ON.
      IF SY-TABIX > 1.
        NEW-PAGE.
      ENDIF.
    ENDAT.

    IF NOT ( FTAB-SSTRING IS INITIAL ).


      WRITE: / SY-VLINE       NO-GAP,
               FTAB-LINE_NO   NO-GAP,
               SY-VLINE       NO-GAP.
*
*    if ftab-sstring is initial.
*      write: ftab-text      intensified off.
*    else.
      WRITE: FTAB-TEXT      INTENSIFIED OFF COLOR COL_TOTAL.
    ENDIF.

    WRITE: 150 SY-VLINE.

    HIDE:    FTAB-REPNAME,
             FTAB-LINE_NO.

    AT END OF REPNAME.
      FORMAT HOTSPOT OFF.
      ULINE /(150).
    ENDAT.
  ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM DISPLAY_DTAB_ALT
*---------------------------------------------------------------------*
*       Display dynpro hit list without report name on every line
*---------------------------------------------------------------------*
FORM DISPLAY_DTAB_ALT.
  CHECK RB_CODE IS INITIAL.

  TOP_FLAG = 'D'.

  NEW-PAGE.

  LOOP AT DTAB.

    AT NEW REPNAME.
      FORMAT HOTSPOT ON.
      IF SY-TABIX > 1.
        NEW-PAGE.
      ENDIF.
    ENDAT.

    WRITE: / SY-VLINE       NO-GAP,
             DTAB-LINE_NO   NO-GAP,
             SY-VLINE       NO-GAP.

    IF DTAB-SSTRING IS INITIAL.
      WRITE: DTAB-TEXT      INTENSIFIED OFF.
    ELSE.
      WRITE: DTAB-TEXT      INTENSIFIED OFF COLOR COL_TOTAL.
    ENDIF.

    WRITE: 150 SY-VLINE.

    HIDE:    DTAB-REPNAME,
             DTAB-DYNNR,
             DTAB-LINE_NO.

    AT END OF REPNAME.
      FORMAT HOTSPOT OFF.
      ULINE /(150).
    ENDAT.
  ENDLOOP.
ENDFORM.
*----------------------------------------------------------------------*
*       Form  GET_PLUS_MINUS_X_LINES
*----------------------------------------------------------------------*
*       Get x lines before the found string and x lines after
*----------------------------------------------------------------------*
FORM GET_HIT_SET USING VALUE(CTEXT)   LIKE RTAB_LCASE
                       VALUE(LINE_NO) LIKE SY-TABIX
                       SRCE_TYPE      TYPE C.

  DATA: END    TYPE I,
        START  TYPE I,
        XTABIX LIKE SY-TABIX.

  IF PLUSMINU <= 0.
    PERFORM APPEND_FTAB USING CTEXT LINE_NO 'X' SRCE_TYPE.
    EXIT.
  ENDIF.

  START = LINE_NO - PLUSMINU .
  END   = LINE_NO + PLUSMINU.

  IF START < 1.
    START = 1.
  ENDIF.

  WHILE START <= END.
    READ TABLE RTAB INTO CTEXT INDEX START.
    IF SY-SUBRC <> 0.
      EXIT.
    ENDIF.
    XTABIX = SY-TABIX.
    IF START = LINE_NO.
      PERFORM APPEND_FTAB USING CTEXT XTABIX 'X' SRCE_TYPE.
    ELSE.
      PERFORM APPEND_FTAB USING CTEXT XTABIX SPACE SRCE_TYPE.
    ENDIF.
    ADD 1 TO START.
  ENDWHILE.
ENDFORM.                               " GET_HIT_SET
*----------------------------------------------------------------------*
*       Form  CALL_EDITOR
*----------------------------------------------------------------------*
*       Call ABAP or screen painter editor
*----------------------------------------------------------------------*
FORM CALL_EDITOR.
  CLEAR: FTAB,
         DTAB.

  IF DISPLIST ne 'X'.

  READ LINE SY-LILLI
       FIELD VALUE FTAB-REPNAME
                   FTAB-LINE_NO
                   DTAB-REPNAME
                   DTAB-DYNNR
                   DTAB-LINE_NO.

  IF DTAB-REPNAME EQ SPACE.
    MOVE: FTAB-REPNAME TO DTAB-REPNAME,
          FTAB-LINE_NO TO DTAB-LINE_NO.
  ENDIF.

  IF DTAB-DYNNR IS INITIAL.
*   Call ABAP editor
    CALL FUNCTION 'EDITOR_PROGRAM'
         EXPORTING
              DISPLAY = 'X'
              PROGRAM = DTAB-REPNAME
              TOPLINE = DTAB-LINE_NO
         EXCEPTIONS
              OTHERS  = 1.

    SET PARAMETER ID 'RID' FIELD SY-REPID.
  ELSE.
    CALL FUNCTION 'RS_SCRP'
         EXPORTING
              ABL_LINE       = DTAB-LINE_NO
              DYNNR          = DTAB-DYNNR
              PROGNAME       = DTAB-REPNAME
              WANTED_MODE    = 'SHOW'
         EXCEPTIONS
              ALREADY_EXISTS = 1
              NOT_FOUND      = 2
              NOT_EXECUTED   = 3
              OTHERS         = 4.
  ENDIF.

else.

    READ LINE SY-LILLI
         FIELD VALUE ITAB0-REPNAME
                     ITAB0-DYNNR
                     ITAB0-LINE_NO.
    IF ITAB0-DYNNR IS INITIAL.
*   Call ABAP editor
      CALL FUNCTION 'EDITOR_PROGRAM'
           EXPORTING
                DISPLAY = 'X'
                PROGRAM = iTAB0-REPNAME
                TOPLINE = iTAB0-LINE_NO
           EXCEPTIONS
                OTHERS  = 1.

      SET PARAMETER ID 'RID' FIELD SY-REPID.
    ELSE.
      CALL FUNCTION 'RS_SCRP'
           EXPORTING
                ABL_LINE       = iTAB0-LINE_NO
                DYNNR          = iTAB0-DYNNR
                PROGNAME       = iTAB0-REPNAME
                WANTED_MODE    = 'SHOW'
           EXCEPTIONS
                ALREADY_EXISTS = 1
                NOT_FOUND      = 2
                NOT_EXECUTED   = 3
                OTHERS         = 4.
    ENDIF.
  ENDIF.
ENDFORM.                               " CALL_EDITOR
*---------------------------------------------------------------------*
*       Form  GET_DYNPRO_FLOW_LOGIC
*----------------------------------------------------------------------*
*       Get flow logic of the dynpro
*----------------------------------------------------------------------*
FORM GET_DYNPRO_FLOW_LOGIC.
  DATA: DHEAD  LIKE D020S,
        DFIELD LIKE D021S OCCURS 0,
        DFLOW  LIKE D022S OCCURS 0,
        DMATCH LIKE D023S OCCURS 0,

        BEGIN OF DYNP_ID,
          PROG LIKE D020S-PROG,
          DNUM LIKE D020S-DNUM,
       END OF DYNP_ID.

  DYNP_ID-PROG = DYN-PROG.
  DYNP_ID-DNUM = DYN-DNUM.

  IMPORT DYNPRO DHEAD DFIELD DFLOW DMATCH ID DYNP_ID.

  RTAB[] = DFLOW[].
ENDFORM.                               " GET_DYNPRO_FLOW_LOGIC
*&---------------------------------------------------------------------*
*&      Form  display_itab_alt
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_ITAB_ALT.
*loop at itab0.
*  write:/ itab0-repname,
*          itab0-line_no,
*          itab0-text.
* endloop.
  REFRESH DTAB.
  CLEAR DTAB.
  MOVE FTAB[] TO DTAB[].
  LOOP AT DTAB.
    WRITE: / SY-VLINE       NO-GAP,
             2 DTAB-NUM,
             8 SY-VLINE       NO-GAP,
             DTAB-REPNAME,
             39 SY-VLINE       NO-GAP,
             DTAB-LINE_NO   NO-GAP,
             SY-VLINE       NO-GAP.
    FORMAT HOTSPOT ON.
    WRITE: DTAB-TEXT      INTENSIFIED OFF COLOR COL_TOTAL.
    WRITE: 181 SY-VLINE.

    HIDE:    DTAB-REPNAME,
             DTAB-DYNNR,
             DTAB-LINE_NO.
  ENDLOOP.
ENDFORM.                    " display_itab_alt
*&---------------------------------------------------------------------*
*&      Form  display_head_line_m
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_HEAD_LINE_M.
  DATA: REPNAME(50).
  ULINE /(150).
  FORMAT INTENSIFIED ON.
  WRITE: / SY-VLINE,
             2 'No.',
             8 SY-VLINE       NO-GAP,
             'program',
             39 SY-VLINE       NO-GAP,
             'line   '   NO-GAP,
             46 SY-VLINE   NO-GAP,
             'Source Code' NO-GAP.
*             sy-vline       NO-GAP.
  WRITE: 150 SY-VLINE.
  ULINE (150).


ENDFORM.                    " display_head_line_m
*&---------------------------------------------------------------------*
*&      Form  display_head_line_a
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_HEAD_LINE_A.

  DATA: REPNAME(50).
  ULINE /(150).
  FORMAT INTENSIFIED ON.
  WRITE: / SY-VLINE.

  IF TOP_FLAG = 'A'.
    WRITE: 'Source Code ...'(002).
  ELSE.
    WRITE: 'Source Code ...'(005).
  ENDIF.
  WRITE: 150 SY-VLINE.
  ULINE (150).
ENDFORM.                    " display_head_line_a
*&---------------------------------------------------------------------*
*&      Form  frm_display_program_name
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_PROGRAM_NAME.
  ULINE (44).
  WRITE: / SY-VLINE  NO-GAP,
         2 'No',
         8 SY-VLINE  NO-GAP,
         9 'Program Name',
         39 SY-VLINE NO-GAP,
         'Scrn',
         44 SY-VLINE.
  WRITE: / SY-ULINE(44).
  LOOP AT ITAB0.
    FORMAT HOTSPOT ON.
    WRITE:/ SY-VLINE  NO-GAP,
        2 ITAB0-NUM,
        8 SY-VLINE  NO-GAP.
    WRITE:  9 ITAB0-REPNAME INTENSIFIED OFF COLOR COL_TOTAL.

    WRITE:  39 SY-VLINE NO-GAP,
        ITAB0-DYNNR,
        44 SY-VLINE.

    HIDE:      ITAB0-REPNAME,
               ITAB0-DYNNR,
               ITAB0-LINE_NO.

  ENDLOOP.
  WRITE:/ SY-ULINE(44).
ENDFORM.                    " frm_display_program_name 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值