Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
[email protected] webmail now available. Want one? Go here.
Cannot use outlook/hotmail/live here to register as they blocking our mail servers. #microsoftdeez
Obey the Epel!

Paste

Pasted by IBA ( 13 years ago )
*&---------------------------------------------------------------------*
*&      Form  get_entrys
*&---------------------------------------------------------------------*
FORM get_entrys.
* Einlesen Basis über SELECT-OPTIONS abgegrenzt.
  DATA:
    lt_tfdir  TYPE STANDARD TABLE OF tfdir,
    lt_name   TYPE RANGE          OF trdir-name,
    lw_name   LIKE LINE           OF lt_name,
    lc_name   TYPE                   trdir-name,
    lt_trdir  TYPE                   ty_t_trdir,
    lt_class  TYPE                   ty_t_trdir,
    li_off    TYPE                   syfdpos,
    li_len    TYPE                   syfdpos,
    lb_app    TYPE                   abap_bool.
*
  FIELD-SYMBOLS:
    <trd>     TYPE         trdir.
*
  IF  pc_reprt EQ abap_true.
      SELECT * FROM trdir INTO TABLE lt_trdir
        WHERE name  IN so_name
          AND subc  IN (' ', '1')
          AND cnam  IN so_cnam
          AND cdat  IN so_cdat
          AND unam  IN so_unam
          AND udat  IN so_udat
          AND rstat IN so_rstat.
*     Eingelesene Zeilen merken:
      gw_sysd-rtrd  = gw_sysd-rtrd + sy-dbcnt.
      APPEND LINES OF lt_trdir TO gt_trdir.
      REFRESH         lt_trdir.
  ENDIF.
*
  IF  pc_incld EQ abap_true.
      SELECT * FROM trdir INTO TABLE lt_trdir
        WHERE name  IN so_name
          AND subc  IN (' ', 'I')
          AND cnam  IN so_cnam
          AND cdat  IN so_cdat
          AND unam  IN so_unam
          AND udat  IN so_udat
          AND rstat IN so_rstat.
*     Eingelesene Zeilen merken:
      gw_sysd-rtrd  = gw_sysd-rtrd + sy-dbcnt.
      APPEND LINES OF lt_trdir TO gt_trdir.
      REFRESH         lt_trdir.
  ENDIF.
*
  IF  pc_modup EQ abap_true.
      lt_name[] = so_name[].
      LOOP AT so_name INTO lw_name.
        lb_app  = abap_false.
        IF   lw_name-low       IS NOT INITIAL
         AND lw_name-low+0(5)  NE     'SAPMZ'.
             CONCATENATE 'SAPMZ' lw_name-low INTO lw_name-low.
             lb_app = abap_true.
        ENDIF.
        IF   lw_name-high      IS NOT INITIAL
         AND lw_name-high+0(5) NE     'SAPMZ'.
             CONCATENATE 'SAPMZ' lw_name-high INTO lw_name-high.
             lb_app = abap_true.
        ENDIF.
        IF  lb_app EQ abap_true.
            APPEND lw_name TO lt_name.
        ENDIF.
      ENDLOOP.
      SELECT * FROM trdir INTO TABLE lt_trdir
        WHERE name  IN lt_name
          AND subc  IN (' ', 'M')
          AND cnam  IN so_cnam
          AND cdat  IN so_cdat
          AND unam  IN so_unam
          AND udat  IN so_udat
          AND rstat IN so_rstat.
*     Eingelesene Zeilen merken:
      gw_sysd-rtrd  = gw_sysd-rtrd + sy-dbcnt.
      APPEND LINES OF lt_trdir TO gt_trdir.
      REFRESH         lt_trdir.
  ENDIF.
*
  IF  pc_fubas EQ abap_true.
      SELECT * FROM tfdir INTO TABLE lt_tfdir
        WHERE funcname IN so_name.
      IF  sy-dbcnt GT 0.
          SELECT * FROM trdir INTO TABLE lt_trdir
            FOR ALL ENTRIES IN lt_tfdir
            WHERE name  EQ lt_tfdir-pname
              AND subc  IN (' ', 'F')
              AND cnam  IN so_cnam
              AND cdat  IN so_cdat
              AND unam  IN so_unam
              AND udat  IN so_udat
              AND rstat IN so_rstat.
