分享一个查找有更新表的程序

来源:互联网 发布:java国家精品课程 编辑:程序博客网 时间:2024/05/18 03:56

这里直接COPY过去就可以用的源码:

用法如下:



*&---------------------------------------------------------------------*
*& Report  Z_SEARCH_PROGRAM
*&
*&---------------------------------------------------------------------*
*&This program is used to find the table in which program updata
*&
*&---------------------------------------------------------------------*

REPORT  Z_SEARCH_PROGRAM
NO STANDARD PAGE HEADING
LINE-COUNT 65
LINE-SIZE  150
MESSAGE-ID 56.
*REPORT Z_SEARCH_PROGRAM MESSAGE-ID 56  NO STANDARD PAGE HEADING LINE-SIZE 150.
TABLESD020S,
        TADIR,
        TRDIR,
        TUCHK3,
        RSRD1,
        RSREPL.
TYPES:  BEGIN OF RESULT_LN,
          REPNAME LIKE SY-REPID,
          DYNNR   LIKE SY-DYNNR,
          LINE_NO(6TYPE N,
*         text    like rstxp-tdline,
          TEXT TYPE STRING,
          SSTRING ,
          DEL_FLAG,
       END OF RESULT_LN,
       RESULT_TAB TYPE RESULT_LN OCCURS 0.

DATADISPTYPE   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,
      TEXT_LINE  TYPE STRING,
      TOP_FLAG.
DATABEGIN 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,
       TEXT(1000),
     END OF RTAB,
     RTAB_LCASE LIKE LINE OF RTAB,
     RTAB_TMP   LIKE LINE OF RTAB.

* Types declaration.
TYPES BEGIN OF ty_where,
          tabname TYPE tabname,
          fieldname TYPE fieldname,
          rollname TYPE rollname,
        END OF ty_where,

        BEGIN OF ty_input,
          element TYPE rsrd1-ddtype_val,
        END OF ty_input,

        BEGIN OF ty_table,
          tabname TYPE tabname,
        END OF ty_table.

* Internal tables declaration.
DATA  it_founds TYPE TABLE OF rsfindlst WITH HEADER LINE,
        wa_founds like rsfindlst OCCURS WITH HEADER LINE,
        it_object_cls TYPE TABLE OF string,
        it_where TYPE TABLE OF ty_where,
        it_input TYPE TABLE OF ty_input.

* Work areas declaration.
DATA  wa_where TYPE ty_where,
        wa_input TYPE ty_input,
        INCLU    TYPE value 'X',
        COMMENT    TYPE value 'X'.

Data:  BEGIN OF Z_OBJECT OCCURS 0,
       Z_REPNAME type TRDIR-NAME.
data:  end of Z_OBJECT.


Data:  BEGIN OF Z_OBJECT1 OCCURS 0,
       sstring type RSREPL-TDFIND.
data:  end of Z_OBJECT1.

SELECTION-SCREENBEGIN OF BLOCK A10 WITH FRAME TITLE A10.
SELECT-OPTIONS:   REPNAME  FOR TRDIR-NAME,
                  SSTRING     FOR RSREPL-TDFIND MEMORY ID SCAN_REPID OBLIGATORY.
PARAMETERS:       SEARCH   AS CHECKBOX.
SELECTION-SCREENEND OF BLOCK A10,
                  BEGIN OF BLOCK A20 WITH FRAME TITLE A20.
SELECT-OPTIONS:   DEVCLASS FOR TADIR-DEVCLASS.     "选择package
PARAMETERS:       PLUSMINU(2TYPE DEFAULT 2,
                  MODIASS     AS CHECKBOX,
                  MASK        AS CHECKBOX.
SELECTION-SCREENEND OF BLOCK A20,
                  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-SCREENEND OF BLOCK A30.
DATASTRING LIKE SSTRING-LOW.

INITIALIZATION.
  A10 '输入搜索的表'.
  A20 '搜索条件'.
  A30 '搜索区域'.

TOP-OF-PAGE.
  PERFORM TOP_OF_PAGE.

TOP-OF-PAGE DURING LINE-SELECTION.
  PERFORM TOP_OF_PAGE.

START-OF-SELECTION.

  PERFORM get_program_name.
  PERFORM connect_object.

  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.
                PERFORMGET_HIT_SET USING RTAB_LCASE TABIX SPACE.
              ENDIF.
            WHEN OTHERS.
              IF RTAB-TEXT CP SSTRING-LOW.
                PERFORMGET_HIT_SET USING RTAB_LCASE TABIX SPACE.
              ENDIF.
          ENDCASE.
        ENDLOOP.
      ENDLOOP.
    ENDLOOP.
  ENDIF.
  FREEITAB.
  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.
                PERFORMGET_HIT_SET USING RTAB_LCASE TABIX 'D'.
              ENDIF.
            WHEN OTHERS.
              IF RTAB-TEXT CP SSTRING-LOW.
                PERFORMGET_HIT_SET USING RTAB_LCASE TABIX 'D'.
              ENDIF.
          ENDCASE.
        ENDLOOP.
      ENDLOOP.
    ENDLOOP.
  ENDIF.
  FREEDYN.

END-OF-SELECTION.
  IF FTAB[] IS INITIAL AND DTAB[] IS INITIAL.
    MESSAGE S016 WITH '字符串' STRING '未找到'.
    EXIT.
  ENDIF.
  SORTFTAB BY REPNAME LINE_NO SSTRING DESCENDING,
        DTAB BY REPNAME DYNNR LINE_NO SSTRING DESCENDING.
  DELETE ADJACENT DUPLICATES FROMFTAB COMPARING REPNAME LINE_NO,
                                   DTAB COMPARING REPNAME DYNNR LINE_NO.
  MESSAGE S016 WITH HIT_COUNT '命中字符串' STRING.
  PERFORMDISPLAY_FTAB_ALT,
           DISPLAY_DTAB_ALT.

AT LINE-SELECTION.
  PERFORM CALL_EDITOR.

AT USER-COMMAND.
  CASE SY-UCOMM.
    WHEN 'TOGL'.
      CASE DISPTYPE.
        WHEN 'M' OR 'L'.
          DISPTYPE 'A'.
          PERFORMDISPLAY_FTAB_ALT,
                   DISPLAY_DTAB_ALT.
        WHEN 'A' OR 'L'.
          DISPTYPE 'M'.
          PERFORMDISPLAY_FTAB,
                   DISPLAY_DTAB.
      ENDCASE.
      SY-LSIND SY-LSIND 1.
    WHEN 'REPT'.
      PERFORMDISPLAY_REP_LIST.
      SY-LSIND SY-LSIND 1.
    WHEN 'DOWN'.
      PERFORM DOWNLOAD_LIST.
    WHEN 'EXIT'.
      LEAVE SCREEN.
  ENDCASE.
*---------------------------------------------------------------------*
*       FORM APPEND_FTAB                                              *
*---------------------------------------------------------------------*
FORM APPEND_FTAB USING TEXT    LIKE RTAB_LCASE
                       LINE_NO LIKE SY-TABIX
                       SSTRING TYPE C
                       SOURCE  TYPE C.
  DATALN 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.
    CLEARLN-DYNNR.
  ENDIF.
  IF NOT LN-SSTRING IS INITIAL.
    ADD TO HIT_COUNT.
  ENDIF.
ENDFORM.                    "append_ftab
*---------------------------------------------------------------------*
*       FORM TOP_OF_PAGE                                              *
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE.
  DATAREPNAME(50).
  DATATITLE LIKE TRDIRT-TEXT .
  FORMAT INTENSIFIED OFF.
  ULINE /(150).
  WRITE/  SY-VLINE,
           '源扫描字符串:',
            STRING  COLOR COL_NEGATIVE INVERSE,
        78 '日期:',
            SY-DATUM DD/MM/YYYY,
        96  '时间:',
            SY-UZEIT,
      150   SY-VLINE.
  ULINE /(150).
  FORMAT INTENSIFIED ON.
  WRITE/ SY-VLINE.
  IF TOP_FLAG 'A'.
    REPNAME FTAB-REPNAME.
    CLEAR TITLE.
    SELECT SINGLE TEXT INTO TITLE FROM TRDIRT
                       WHERE NAME REPNAME AND SPRSL SY-LANGU.
  ELSEIF TOP_FLAG 'D' .
    CONCATENATE DTAB-REPNAME
               '屏幕'
                DTAB-DYNNR
                INTO REPNAME SEPARATED BY SPACE.
  ENDIF.
  CASE DISPTYPE.
    WHEN 'A'.
      CONCATENATE '行     源代码 ['
                   REPNAME
                   ']' '    程序描述 [' TITLE ']' INTO TEXT_LINE.
      WRITETEXT_LINE.
    WHEN 'M'.
      IF TOP_FLAG 'A'.
        WRITE'源代码'102 '行     报表'.
      ELSE.
        WRITE'源代码'102 '行     屏幕'.
      ENDIF.
    WHEN 'L'.
      WRITE '程序列表'.
  ENDCASE.
  WRITE150 SY-VLINE.
  ULINE (150).
ENDFORM.                    "top_of_page
*---------------------------------------------------------------------*
*       FORM DISPLAY_FTAB                                             *
*---------------------------------------------------------------------*
*       Display search results
*---------------------------------------------------------------------*
FORM DISPLAY_FTAB.
  CHECK RB_DYN IS INITIAL.
  TOP_FLAG 'A'.
  "NEW-PAGE.
  LOOP AT FTAB.
    IF FTAB-SSTRING IS INITIAL.
      WRITE/ SY-VLINE,
               FTAB-TEXT INTENSIFIED OFF.
    ELSE.
      FORMAT HOTSPOT ON.
      WRITE/ SY-VLINE .
*               ftab-text INTENSIFIED OFF COLOR COL_TOTAL.
      IF FTAB-TEXT+0(1<> '*'.
        WRITEFTAB-TEXT      INTENSIFIED OFF COLOR COL_TOTAL.
      ELSE.
        WRITEFTAB-TEXT      INTENSIFIED OFF COLOR COL_KEY.
      ENDIF.
      FORMAT HOTSPOT OFF.
    ENDIF.
    WRITE100  SY-VLINE       NO-GAP,
             FTAB-LINE_NO   NO-GAP INTENSIFIED,
             SY-VLINE       NO-GAP,
             FTAB-REPNAME   NO-GAP INTENSIFIED,
        150  SY-VLINE       NO-GAP.
    HIDEFTAB-REPNAME,
          FTAB-LINE_NO.
    AT END OF REPNAME.
      ULINE /(150).
    ENDAT.
  ENDLOOP.
ENDFORM.                    "display_ftab
*---------------------------------------------------------------------*
*       FORM DISPLAY_DTAB                                             *
*---------------------------------------------------------------------*
*       Display search results (dynpro)
*---------------------------------------------------------------------*
FORM DISPLAY_DTAB.
  CHECK RB_CODE IS INITIAL.
  TOP_FLAG 'D'.
  "NEW-PAGE.
  LOOP AT DTAB.
    IF DTAB-SSTRING IS INITIAL.
      WRITE/ SY-VLINE,
               DTAB-TEXT INTENSIFIED OFF.
    ELSE.
      FORMAT HOTSPOT ON.
      WRITE/ SY-VLINE,
               DTAB-TEXT INTENSIFIED OFF COLOR COL_TOTAL.
      FORMAT HOTSPOT OFF.
    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.
      ULINE /(150).
    ENDAT.
  ENDLOOP.
ENDFORM.                    "display_dtab
*---------------------------------------------------------------------*
*       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.
  IF COMMENT 'X'.
    LOOP AT FTAB.
      IF FTAB-TEXT <> '' .
        IF FTAB-TEXT+0(1'*'.
          FTAB-DEL_FLAG 'X'.
          MODIFY FTAB.
        ENDIF.
      ENDIF.
    ENDLOOP.
    DELETE FTAB WHERE DEL_FLAG 'X'.
  ENDIF.
  LOOP AT FTAB.
    AT NEW REPNAME.
      IF SY-TABIX > 1.
        "NEW-PAGE.
      ENDIF.
    ENDAT.
    WRITE/ SY-VLINE       NO-GAP,
             FTAB-LINE_NO   NO-GAP,
             SY-VLINE       NO-GAP.
    IF FTAB-SSTRING IS INITIAL.
      WRITEFTAB-TEXT      INTENSIFIED OFF.
    ELSE.
      FORMAT HOTSPOT ON.
      IF FTAB-TEXT+0(1<> '*'.
        WRITEFTAB-TEXT      INTENSIFIED OFF COLOR COL_TOTAL.
      ELSE.
        WRITEFTAB-TEXT      INTENSIFIED OFF COLOR COL_KEY.
      ENDIF.
      FORMAT HOTSPOT OFF.
    ENDIF.
    WRITE150 SY-VLINE.
    HIDE:    FTAB-REPNAME,
             FTAB-LINE_NO.
    AT END OF REPNAME.
      ULINE /(150).
    ENDAT.
  ENDLOOP.
ENDFORM.                    "display_ftab_alt
*---------------------------------------------------------------------*
*       FORM DISPLAY_DTAB_ALT
*---------------------------------------------------------------------*
*       Display dynpro hit list without report name on every line
*---------------------------------------------------------------------*
FORM DISPLAY_DTAB_ALT.
  CHECK RB_CODE IS INITIAL.
  IF COMMENT 'X'.
    LOOP AT DTAB.
      IF DTAB-TEXT <> '' .
        IF DTAB-TEXT+0(1'*'.
          DTAB-DEL_FLAG 'X'.
          MODIFY DTAB.
        ENDIF.
      ENDIF.
    ENDLOOP.
    DELETE DTAB WHERE DEL_FLAG 'X'.
  ENDIF.
  TOP_FLAG 'D'.
  "NEW-PAGE.
  LOOP AT DTAB.
    AT NEW REPNAME.
      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.
      WRITEDTAB-TEXT      INTENSIFIED OFF.
    ELSE.
      FORMAT HOTSPOT ON.
      WRITEDTAB-TEXT      INTENSIFIED OFF COLOR COL_TOTAL.
      FORMAT HOTSPOT OFF.
    ENDIF.
    WRITE150 SY-VLINE.
    HIDE:    DTAB-REPNAME,
             DTAB-DYNNR,
             DTAB-LINE_NO.
    AT END OF REPNAME.
      ULINE /(150).
    ENDAT.
  ENDLOOP.
ENDFORM.                    "display_dtab_alt
*----------------------------------------------------------------------*
*       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_NOLIKE SY-TABIX
                       SRCE_TYPE      TYPE C.
  DATAEND    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 TO START.
  ENDWHILE.
ENDFORM.                               " GET_HIT_SET
*----------------------------------------------------------------------*
*       Form  CALL_EDITOR
*----------------------------------------------------------------------*
*       Call ABAP or screen painter editor
*----------------------------------------------------------------------*
FORM CALL_EDITOR.
  CLEARFTAB,
         DTAB.
  READ LINE SY-LILLI
       FIELD VALUE FTAB-REPNAME
                   FTAB-LINE_NO
                   DTAB-REPNAME
                   DTAB-DYNNR
                   DTAB-LINE_NO.
  IF FTAB-REPNAME IS INITIAL AND DTAB-REPNAME IS INITIAL.
    MESSAGE S016 WITH '无效的光标定位'.
    EXIT.
  ENDIF.
  IF DTAB-DYNNR IS INITIAL.
*   Call ABAP editor
    CALL FUNCTION 'EDITOR_PROGRAM'
      EXPORTING
        DISPLAY 'X'  "如果值是X,则跳转到程序时是不可编辑的
        PROGRAM FTAB-REPNAME
        TOPLINE FTAB-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    'MODIFY'
      EXCEPTIONS
        ALREADY_EXISTS 1
        NOT_FOUND      2
        NOT_EXECUTED   3
        OTHERS         4.
  ENDIF.
ENDFORM.                               " CALL_EDITOR
*----------------------------------------------------------------------*
*       Form  GET_DYNPRO_FLOW_LOGIC
*----------------------------------------------------------------------*
*       Get flow logic of the dynpro
*----------------------------------------------------------------------*
FORM GET_DYNPRO_FLOW_LOGIC.
  DATADHEAD  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_rep_list
*&---------------------------------------------------------------------*
FORM DISPLAY_REP_LIST .
  DATALINENO TYPE .
  TOP_FLAG 'L'.
  DISPTYPE 'L'.
  CLEAR LINENO.
  LOOP AT FTAB.
    AT NEW REPNAME.
      LINENO LINENO + 1.
      WRITE /(6LINENO .
      WRITE  FTAB-REPNAME .
      HIDE FTAB-REPNAME.  "可以不要
    ENDAT.
  ENDLOOP.
ENDFORM.                    " display_rep_list
*&---------------------------------------------------------------------*
*&      Form  download_list
*&---------------------------------------------------------------------*
FORM DOWNLOAD_LIST .
  SY-LSIND SY-LSIND 1.
  CALL FUNCTION 'LIST_DOWNLOAD' .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " download_list

FORM get_program_name .
  LOOP AT sstring.
    wa_input-element sstring-low.
    APPEND wa_input TO it_input.
  ENDLOOP.
  APPEND 'P' TO it_object_cls.
* Getting the programs having the input data elements.
  CALL FUNCTION 'RS_EU_CROSSREF'
    EXPORTING
      i_find_obj_cls           'DTEL'
      no_dialog                'X'
    TABLES
      i_findstrings            it_input
      o_founds                 it_founds
    EXCEPTIONS
      not_executed             1
      not_found                2
      illegal_object           3
      no_cross_for_this_object 4
      batch                    5
      batchjob_error           6
      wrong_type               7
      object_not_exist         8
      OTHERS                   9.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

LOOP AT it_founds.
  MOVE-CORRESPONDING it_founds to wa_founds.
  append wa_founds.
ENDLOOP.
  " insert it_founds into table wa_founds.

  LOOP at wa_founds.
    Z_OBJECT-Z_REPNAME wa_founds-program.
    concatenate 'IEQ'  Z_OBJECT-Z_REPNAME into Z_OBJECT-Z_REPNAME.
    APPEND Z_OBJECT.
  ENDLOOP.

LOOP at Z_OBJECT.
    REPNAME Z_OBJECT-Z_REPNAME .
    APPEND REPNAME.
ENDLOOP.

endform.

FORM connect_object.
  datac1(30type c,
        text1(30type c.
   " split 'IEQ' AT s_type into s_type c1.
    sstring sstring+3(10).
    concatenate 'IEQmodify'  sstring into z_object1-sstring SEPARATED BY space.
    append z_object1.
    concatenate 'IEQupdate'  sstring into z_object1-sstring SEPARATED BY space.
    append z_object1.
    concatenate 'IEQappend'  sstring into z_object1-sstring SEPARATED BY space.
    append z_object1.
    concatenate 'IEQinsert'  sstring into z_object1-sstring SEPARATED BY space.
    append z_object1.
    LOOP at z_object1.
      SSTRING z_object1-sstring.
      append sstring.
    ENDLOOP.
    if SEARCH NE 'X'.
    delete sstring INDEX 1.
  ENDIF.
ENDFORM.

原创粉丝点击