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