*         Eingelesene Zeilen merken:
          gw_sysd-rtrd  = gw_sysd-rtrd + sy-dbcnt.
          APPEND LINES OF lt_trdir TO gt_trdir.
          REFRESH         lt_trdir.
          REFRESH         lt_tfdir.
      ELSE.
          lt_name[] = so_name[].
          LOOP AT so_name INTO lw_name.
            lb_app  = abap_false.
            IF   lw_name-low       IS NOT INITIAL
             AND lw_name-low       CN     '='
             AND lw_name-low       CN     '*'
             AND lw_name-option    NE     'CP'.
                 CONCATENATE lw_name-low  '*' INTO lw_name-low.
                 lw_name-option = 'CP'.
                 lb_app         = abap_true.
            ENDIF.
            IF   lw_name-high      IS NOT INITIAL
             AND lw_name-high      CN     '='
             AND lw_name-high      CN     '*'
             AND lw_name-option    NE     'CP'.
                 CONCATENATE lw_name-high '*' INTO lw_name-high.
                 lb_app = abap_true.
            ENDIF.
            IF  lb_app EQ abap_true.
                APPEND lw_name TO lt_name.
            ENDIF.
            lb_app  = abap_false.
            IF   lw_name-low       IS NOT INITIAL
             AND lw_name-low+0(5)  NE     'SAPL'
             AND lw_name-low+0(1)  NE     '*'.
                 CONCATENATE 'SAPL' lw_name-low INTO lw_name-low.
                 lb_app         = abap_true.
            ENDIF.
            IF   lw_name-high      IS NOT INITIAL
             AND lw_name-high+0(5) NE     'SAPL'
             AND lw_name-high+0(1) NE     '*'.
                 CONCATENATE 'SAPL' lw_name-high INTO lw_name-high.
                 lb_app = abap_true.
            ENDIF.
            IF  lb_app EQ abap_true.
                APPEND lw_name TO lt_name.
            ENDIF.
          ENDLOOP.
          SELECT * FROM trdir INTO TABLE lt_trdir
            WHERE name  IN lt_name
              AND subc  IN (' ', 'F')
              AND cnam  IN so_cnam
              AND cdat  IN so_cdat
              AND unam  IN so_unam
              AND udat  IN so_udat
              AND rstat IN so_rstat.
*         Eingelesene Zeilen merken:
          gw_sysd-rtrd  = gw_sysd-rtrd + sy-dbcnt.
          APPEND LINES OF lt_trdir TO gt_trdir.
          REFRESH         lt_trdir.
      ENDIF.
  ENDIF.
*
  IF  pc_subrt EQ abap_true.
      lt_name[] = so_name[].
      LOOP AT so_name INTO lw_name.
        lb_app  = abap_false.
        IF   lw_name-low       IS NOT INITIAL
         AND lw_name-low+0(5)  NE     'SAPMZ'.
             CONCATENATE 'SAPMZ' lw_name-low INTO lw_name-low.
             lb_app = abap_true.
        ENDIF.
        IF   lw_name-high      IS NOT INITIAL
         AND lw_name-high+0(5) NE     'SAPMZ'.
             CONCATENATE 'SAPMZ' lw_name-high INTO lw_name-high.
             lb_app = abap_true.
        ENDIF.
        IF  lb_app EQ abap_true.
            APPEND lw_name TO lt_name.
        ENDIF.
      ENDLOOP.
      SELECT * FROM trdir INTO TABLE lt_trdir
        WHERE name  IN lt_name
          AND subc  IN (' ', 'S')
          AND cnam  IN so_cnam
          AND cdat  IN so_cdat
          AND unam  IN so_unam
          AND udat  IN so_udat
          AND rstat IN so_rstat.
*     Eingelesene Zeilen merken:
      gw_sysd-rtrd  = gw_sysd-rtrd + sy-dbcnt.
      APPEND LINES OF lt_trdir TO gt_trdir.
      REFRESH         lt_trdir.
  ENDIF.
*
  IF  pc_class EQ abap_true.
      lt_name[] = so_name[].
      LOOP AT so_name INTO lw_name.
        lb_app  = abap_false.
        IF   lw_name-low       IS NOT INITIAL
         AND lw_name-low       CN     '='
         AND lw_name-low       CN     '*'
         AND lw_name-option    NE     'CP'.
             CONCATENATE lw_name-low  '*' INTO lw_name-low.
             lw_name-option = 'CP'.
             lb_app         = abap_true.
        ENDIF.
        IF   lw_name-high      IS NOT INITIAL
         AND lw_name-high      CN     '='
         AND lw_name-high      CN     '*'
         AND lw_name-option    NE     'CP'.
             CONCATENATE lw_name-high '*' INTO lw_name-high.
             lb_app = abap_true.
        ENDIF.
        IF  lb_app EQ abap_true.
            APPEND lw_name TO lt_name.
        ENDIF.
      ENDLOOP.
      SELECT * FROM trdir INTO TABLE lt_trdir
        WHERE name  IN lt_name
          AND subc  IN (' ', 'K')
          AND cnam  IN so_cnam
          AND cdat  IN so_cdat
          AND unam  IN so_unam
          AND udat  IN so_udat
          AND rstat IN so_rstat.
*     Eingelesene Zeilen merken:
      gw_sysd-rtrd  = gw_sysd-rtrd + sy-dbcnt.
      APPEND LINES OF lt_trdir TO gt_trdir.
      LOOP AT lt_trdir ASSIGNING <trd>.
        FIND '=' IN <trd>-name MATCH OFFSET li_off MATCH LENGTH li_len.
        IF   sy-subrc EQ 0
         AND li_off   GT 0.
             li_len    = li_len + li_off.
             lc_name = <trd>-name(li_len).
             CONCATENATE lc_name '%' INTO lc_name.
             SELECT * FROM trdir INTO TABLE lt_class
               WHERE name  LIKE lc_name
                 AND subc  EQ 'I'
                 AND cnam  IN so_cnam
                 AND cdat  IN so_cdat
                 AND unam  IN so_unam
                 AND udat  IN so_udat
                 AND rstat IN so_rstat.
*            Eingelesene Zeilen merken:
             gw_sysd-rtrd  = gw_sysd-rtrd + sy-dbcnt.
             APPEND LINES OF lt_class TO gt_trdir.
             REFRESH lt_class.
        ENDIF.
      ENDLOOP.
      REFRESH         lt_trdir.
  ENDIF.
*
  SORT gt_trdir BY name.
  DELETE ADJACENT DUPLICATES FROM gt_trdir.
ENDFORM.                    " get_entrys

*&---------------------------------------------------------------------*
*&      Form  chk_devcls
*&---------------------------------------------------------------------*
FORM chk_devcls.
* Entwicklungsklasse/Paket verifizieren.
  DATA:
    lc_name   TYPE          tadir-obj_name,
    li_off    TYPE          syfdpos.
*
  FIELD-SYMBOLS:
    <trd>     TYPE trdir.
*
  CHECK ( so_pakt IS NOT INITIAL ).         "*/ Nur wenn vorgegeben!
*
  LOOP AT gt_trdir ASSIGNING <trd>.
    CASE <trd>-subc.
      WHEN space OR '1'.
        SELECT SINGLE COUNT( * ) FROM tadir "#EC *
          WHERE pgmid    EQ 'R3TR'
            AND object   EQ 'PROG'
            AND obj_name EQ <trd>-name
            AND devclass IN so_pakt.
      WHEN 'I'.
        FIND '=' IN <trd>-name MATCH OFFSET li_off.
        IF   sy-subrc EQ 0
         AND li_off   GT 0.
             lc_name = <trd>-name(li_off).
             SELECT SINGLE COUNT( * ) FROM tadir "#EC *
               WHERE pgmid    EQ 'R3TR'
                 AND object   EQ 'CLAS'
                 AND obj_name EQ lc_name
                 AND devclass IN so_pakt.
        ENDIF.
        IF  sy-dbcnt EQ 0.
            SELECT SINGLE COUNT( * ) FROM tadir "#EC *
              WHERE pgmid    EQ 'R3TR'
                AND object   EQ 'PROG'
                AND obj_name EQ <trd>-name
                AND devclass IN so_pakt.
        ENDIF.
        IF  sy-dbcnt EQ 0.
            lc_name   = <trd>-name.
            SHIFT lc_name LEFT DELETING LEADING 'L'.
            SELECT SINGLE COUNT( * ) FROM tadir "#EC *
              WHERE pgmid    EQ 'R3TR'
                AND object   EQ 'PROG'
                AND obj_name EQ lc_name
                AND devclass IN so_pakt.
        ENDIF.
        IF  sy-dbcnt EQ 0.
            lc_name   = <trd>-name.
            SHIFT lc_name LEFT DELETING LEADING 'SAPL'.
            SELECT SINGLE COUNT( * ) FROM tadir "#EC *
              WHERE pgmid    EQ 'R3TR'
                AND object   EQ 'PROG'
                AND obj_name EQ lc_name
                AND devclass IN so_pakt.
        ENDIF.
      WHEN 'M' OR 'S'.
      WHEN 'F'.
        IF  <trd>-name CS '='.
            FIND '=' IN <trd>-name MATCH OFFSET sy-fdpos.
            lc_name = <trd>-name(sy-fdpos).
        ELSE.
            lc_name = <trd>-name.
        ENDIF.
        SELECT SINGLE COUNT( * ) FROM tadir
          WHERE pgmid    EQ 'R3TR'
            AND object   IN ('FUGR', 'PROG')  "#EC *
            AND obj_name EQ lc_name
            AND devclass IN so_pakt.
        IF  sy-dbcnt EQ 0.
            lc_name   = <trd>-name.
            SHIFT lc_name LEFT DELETING LEADING 'L'.
            SELECT SINGLE COUNT( * ) FROM tadir "#EC *
              WHERE pgmid    EQ 'R3TR'
                AND object   EQ 'FUGR'
                AND obj_name EQ lc_name
                AND devclass IN so_pakt.
            IF  sy-dbcnt EQ 0.
                lc_name   = <trd>-name.
                SHIFT lc_name LEFT DELETING LEADING 'SAPL'.
                SELECT SINGLE COUNT( * ) FROM tadir "#EC *
                  WHERE pgmid    EQ 'R3TR'
                    AND object   EQ 'FUGR'
                    AND obj_name EQ lc_name
                    AND devclass IN so_pakt.
            ENDIF.
        ENDIF.
      WHEN 'J' OR 'K'.
        IF  <trd>-name CS '='.
            FIND '=' IN <trd>-name MATCH OFFSET sy-fdpos.
            lc_name = <trd>-name(sy-fdpos).
        ELSE.
            lc_name = <trd>-name.
        ENDIF.
        SELECT SINGLE COUNT( * ) FROM tadir
          WHERE pgmid    EQ 'R3TR'
            AND object   IN ('CLAS', 'PROG') "#EC *
            AND obj_name EQ lc_name
            AND devclass IN so_pakt.
    ENDCASE.
*
    IF  sy-dbcnt EQ 0.
        DELETE gt_trdir.
    ELSE.
        gw_sysd-rtad = gw_sysd-rtad + sy-dbcnt.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " chk_devcls

*&---------------------------------------------------------------------*
*&      Form  get_source
*&---------------------------------------------------------------------*
FORM get_source.
* Quellcode der Objekte reinholen.
  DATA:
    lt_tab    TYPE ty_t_src,                "*/ Quellcode
    lb_fndd   TYPE abap_bool,               "*/ Dynpro
    lb_fndi   TYPE abap_bool,               "*/ Include
    lb_fndt   TYPE abap_bool.               "*/ Text
*
  FIELD-SYMBOLS:
    <tab>     TYPE ty_t_src,
    <trd>     TYPE trdir.
*
  ASSIGN lt_tab TO <tab>.
*
  LOOP AT gt_trdir ASSIGNING <trd>.
    CLEAR   gw_result.
    REFRESH <tab>.
    READ REPORT <trd>-name INTO <tab>
      MAXIMUM WIDTH INTO gw_result-maxlen.
    IF  sy-subrc EQ 0.
        gw_result-trdir = <trd>.
        gw_sysd-rlin    = gw_sysd-rlin + LINES( <tab> ).
        PERFORM get_incs USING lb_fndi.
        PERFORM get_text USING lb_fndt.
        PERFORM get_dynp USING lb_fndd.
        SEARCH  <tab>      FOR pc_searc.
        IF  sy-subrc  EQ 0
         OR lb_fndi   EQ abap_true
         OR lb_fndt   EQ abap_true
         OR lb_fndd   EQ abap_true.
            gw_result-source = <tab>.
            APPEND gw_result TO gt_result.
        ENDIF.
    ENDIF.
  ENDLOOP.
*
  DELETE gt_incs
    WHERE fnds EQ abap_false
      AND fndt EQ abap_false.
ENDFORM.                    " get_source

*&---------------------------------------------------------------------*
*&      Form  get_incs
*&---------------------------------------------------------------------*
FORM get_incs USING fnd TYPE abap_bool.
  DATA:
    lw_incp   TYPE d010inc,                 "*/ Zuordnung
    lw_incs   TYPE ty_s_incs.               "*/ Source
*
  FIELD-SYMBOLS:
    <inn>     TYPE d010inc-include,         "*/ Namen
    <inp>     TYPE d010inc,                 "*/ Zuordnung
    <ins>     TYPE ty_s_incs,               "*/ Source
    <txt>     TYPE textpool.                "*/ TEXTPOOL
*
  CLEAR   fnd.
  CHECK ( pc_inclu EQ abap_true ).
* Alle INCLUDES des Reports reinholen:
  SELECT include FROM d010inc INTO TABLE gw_result-incn
    WHERE master  EQ gw_result-trdir-name
      AND include NE       'DB__SSEL'
      AND include NOT LIKE '<%'
      AND include NOT LIKE '>%'
      AND include NOT LIKE '%*%*_%' ESCAPE '*'
      AND include NOT LIKE '%=%'.
* Drüberloopen:
  LOOP AT gw_result-incn ASSIGNING <inn>.
    CLEAR: lw_incp, lw_incs.
*   Dieses INCLUDE schon mal bearbeitet?
    READ TABLE gt_incp ASSIGNING <inp>
      WITH KEY include = <inn>.
*   Ja. Dann nur Zuordnung zum Report herstellen:
    IF  sy-subrc      EQ 0.
        lw_incp-master  = gw_result-trdir-name.
        lw_incp-include = <inp>-include.
        APPEND lw_incp TO gt_incp.
        READ TABLE gt_incs ASSIGNING <ins>
          WITH KEY incn = <inp>-include.
        IF  sy-subrc EQ 0.
            fnd       = <ins>-fnds.
        ENDIF.
*   Nein. Dann reinholen
    ELSE.
        lw_incp-master  = gw_result-trdir-name.
        lw_incp-include = <inn>.
        APPEND lw_incp TO gt_incp.
        lw_incs-incn   = <inn>.
        lw_incs-chk    = abap_false.
        lw_incs-fnds   = abap_false.
        READ REPORT lw_incs-incn INTO lw_incs-source.
        IF  sy-subrc  EQ 0.
            gw_sysd-rinc = gw_sysd-rinc + LINES( lw_incs-source ).
            SEARCH lw_incs-source FOR pc_searc.
            IF  sy-subrc    EQ 0.
                lw_incs-fnds = abap_true.
                fnd          = abap_true.
            ELSE.
                REFRESH lw_incs-source.
            ENDIF.
        ENDIF.
        IF  pc_texte EQ abap_true.
            READ TEXTPOOL lw_incs-incn INTO lw_incs-text.
            IF  sy-subrc  EQ 0.
                gw_sysd-rtxt = gw_sysd-rtxt + LINES( lw_incs-text ).
                LOOP AT lw_incs-text ASSIGNING <txt>.
                  SEARCH <txt>-entry FOR pc_searc.
                  IF  sy-subrc   EQ 0.
                      lw_incs-fndt = abap_true.
                      fnd          = abap_true.
                  ELSE.
                      DELETE lw_incs-text.
                  ENDIF.
                ENDLOOP.
            ENDIF.
        ENDIF.
        APPEND lw_incs TO gt_incs.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " get_incls

*&---------------------------------------------------------------------*
*&      Form  get_text
*&---------------------------------------------------------------------*
FORM get_text USING fnd TYPE abap_bool.
  FIELD-SYMBOLS:
    <txt>     TYPE textpool.
