..3 Printing program
Create a report Z_ORGUNIT_HIERARCHY_1 and paste below code:
REPORT z_orgunit_hierarchy_1 .
*declarations
TYPE-POOLS:
abap .
TYPES:
BEGIN OF ty_s_alvtree_outtab ,
objid TYPE objec-objid ,
stras TYPE p1028-stras ,
ort01 TYPE p1028-ort01 ,
pstlz TYPE p1028-pstlz ,
land1 TYPE p1028-land1 ,
END OF ty_s_alvtree_outtab ,
ty_t_alvtree_outtab TYPE STANDARD TABLE OF ty_s_alvtree_outtab .
DATA:
gv_plvar TYPE objec-plvar ,
gr_alvtree TYPE REF TO cl_hrpayna_gui_alv_tree , " -->> inherited from CL_GUI_ALV_TREE
gt_alvtree_outtab TYPE ty_t_alvtree_outtab .
* fill the context
PERFORM fill_context .
* call the form
CALL FUNCTION 'ZXLWB_CALLFORM'
EXPORTING
iv_formname = 'ORGUNIT_HIERARCHY'
iv_context_ref = gr_alvtree
EXCEPTIONS
process_terminated = 1
OTHERS = 2.
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
EXIT .
ENDIF .
*&---------------------------------------------------------------------*
*& Form fill_context
*&---------------------------------------------------------------------*
FORM fill_context .
CALL FUNCTION 'RH_GET_PLVAR'
IMPORTING
plvar = gv_plvar
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT .
ENDIF .
* create tree
PERFORM fill_context_create_tree
CHANGING gr_alvtree .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
* add nodes to the tree
PERFORM fill_context_add_nodes
USING 'O' '00000001' space
CHANGING gr_alvtree .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
ENDFORM . "fill_context
*&---------------------------------------------------------------------*
*& Form fill_context_create_tree
*&---------------------------------------------------------------------*
FORM fill_context_create_tree
CHANGING cr_alvtree TYPE REF TO cl_hrpayna_gui_alv_tree .
CREATE OBJECT cr_alvtree
EXPORTING
parent = cl_gui_container=>default_screen
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
EXCEPTIONS
OTHERS = 7.
CHECK sy-subrc EQ 0 .
*---->> fieldcatalog
DATA:
ls_fct TYPE lvc_s_fcat ,
lt_fct TYPE lvc_t_fcat ,
lr_salv_table TYPE REF TO cl_salv_table ,
lr_columns_table TYPE REF TO cl_salv_columns_table ,
lr_aggregations TYPE REF TO cl_salv_aggregations .
cl_salv_table=>factory(
IMPORTING r_salv_table = lr_salv_table
CHANGING t_table = gt_alvtree_outtab ) .
lr_columns_table = lr_salv_table->get_columns( ) .
lt_fct = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
r_columns = lr_columns_table
r_aggregations = lr_aggregations ) .
ls_fct-outputlen = 15 .
MODIFY lt_fct FROM ls_fct TRANSPORTING outputlen
WHERE fieldname EQ 'OBJID'
OR fieldname EQ 'LAND1' .
*---->> variant
DATA ls_var TYPE disvariant .
ls_var-report = sy-repid .
*---->> initialization
cr_alvtree->set_table_for_first_display(
EXPORTING is_variant = ls_var
CHANGING it_fieldcatalog = lt_fct[]
it_outtab = gt_alvtree_outtab[] ) .
ENDFORM . "fill_context_create_tree
*&---------------------------------------------------------------------*
*& Form add_nodes
*&---------------------------------------------------------------------*
FORM fill_context_add_nodes
USING pv_parent_otype TYPE any
pv_parent_objid TYPE any
pv_parent_nkey TYPE any
CHANGING
cr_alvtree TYPE REF TO cl_hrpayna_gui_alv_tree .
DATA:
ls_result_struc TYPE struc ,
lt_result_struc TYPE STANDARD TABLE OF struc ,
ls_p1028 TYPE p1028 ,
lt_p1028 TYPE STANDARD TABLE OF p1028 .
DATA:
ls_alvtree_outtab TYPE ty_s_alvtree_outtab ,
lv_ntext TYPE lvc_value ,
lv_nkey TYPE lvc_nkey .
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = pv_parent_otype
act_objid = pv_parent_objid
act_wegid = 'O-O_DOWN'
act_plvar = gv_plvar
act_begda = sy-datum
act_endda = sy-datum
act_tdepth = 2
act_tflag = abap_off
act_vflag = abap_off
authority_check = abap_off
TABLES
result_struc = lt_result_struc
EXCEPTIONS
OTHERS = 0.
DELETE lt_result_struc WHERE objid EQ pv_parent_objid .
CHECK lt_result_struc[] IS NOT INITIAL .
LOOP AT lt_result_struc INTO ls_result_struc .
CLEAR ls_alvtree_outtab .
CLEAR lv_ntext .
CLEAR lt_p1028 .
*---->> node text (org.unit name)
SELECT SINGLE orgtx
INTO lv_ntext
FROM t527x
WHERE sprsl EQ 'E'
AND orgeh EQ ls_result_struc-objid
AND begda LE sy-datum
AND endda GE sy-datum .
CHECK lv_ntext IS NOT INITIAL .
*---->> address fields
ls_alvtree_outtab-objid = ls_result_struc-objid .
CALL FUNCTION 'RH_GET_ADDRESS'
EXPORTING
plvar = gv_plvar
otype = 'O'
objid = ls_alvtree_outtab-objid
begda = sy-datum
endda = sy-datum
TABLES
address = lt_p1028.
READ TABLE lt_p1028 INTO ls_p1028 INDEX 1 .
IF sy-subrc EQ 0 .
MOVE-CORRESPONDING ls_p1028 TO ls_alvtree_outtab .
ENDIF .
*---->> add current node to the tree
cr_alvtree->add_node(
EXPORTING i_relat_node_key = pv_parent_nkey
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = lv_ntext
is_outtab_line = ls_alvtree_outtab
IMPORTING e_new_node_key = lv_nkey ) .
*---->> recursively adding child nodes
PERFORM fill_context_add_nodes
USING ls_result_struc-otype
ls_result_struc-objid
lv_nkey
CHANGING
cr_alvtree .
ENDLOOP .
ENDFORM . "fill_context_add_nodes