REPORT ZALV_HIERARCHYLIST .


TYPE-POOLS: slis,icon.


TYPES : BEGIN OF ty_dd02l,
icon type icon_d,
tabname TYPE tabname,
tabclass TYPE tabclass,
contflag type contflag,
actflag type actflag,
mainflag type maintflag,
buffered type buffered,
as4user type as4user,
as4date type as4date,
as4time type as4time,
expand,
END OF ty_dd02l.




DATA : it_dd02l TYPE STANDARD TABLE OF ty_dd02l,
wa_dd02l TYPE ty_dd02l.


TYPES : BEGIN OF ty_dd03l,
tabname TYPE tabname,
fieldname TYPE fieldname,
keyflag type keyflag,
mandatory type mandatory,
checktable type checktable,
rollname type rollname,
END OF ty_dd03l.


DATA : it_dd03l TYPE STANDARD TABLE OF ty_dd03l,
wa_dd03l TYPE ty_dd03l.


DATA : it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
it_layout TYPE slis_layout_alv,
key TYPE slis_keyinfo_alv.


SELECT-OPTIONS : s_table FOR wa_dd02l-tabname NO INTERVALS.


INITIALIZATION.

START-OF-SELECTION.


PERFORM fetch_tabledata.

PERFORM hierarchyalv_build.

*&---------------------------------------------------------------------*
*& Form hierarchyalv_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form hierarchyalv_build .


perform build_fieldcat.

perform build_layout.

perform build_key.

perform list_display.

endform.
*&---------------------------------------------------------------------*
*& Form build_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form build_fieldcat .

CLEAR wa_fieldcat.

wa_fieldcat-col_pos = 1.
wa_fieldcat-fieldname = 'TABNAME'.
wa_fieldcat-tabname = 'IT_DD02L'.
wa_fieldcat-seltext_m = 'Tablename'.
wa_fieldcat-key = 'X'.
wa_fieldcat-emphasize = 'C610'.
APPEND wa_fieldcat TO it_fieldcat.



CLEAR wa_fieldcat.
wa_fieldcat-col_pos = 2.
wa_fieldcat-fieldname = 'TABCLASS'.
wa_fieldcat-tabname = 'IT_DD02L'.
wa_fieldcat-seltext_m = 'Tablecategory'.
wa_fieldcat-emphasize = 'C600'.

APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

CLEAR wa_fieldcat.
wa_fieldcat-col_pos = 3.
wa_fieldcat-fieldname = 'CONTFLAG'.
wa_fieldcat-tabname = 'IT_DD02L'.
wa_fieldcat-seltext_m = 'DeliveryClass'.
wa_fieldcat-emphasize = 'C510'.

APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.



CLEAR wa_fieldcat.
wa_fieldcat-col_pos = 4.
wa_fieldcat-fieldname = 'ACTFLAG'.
wa_fieldcat-tabname = 'IT_DD02L'.
wa_fieldcat-seltext_m = 'Activationstatus'.
wa_fieldcat-emphasize = 'C500'.

APPEND wa_fieldcat TO it_fieldcat.



CLEAR wa_fieldcat.

wa_fieldcat-col_pos = 5.
wa_fieldcat-fieldname = 'MAINFLAG'.
wa_fieldcat-tabname = 'IT_DD02L'.
wa_fieldcat-seltext_m = 'MaintainenceFlag'.
wa_fieldcat-emphasize = 'C410'.

APPEND wa_fieldcat TO it_fieldcat.



CLEAR wa_fieldcat.
wa_fieldcat-col_pos = 6.
wa_fieldcat-fieldname = 'BUFFERED'.
wa_fieldcat-tabname = 'IT_DD02L'.
wa_fieldcat-seltext_m = 'BufferFlag'.
wa_fieldcat-emphasize = 'C400'.

APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.



CLEAR wa_fieldcat.
wa_fieldcat-col_pos = 7.
wa_fieldcat-fieldname = 'AS4USER'.
wa_fieldcat-tabname = 'IT_DD02L'.
wa_fieldcat-seltext_m = 'User'.
wa_fieldcat-emphasize = 'C310'.

APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.



CLEAR wa_fieldcat.
wa_fieldcat-col_pos = 8.
wa_fieldcat-fieldname = 'AS4DATE'.
wa_fieldcat-tabname = 'IT_DD02L'.
wa_fieldcat-seltext_m = 'Date'.
wa_fieldcat-emphasize = 'C300'.

APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.



CLEAR wa_fieldcat.
wa_fieldcat-col_pos = 9.
wa_fieldcat-fieldname = 'AS4TIME'.
wa_fieldcat-tabname = 'IT_DD02L'.

wa_fieldcat-seltext_m = 'Time'.
wa_fieldcat-emphasize = 'C210'.

APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.



CLEAR wa_fieldcat.

wa_fieldcat-col_pos = 10.
wa_fieldcat-fieldname = 'ICON'.
wa_fieldcat-tabname = 'IT_DD02L'.
wa_fieldcat-seltext_m = 'ICON'.
wa_fieldcat-ICON = 'X'.
APPEND wa_fieldcat TO it_fieldcat.



CLEAR wa_fieldcat.

wa_fieldcat-col_pos = 11.
wa_fieldcat-fieldname = 'FIELDNAME'.
wa_fieldcat-tabname = 'IT_DD03L'.
wa_fieldcat-key = 'X'.
wa_fieldcat-seltext_m = 'Field'.
wa_fieldcat-EMPHASIZE = 'C600'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-col_pos = 12.
wa_fieldcat-fieldname = 'KEYFLAG'.
wa_fieldcat-tabname = 'IT_DD03L'.
wa_fieldcat-seltext_m = 'Key'.
wa_fieldcat-EMPHASIZE = 'C500'.

APPEND wa_fieldcat TO it_fieldcat.


CLEAR wa_fieldcat.

wa_fieldcat-col_pos = 13.
wa_fieldcat-fieldname = 'CHECKTABLE'.
wa_fieldcat-tabname = 'IT_DD03L'.
wa_fieldcat-seltext_m = 'Checktable'.
wa_fieldcat-EMPHASIZE = 'C400'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-col_pos = 14.
wa_fieldcat-fieldname = 'MANDATORY'.
wa_fieldcat-tabname = 'IT_DD03L'.
wa_fieldcat-seltext_m = 'Mandatory'.
wa_fieldcat-EMPHASIZE = 'C300'.

APPEND wa_fieldcat TO it_fieldcat.



CLEAR wa_fieldcat.

wa_fieldcat-col_pos = 15.
wa_fieldcat-fieldname = 'ROLLNAME'.
wa_fieldcat-tabname = 'IT_DD03L'.
wa_fieldcat-seltext_m = 'Dataelement'.
wa_fieldcat-EMPHASIZE = 'C200'.

APPEND wa_fieldcat TO it_fieldcat.

endform. " build_fieldcat
*&---------------------------------------------------------------------*
*& Form build_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form build_layout .

*to expand the header table for item details
it_layout-expand_fieldname = 'EXPAND'.

it_layout-window_titlebar = 'Hierarchical ALV list display'.
it_layout-lights_tabname = 'IT_DD03L'.
it_layout-colwidth_optimize = 'X'.

endform. " build_layout
*&---------------------------------------------------------------------*
*& Form build_key
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form build_key .

*key infomation for the header and item table
key-header01 = 'TABNAME'.
key-item01 = 'TABNAME'.

endform. " build_key

*&---------------------------------------------------------------------*
*& Form list_display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form list_display .

*ALV output
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
is_layout = it_layout
it_fieldcat = it_fieldcat
i_tabname_header = 'IT_DD02L'
i_tabname_item = 'IT_DD03L'
is_keyinfo = key
TABLES
t_outtab_header = it_dd02l
t_outtab_item = it_dd03l.

endform. " list_display
*&---------------------------------------------------------------------*
*& Form fetch_tabledata
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fetch_tabledata .

*select table data
SELECT tabname
tabclass
contflag
actflag
mainflag
buffered
as4user
as4date
as4time
FROM dd02l
INTO CORRESPONDING FIELDS OF TABLE it_dd02l
WHERE tabname IN s_table.

*select field data
IF it_dd02l[] IS NOT INITIAL.

SELECT tabname
fieldname
keyflag
mandatory
checktable
rollname
FROM dd03l
INTO CORRESPONDING FIELDS OF TABLE it_dd03l
FOR ALL ENTRIES IN it_dd02l
WHERE tabname EQ it_dd02l-tabname.

ENDIF.







loop at it_dd02l into wa_dd02l.

at new tabname.

wa_dd02l-icon = '@3M@'.

MODIFY it_dd02l FROM wa_dd02l TRANSPORTING icon WHERE tabname EQ wa_dd02l-tabname.
CLEAR : wa_dd02l.

endat.

endloop.

endform.






Serkan AKKAVAK
Computer Engineer
serkurumsal@yandex.com