..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

Result of the printing program execution: