
report zbw4_hierarchy_levels.
" Custom structure
types : begin of lty_hier,
nodeid type rshienodid,
iobjnm type rsiobjnm,
nodename type rsshnodenamestr,
tlevel type rstlevel,
parentid type rsparent,
end of lty_hier.
tables : rsdiobj, rshiedir.
" Hierarchy tables starts with /BIC/H
constants lv_hie type string value '/BIC/H'.
selection-screen begin of block b1.
parameters : iobjnm type rshiedir-iobjnm obligatory.
parameters : hienm type rshiedir-hienm obligatory. " select hierarchy
selection-screen end of block b1.
data: lv_hiertab type tabname,
gv_ref type ref to data,
lv_parentid type rsparent,
la_hierlvl type zbw4_hierlvl_01,
lt_hierlvl type standard table of zbw4_hierlvl_01,
lt_hiernode_text type standard table of rsthiernode,
la_hiernode_text type rsthiernode.
field-symbols: <gfs_itab> type standard table,
<gfs_wa> type lty_hier,
<gfs_wa_01> type lty_hier.
concatenate lv_hie iobjnm into lv_hiertab.
" Dynamic selection
select single * from rshiedir into @data(la_rshiedir)
where iobjnm = @iobjnm and hienm = @hienm and objvers = 'A'.
create data gv_ref type table of lty_hier.
assign gv_ref->* to <gfs_itab>.
" Assign hierarchy data to <gfs_itab>
select
nodeid,
iobjnm,
nodename,
tlevel,
parentid
from (lv_hiertab) into table @<gfs_itab>
where hieid = @la_rshiedir-hieid and objvers = 'A'.
" hierarchy node texts
select * from rsthiernode into table lt_hiernode_text
where
hieid = la_rshiedir-hieid and
objvers = 'A' and
langu = 'E'.
loop at <gfs_itab> assigning <gfs_wa>.
" ignore if the iobjnm is 0HIER_NODE
if <gfs_wa>-iobjnm <> '0HIER_NODE'.
clear la_hierlvl.
la_hierlvl-iobjnm = <gfs_wa>-iobjnm.
la_hierlvl-hienm = hienm.
la_hierlvl-nodename = <gfs_wa>-nodename.
lv_parentid = <gfs_wa>-parentid.
" Until root node is reached
while lv_parentid > 0.
read table <gfs_itab> assigning <gfs_wa_01> with key ('NODEID') = lv_parentid.
lv_parentid = <gfs_wa_01>-parentid.
" 0HIER_NODE indicates that is the hierarchy node
if <gfs_wa_01>-iobjnm = '0HIER_NODE'.
"Read the node text
read table lt_hiernode_text into la_hiernode_text with key nodename = <gfs_wa_01>-nodename.
if sy-subrc = 0.
"Assignment based on levels
case <gfs_wa_01>-tlevel.
when 01. la_hierlvl-level_01 = la_hiernode_text-txtlg.
when 02. la_hierlvl-level_02 = la_hiernode_text-txtlg.
when 03. la_hierlvl-level_03 = la_hiernode_text-txtlg.
when 04. la_hierlvl-level_04 = la_hiernode_text-txtlg.
when 05. la_hierlvl-level_05 = la_hiernode_text-txtlg.
when 06. la_hierlvl-level_06 = la_hiernode_text-txtlg.
when 07. la_hierlvl-level_07 = la_hiernode_text-txtlg.
when 08. la_hierlvl-level_08 = la_hiernode_text-txtlg.
when 09. la_hierlvl-level_09 = la_hiernode_text-txtlg.
when 10. la_hierlvl-level_10 = la_hiernode_text-txtlg.
when 11. la_hierlvl-level_11 = la_hiernode_text-txtlg.
when 12. la_hierlvl-level_12 = la_hiernode_text-txtlg.
when 13. la_hierlvl-level_13 = la_hiernode_text-txtlg.
when 14. la_hierlvl-level_14 = la_hiernode_text-txtlg.
when 15. la_hierlvl-level_15 = la_hiernode_text-txtlg.
endcase.
endif.
endif.
endwhile.
append la_hierlvl to lt_hierlvl.
endif.
endloop.
" Delete before insert
delete from zbw4_hierlvl_01 where iobjnm = iobjnm and hienm = hienm.
insert zbw4_hierlvl_01 from table lt_hierlvl.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
23 | |
19 | |
9 | |
7 | |
5 | |
5 | |
5 | |
4 | |
4 | |
3 |