*
  CLEAR fnd.
*
  CHECK ( pc_texte EQ abap_true ).
*
  READ TEXTPOOL gw_result-trdir-name INTO gw_result-text.
  IF  sy-subrc  EQ 0.
      gw_sysd-rtxt = gw_sysd-rtxt + LINES( gw_result-text ).
      LOOP AT gw_result-text ASSIGNING <txt>.
        SEARCH <txt>-entry FOR pc_searc.
        IF  sy-subrc EQ 0.
            fnd       = abap_true.
        ELSE.
            DELETE gw_result-text.
        ENDIF.
      ENDLOOP.
  ENDIF.
ENDFORM.                    " get_text

*&---------------------------------------------------------------------*
*&      Form  get_dynp
*&---------------------------------------------------------------------*
FORM get_dynp USING fnd TYPE abap_bool.
  DATA:
    lt_tmp    TYPE STANDARD TABLE OF d020t,
    lw_tmp    TYPE d020s,                   "#EC NEEDED
    lw_dyn    TYPE ty_s_dynp,
    lb_log    TYPE abap_bool,
    lb_fld    TYPE abap_bool,
    lb_prm    TYPE abap_bool,
    lb_txt    TYPE abap_bool.
*
  FIELD-SYMBOLS:
    <tmp>     TYPE d020t,
    <pgm>     TYPE d020s-prog,
    <dnr>     TYPE d020s-dnum,
    <fld>     TYPE d021s.
*
  CLEAR fnd.
*
  CHECK ( pc_dynpr EQ abap_true ).
*
  SELECT * FROM d020t INTO TABLE lt_tmp
    WHERE prog EQ gw_result-trdir-name.
*      AND dtxt NOT LIKE 'SEL_SCREEN%'.
*
  LOOP AT lt_tmp ASSIGNING <tmp>.
    lw_dyn-head = <tmp>.
    ASSIGN lw_dyn-head-dynr TO <dnr> CASTING.
    ASSIGN lw_dyn-head-prog TO <pgm> CASTING.
    IMPORT DYNPRO
      lw_tmp
      lw_dyn-field
      lw_dyn-logic
      lw_dyn-parms ID <tmp>.
    IF  sy-subrc EQ 0.
        gw_sysd-rdyn = gw_sysd-rdyn + 1.
        CLEAR: lb_log, lb_fld, lb_prm, lb_txt.
        SEARCH lw_dyn-logic FOR pc_searc.
        IF  sy-subrc EQ 0.
            lb_log    = abap_true.
        ELSE.
            REFRESH lw_dyn-logic.
        ENDIF.
        LOOP AT lw_dyn-field ASSIGNING <fld>.
          SEARCH <fld>-stxt FOR pc_searc.
          IF  sy-subrc NE 0.
              SEARCH <fld>-res1 FOR pc_searc.
              IF  sy-subrc NE 0.
                  SEARCH <fld>-res2 FOR pc_searc.
              ENDIF.
          ENDIF.
          IF  sy-subrc EQ 0.
              lb_fld    = abap_true.
          ELSE.
              DELETE lw_dyn-field.
          ENDIF.
        ENDLOOP.
        SEARCH lw_dyn-parms FOR pc_searc.
        IF  sy-subrc EQ 0.
            lb_prm    = abap_true.
        ELSE.
            REFRESH lw_dyn-parms.
        ENDIF.
        SEARCH lw_dyn-text  FOR pc_searc.
        IF  sy-subrc EQ 0.
            lb_txt    = abap_true.
        ELSE.
            REFRESH lw_dyn-text.
        ENDIF.
        SEARCH lw_dyn-head  FOR pc_searc.
        IF  sy-subrc EQ 0
         OR lb_log   EQ abap_true
         OR lb_fld   EQ abap_true
         OR lb_prm   EQ abap_true
         OR lb_txt   EQ abap_true.
            fnd       = abap_true.
            APPEND lw_dyn TO gt_dynp.
        ENDIF.
    ENDIF.
    CLEAR lw_dyn.
  ENDLOOP.
ENDFORM.                    " get_dynp

 

Revise this Paste

Your Name: Code Language: