个人 TREEALV 模版加快你的开发

作者:SAPTAB 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
目录
个人 TREEALV 模版加快你的开发 - 封面图
个人 TREEALV 模版加快你的开发 - 封面图

原创 Tab Zhu [ SAP TAB ](javascript:void\(0\);)

上次发了OO ALV模板( [ 个人OO ALV 模版-加快你的ALV开发

](http://mp.weixin.qq.com/s?__biz=MzUxODI4MTQyMg==&mid=2247484112&idx=1&sn=99eacecf9eca503ac4a7bd935184608c&chksm=f98a0371cefd8a67fbc648a2cbd7fe8c2cf990e7c55f6dadbfe206d47987c0c30f7e538b37c6&scene=21#wechat_redirect)

)后,小伙伴们用的可舒服的,这次整理下tree alv的模板

## 1\. 我们随便来点数据

SELECT * FROM sflight INTO TABLE @gt_sflight UP TO 50 ROWS.

## 2\. 创建屏幕

这里我们行列给到最大值200

_255个人 TREEALV 模版加快你的开发 - 封面图

然后在绘制界面中给一个容器CONTAINER1(长高也是255 _ 200,同时给到

个人 TREEALV 模版加快你的开发 - 封面图
个人 TREEALV 模版加快你的开发 - 封面图

)这样容器就会根据你电脑分表率大小自动调节了 对应创建OK_CODE

个人 TREEALV 模版加快你的开发 - 封面图
个人 TREEALV 模版加快你的开发 - 封面图

## 3\. 添加逻辑流

个人 TREEALV 模版加快你的开发 - 封面图
个人 TREEALV 模版加快你的开发 - 封面图

MODULE pbo OUTPUT.

SET PF-STATUS 'MAIN100'.

IF g_alv_tree IS INITIAL.

PERFORM init_tree.

CALL METHOD cl_gui_cfw=>flush

EXCEPTIONS

cntl_system_error = 1

cntl_error = 2.

ASSERT sy-subrc = 0.

ENDIF. ENDMODULE.

MODULE pai INPUT.

save_ok = ok_code.

CLEAR ok_code.

CASE save_ok.

WHEN 'EXIT' OR 'BACK' OR 'CANC'.

CALL METHOD g_alv_tree->r_container->free.

LEAVE PROGRAM.

WHEN OTHERS.

CALL METHOD cl_gui_cfw=>dispatch. ENDCASE. CALL METHOD cl_gui_cfw=>flush. ENDMODULE.

顺便加上Status

个人 TREEALV 模版加快你的开发 - 封面图
个人 TREEALV 模版加快你的开发 - 封面图

## 4\. Tree ALV 调用示例

输入以下代码,然后直接点击执行程序,我们可以看到一个ALV tree

个人 TREEALV 模版加快你的开发 - 封面图
个人 TREEALV 模版加快你的开发 - 封面图

*&=====================================================================*

*& Created date: 2022.05.11

*& Created by:   Tab-Zhu (微信公众号:Tab_JXZHU)

*&---------------------------------------------------------------------*

*& Changed date

*& Changed by

*&---------------------------------------------------------------------*

REPORT ztab_test_02. TYPES: BEGIN OF ty_tree_node,

id TYPE char18,

text TYPE char40,

END OF ty_tree_node. DATA: g_alv_tree TYPE REF TO zcl_tab_tree_alv. DATA: gt_sflight TYPE sflight OCCURS 0, "Output-Table

gt_scala TYPE STANDARD TABLE OF ty_tree_node,

ok_code LIKE sy-ucomm,

save_ok LIKE sy-ucomm, "OK-Code

g_max TYPE i VALUE 255.

START-OF-SELECTION.

SELECT * FROM sflight INTO TABLE @gt_sflight UP TO 50 ROWS.

CHECK sy-subrc EQ 0.

END-OF-SELECTION.
CALL SCREEN 9000.

MODULE pbo OUTPUT.

SET PF-STATUS 'MAIN100'.

IF g_alv_tree IS INITIAL.

PERFORM init_tree.

CALL METHOD cl_gui_cfw=>flush

EXCEPTIONS

cntl_system_error = 1

cntl_error = 2.

ASSERT sy-subrc = 0.

ENDIF.
ENDMODULE. " PBO OUTPUT

MODULE pai INPUT.

save_ok = ok_code.

CLEAR ok_code.

CASE save_ok.

WHEN 'EXIT' OR 'BACK' OR 'CANC'.

CALL METHOD g_alv_tree->r_container->free.

LEAVE PROGRAM.

WHEN OTHERS.

CALL METHOD cl_gui_cfw=>dispatch. ENDCASE. CALL METHOD cl_gui_cfw=>flush. ENDMODULE. " PAI INPUT FORM init_tree. CREATE OBJECT g_alv_tree. DATA(ls_alv_tree_head) = VALUE treev_hhdr( heading = '航班' tooltip = '航班'

width = 35 width_pix = space ).

CALL METHOD zcl_tab_tree_alv=>set_default_fieldcat

CHANGING

it_data = gt_sflight

RECEIVING

rt_fieldcat = DATA(lt_fieldcat)

EXCEPTIONS

error_in_get_fieldcat = 1

OTHERS = 2.

IF sy-subrc <> 0.

CLEAR lt_fieldcat[].

ENDIF. LOOP AT lt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_fcat>). DATA(lv_tabix) = sy-tabix.

CASE <fs_fcat>-fieldname.

WHEN 'MANDT'.

DELETE lt_fieldcat INDEX lv_tabix.

WHEN 'CARRID'.

<fs_fcat>-outputlen = 10.

WHEN 'CONNID'.

<fs_fcat>-outputlen = 10.

WHEN OTHERS.

ENDCASE. ENDLOOP. CALL METHOD g_alv_tree->create_tree_alv

EXPORTING

• iv_repid = SY-CPROG

• iv_screen = '9000'

• iv_item_selection = 'X'

• iv_no_html_header = 'X'

iv_hierarchy_header = ls_alv_tree_head

iv_container_name = 'CONTAINER1'

• iv_variant_handle = '1'

it_fieldcat = lt_fieldcat

i_set_tree_node_form = 'FRM_SET_TREE_NODE_FORM'

• i_set_toolbar_form =

• i_function_selected_form =

• i_dropdown_clicked_form =

• i_checkbox_change_form =

• i_link_click_form =

CHANGING

ct_data = gt_sflight

EXCEPTIONS

create_tree_alv_failed = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE x208(00) WITH 'Create tree alv failed'.

ENDIF. ENDFORM. FORM frm_set_tree_node_form

CHANGING cr_alv_tree TYPE REF TO cl_gui_alv_tree

ct_data TYPE STANDARD TABLE.

DATA:lt_data TYPE TABLE OF sflight."inner table structure ex:sflight 以航班表为例子 DATA:ls_output_line TYPE sflight. DATA:ls_layout_node TYPE lvc_s_layn. DATA: ls_layout_item TYPE lvc_s_layi,

lt_layout_item TYPE lvc_t_layi.

DATA:lv_top_key TYPE lvc_nkey. DATA:lv_next_key TYPE lvc_nkey. DATA:lv_node_text TYPE lvc_value.
lt_data = ct_data.

CHECK lt_data IS NOT INITIAL.

LOOP AT lt_data INTO DATA(ls_data) GROUP BY ( carrid = ls_data-carrid )

ASSIGNING FIELD-SYMBOL(<fs_group>).

"HEADER

"层级名称

lv_node_text = 'LEVEL 1'.

• "选择框

• CLEAR ls_layout_item.

* ls_layout_item-fieldname = cr_alv_tree->c_hierarchy_column_name."层级名称 * ls_layout_item-class = cl_gui_column_tree=>item_class_checkbox. * ls_layout_item-editable = 'X'.

• APPEND ls_layout_item TO lt_layout_item.

• "设置图标

• CLEAR ls_layout_item.

* ls_layout_item-fieldname = 'STATUS'."对于某个字段设置为图标 * ls_layout_item-t_image = '@09@'."yellow

• APPEND ls_layout_item TO lt_layout_item.

CLEAR ls_output_line.

MOVE-CORRESPONDING <fs_group> TO ls_output_line.

CALL METHOD cr_alv_tree->add_node

EXPORTING

i_relat_node_key = ''

i_relationship = cl_gui_column_tree=>relat_last_child "how to insert the node

i_node_text = lv_node_text "hierarchy node text * is_node_layout = ls_layout_node "node layout is_outtab_line = ls_output_line "attributes of the inserted node * it_item_layout = lt_layout_item "item layout

IMPORTING

e_new_node_key = lv_top_key.
LOOP AT GROUP <fs_group> ASSIGNING FIELD-SYMBOL(<fs_line>).

"item

CLEAR ls_output_line.

MOVE-CORRESPONDING <fs_line> TO ls_output_line.

lv_node_text = 'LEVEL 2'. CALL METHOD cr_alv_tree->add_node

EXPORTING

i_relat_node_key = lv_top_key "Top key

i_relationship = cl_gui_column_tree=>relat_last_child

i_node_text = lv_node_text is_outtab_line = ls_output_line * is_node_layout = ls_layout_node * it_item_layout = lt_layout_item

IMPORTING

e_new_node_key = lv_next_key. ENDLOOP. ENDLOOP. ENDFORM.

## 5\. 模板代码

下面介绍ZCL_TAB_TREE_ALV代码- 复制可用 小伙伴们可以直接SE24,创建一个类,然后点击基于源代码创建,然后COPY代码即可

*&=====================================================================*

*& Created date: 2022.05.11

*& Created by:   Tab-Zhu (微信公众号:Tab_JXZHU)

*&---------------------------------------------------------------------*

*& Changed date

*& Changed by

*&---------------------------------------------------------------------*CLASS zcl_tab_tree_alv DEFINITION

PUBLIC

CREATE PUBLIC .

PUBLIC SECTION.

DATA r_container TYPE REF TO cl_gui_custom_container .

DATA r_alv_tree TYPE REF TO cl_gui_alv_tree .

DATA r_toolbar TYPE REF TO cl_gui_toolbar.

DATA r_line_behaviour TYPE REF TO cl_dragdrop .

DATA r_fav_behaviour TYPE REF TO cl_dragdrop .

...

SAPTAB

关于作者:SAPTAB

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「个人TREEALV模版加快你的开发.md」整理生成,仅用于内部技术分享与学习交流。