SAP_ABAP_FI
ALV_USE_CLASS_TREE_GRID 본문
- TOP
DATA: BEGIN OF gs_info,
subrc TYPE sy-subrc,
title TYPE sy-title,
func TYPE ui_functions,
str TYPE tabname,
tree TYPE REF TO zcl_tree_handler,
alv TYPE REF TO zcl_alv_handler,
END OF gs_info.
DATA: gv_ok_code TYPE sy-ucomm.
- Call Screen ALV Object Call
- DEFINITION
- ZCL_TREE_EVENT를 상속 받았으므로 REDEFINTION 쓰면됨
- IMPLEMENTATION.
CLASS lcl_tree IMPLEMENTATION.
METHOD set_fieldcatlog.
set_fieldcatlog_2(
EXPORTING lt_data = ct_tab
CHANGING et_fcat = mt_fcat
).
LOOP AT mt_fcat ASSIGNING FIELD-SYMBOL(<fs_fcat>).
<fs_fcat>-col_opt = 'A'."--->필드글자에 따라 필드길이가 자동 조절
CASE <fs_fcat>-fieldname.
WHEN 'LV_NKEY' OR
'LV_MAIN' OR
'LV_SUBMAIN'.
* <fs_fcat> = VALUE #( BASE <fs_fcat> key = abap_true ).
ENDCASE.
ENDLOOP.
ENDMETHOD.
METHOD create_hierarchy.
*check
DATA: lv_text TYPE lvc_value,
lv_main TYPE lvc_nkey,
lv_nowk TYPE lvc_nkey,
lv_relat2 TYPE lvc_nkey,
lv_relat3 TYPE lvc_nkey.
DATA: ls_layi TYPE lvc_s_layn,
lt_layi TYPE lvc_t_layi.
DATA: lv_num TYPE i VALUE 1,
lv_subnum TYPE i VALUE 1,
lv_nkey TYPE i VALUE 1.
DATA: lt_data TYPE ty_t_tree.
CHECK mr_lcl_object->mr_tree IS BOUND.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_data
FROM sflight.
CHECK lt_data IS NOT INITIAL.
lv_text = 'MAIN'.
add_node(
IMPORTING node_text = lv_text
CHANGING l_now_key = lv_main
).
LOOP AT lt_data INTO DATA(ls_data).
AT NEW carrid.
DATA(lv_new) = abap_true.
lv_text = ls_data-carrid.
ls_layi-isfolder = abap_true.
ls_layi-n_image = icon_businav_entity.
ls_layi-exp_image = icon_businav_entity.
CLEAR: ls_data.
ls_data-lv_main = lv_num.
ls_data-lv_nkey = lv_nkey.
add_node(
IMPORTING l_key = lv_main " MAIN NODW KEY
node_text = lv_text
ls_layi = ls_layi
ls_item = ls_data
lt_layi = lt_layi
CHANGING l_now_key = lv_nowk " 신규 노트키
).
ENDAT.
CASE lv_new.
WHEN abap_true.
lv_relat2 = lv_nowk.
lv_text = ls_data-fldate.
ls_data-lv_nkey = lv_nkey.
ls_data-lv_main = lv_num.
ls_data-lv_submain = lv_subnum.
add_node(
IMPORTING l_key = lv_relat2 " MAIN NODW KEY
node_text = lv_text
ls_layi = ls_layi
ls_item = ls_data
lt_layi = lt_layi
CHANGING l_now_key = lv_relat3 " 신규 노트키
).
ENDCASE.
ADD 1 TO lv_subnum.
ADD 1 TO lv_nkey.
AT END OF carrid.
lv_num = lv_num + 1.
lv_subnum = 1.
CLEAR: lv_new.
ENDAT.
ENDLOOP.
CALL METHOD mr_lcl_object->mr_tree->frontend_update.
mr_lcl_object->mr_tree->expand_node(
EXPORTING
i_node_key = lv_main
).
ENDMETHOD.
METHOD set_toolbar.
"Button Type은 Domain값을 통해확인할수 있다.[ 3 : 구분선임]
"cntb_btype_menu : Sub Menu가 존재하는 경우 선택
"cntb_btype_button : Sub Menu없이 자기자신이 버튼인 경우.
mr_lcl_object->mr_toolbar->add_button( EXPORTING fcode = 'ADD'
icon = icon_insert_row
butn_type = cntb_btype_button
text = 'ADD'
quickinfo = 'ADD'
).
mr_lcl_object->mr_toolbar->add_button( EXPORTING fcode = 'DEL'
icon = icon_delete_row
butn_type = cntb_btype_button
text = 'DEL'
quickinfo = 'DEL'
).
ENDMETHOD.
METHOD add_node.
mr_lcl_object->mr_tree->add_node(
EXPORTING
i_relat_node_key = l_key
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = node_text
is_node_layout = ls_layi
is_outtab_line = ls_item
it_item_layout = lt_layi
IMPORTING
e_new_node_key = l_now_key
).
ENDMETHOD.
METHOD handle_function_selected.
CASE fcode.
WHEN 'ADD'.
WHEN 'DEL'.
ENDCASE.
ENDMETHOD.
METHOD handle_item_cm_request.
menu->clear( ).
CALL METHOD menu->add_function
EXPORTING
fcode = 'ADD'
text = '추가'.
CALL METHOD menu->add_function
EXPORTING
fcode = 'DEL'
text = '삭제'.
ENDMETHOD.
METHOD handle_item_cm_selected.
DATA: lv_key TYPE ty_tree,
lv_node_text TYPE lvc_value,
lt_item_layout TYPE lvc_t_layi,
ls_node_layout TYPE lvc_s_layn.
DATA: lt_f TYPE lvc_t_nkey.
mr_lcl_object->mr_tree->get_outtab_line(
EXPORTING
i_node_key = node_key
IMPORTING
e_outtab_line = lv_key
e_node_text = lv_node_text
et_item_layout = lt_item_layout
es_node_layout = ls_node_layout
).
* mr_lcl_object->mr_tree->get
CASE fcode.
WHEN 'ADD'.
WHEN 'DEL'.
ENDCASE.
ENDMETHOD.
METHOD handle_tree_node_cm_req.
menu->clear( ).
CALL METHOD menu->add_function
EXPORTING
fcode = 'ADD'
text = '추가'.
CALL METHOD menu->add_function
EXPORTING
fcode = 'DEL'
text = '삭제'.
ENDMETHOD.
METHOD handle_tree_node_cm_sel.
DATA: lv_key TYPE ty_tree,
lv_node_text TYPE lvc_value,
lt_item_layout TYPE lvc_t_layi,
ls_node_layout TYPE lvc_s_layn.
DATA: lt_f TYPE lvc_t_nkey.
mr_lcl_object->mr_tree->get_outtab_line(
EXPORTING
i_node_key = node_key
IMPORTING
e_outtab_line = lv_key
e_node_text = lv_node_text
et_item_layout = lt_item_layout
es_node_layout = ls_node_layout
).
CASE fcode.
WHEN 'ADD'.
WHEN 'DEL'.
ENDCASE.
ENDMETHOD.
METHOD add_tree_addnode.
ENDMETHOD.
METHOD add_tree_delnode.
ENDMETHOD.
ENDCLASS.
CLASS lcl_event DEFINITION INHERITING FROM zcl_alv_event.
PUBLIC SECTION.
METHODS: set_fieldcatlog REDEFINITION.
METHODS: handle_top_of_page REDEFINITION.
ENDCLASS.
CLASS lcl_event IMPLEMENTATION.
METHOD set_fieldcatlog.
set_fieldcatlog_1(
EXPORTING i_str = i_str
i_repid = sy-repid
IMPORTING et_fcat = mt_fcat
CHANGING ct_tab = ct_tab
).
ENDMETHOD.
METHOD handle_top_of_page.
DATA: lt_comment TYPE slis_t_listheader,
l_length TYPE i.
* lt_comment = VALUE #(
* ( typ = 'S' key = %_p_bukrs_%_app_%-text info = p_bukrs )
* ( typ = 'S' key = %_p_spmon_%_app_%-text info = p_spmon )
* ).
EXPORT it_list_commentary FROM lt_comment
TO MEMORY ID 'DYNDOS_FOR_ALV'.
e_dyndoc_id->initialize_document( ).
* e_dyndoc_id ?= mr_object->mr_document.
CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
EXPORTING
document = e_dyndoc_id
bottom = abap_false
IMPORTING
length = l_length.
mr_object->mr_splitter->set_row_height( id = 1 height = l_length ).
e_dyndoc_id->merge_document( ).
e_dyndoc_id->display_document(
EXPORTING
parent = mr_object->mr_top
EXCEPTIONS
html_display_error = 1
).
ENDMETHOD.
ENDCLASS.
'SAP_ABAP_Source > ALV_Tree_Grid' 카테고리의 다른 글
Class_Tree_Grid (0) | 2021.12.16 |
---|