Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so dont bother with any of their useless mail servers here and just use oauth login instead. Thank the nice Russians for causing that. :)

Paste

Pasted by IBA ( 16 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: