*&---------------------------------------------------------------------*
*&
REPORT
zuetest.
ALV
TREE程序应用实例
*&---------------------------------------------------------------------*
*
在网上看到的ALV
TREE程序都是使用在屏幕上使用ALV
TREE的例子,样式非常
*
的呆板,为了满足客户的需要,我根据系统程序,使用ALV对象与屏幕对象自
*
己写了一个例子。本程序可以充分填充屏幕的大小,方便大屏幕与宽屏幕计算
*
机用户的使用。
*---------------------------------------------------------------------*
REPORT
ztest_tree
NO
STANDARD
PAGE
HEADING.
************************************************************************
**
定义变量与内表
************************************************************************
DATA
tt_fieldcat
TYPE
lvc_t_fcat.
DATA
wa_fieldcat
LIKE
LINE
OF
tt_fieldcat.
DATA
l_pos
TYPE
i.
DATA:
gt_sflight
TYPE
sflight
OCCURS
0,
"Output-Table
gt_fieldcatalog
TYPE
lvc_t_fcat,
"Fieldcatalog
gt_sort
TYPE
lvc_t_sort,
"Sortiertabelle
ok_code
LIKE
sy-ucomm.
"OK-Code
CLASS
cl_gui_column_tree
DEFINITION
LOAD.
CLASS
cl_gui_cfw
DEFINITION
LOAD.
DATA:
ls_variant
TYPE
disvariant.
DATA
tree1
TYPE
REF
TO
cl_gui_alv_tree_simple.
DATA:
lt_list_commentary
TYPE
slis_t_listheader,
l_logo
TYPE
sdydo_value.
INCLUDE
<icon>.
INCLUDE
ztest_tree_event_receiver.
************************************************************************
**
定义宏
Define
the
macro
************************************************************************
DEFINE
m_fieldcat.
clear
wa_fieldcat.
wa_fieldcat-col_pos
=
l_pos
+
1.
wa_fieldcat-fieldname
=
&1.
wa_fieldcat-seltext
=
&2.
wa_fieldcat-coltext
=
&2.
wa_fieldcat-outputlen
=
&3.
append
wa_fieldcat
to
tt_fieldcat.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*&
Define
the
Classes:初始化屏幕
*&---------------------------------------------------------------------*
CLASS
screen_init
DEFINITION
CREATE
PRIVATE.
PUBLIC
SECTION.
CLASS-METHODS
init_screen.
METHODS
constructor.
PRIVATE
SECTION.
DATA:
splitter_h
TYPE
REF
TO
cl_gui_splitter_container,
picture
TYPE
REF
TO
cl_gui_picture,
tree
TYPE
REF
TO
cl_gui_simple_tree,
picture1
TYPE
REF
TO
cl_gui_picture,
tree1
TYPE
REF
TO
cl_gui_alv_tree_simple.
METHODS:
fill_tree,
fill_picture.
ENDCLASS.
"screen_init
DEFINITION
*&--------------------------------------------------------------------*
*&
实现类:初始化屏幕
*&--------------------------------------------------------------------*
CLASS
screen_init
IMPLEMENTATION.
METHOD
init_screen.
DATA
screen
TYPE
REF
TO
screen_init.
CREATE
OBJECT
screen.
ENDMETHOD.
"init_screen
*
构造方法
METHOD
constructor.
DATA:
events
TYPE
cntl_simple_events,
event
LIKE
LINE
OF
events,
grid
TYPE
REF
TO
cl_gui_alv_grid,
alv_variant
TYPE
disvariant,
alv_exclude
TYPE
ui_functions,
gs_layout1
TYPE
lvc_s_layo,
container_left
TYPE
REF
TO
cl_gui_container.
CREATE
OBJECT
splitter_h
EXPORTING
parent
=
cl_gui_container=>screen0
rows
=
1
columns
=
1.
CALL
METHOD
splitter_h->set_border
EXPORTING
border
=
cl_gui_cfw=>true.
CALL
METHOD
splitter_h->set_column_mode
EXPORTING
mode
=
splitter_h->mode_absolute.
CALL
METHOD
splitter_h->set_column_width
EXPORTING
id
=
1
width
=
207.
container_left
=
splitter_h->get_container(
row
=
1
column
=
1
).
CREATE
OBJECT
tree1
EXPORTING
i_parent
=
container_left
i_node_selection_mode
=
cl_gui_column_tree=>node_sel_mode_single"multiple
i_item_selection
=
''
i_no_html_header
=
''
i_no_toolbar
=
''
EXCEPTIONS
cntl_error
=
1
cntl_system_error
=
2
create_error
=
3
lifetime_error
=
4
illegal_node_selection_mode
=
5
failed
=
6
illegal_column_name
=
7.
PERFORM
build_comment
USING
lt_list_commentary
l_logo.
ls_variant-report
=
sy-repid.
*
register
events
*
perform
register_events.
*
define
the
events
which
will
be
passed
to
the
backend
DATA:
lt_events
TYPE
cntl_simple_events,
l_event
TYPE
cntl_simple_event.
*
define
the
events
which
will
be
passed
to
the
backend
l_event-eventid
=
cl_gui_column_tree=>eventid_node_context_menu_req.
APPEND
l_event
TO
lt_events.
*
l_event-eventid
=
cl_gui_column_tree=>eventid_item_context_menu_req.
*
APPEND
l_event
TO
lt_events.
l_event-eventid
=
cl_gui_column_tree=>eventid_header_context_men_req.
APPEND
l_event
TO
lt_events.
l_event-eventid
=
cl_gui_column_tree=>eventid_expand_no_children.
APPEND
l_event
TO
lt_events.
l_event-eventid
=
cl_gui_column_tree=>eventid_header_click.
APPEND
l_event
TO
lt_events.
*
l_event-eventid
=
cl_gui_column_tree=>eventid_item_keypress.
*
APPEND
l_event
TO
lt_events.
l_event-eventid
=
cl_gui_column_tree=>eventid_selection_changed.
APPEND
l_event
TO
lt_events.
CALL
METHOD
tree1->set_registered_events
EXPORTING
events
=
lt_events
EXCEPTIONS
cntl_error
=
1
cntl_system_error
=
2
illegal_event_combination
=
3.
*
set
Handler
DATA:
l_event_receiver
TYPE
REF
TO
lc_tree_event_receiver.
CREATE
OBJECT
l_event_receiver.
SET
HANDLER
l_event_receiver->on_selection_changed
FOR
tree1.
PERFORM
f_data_display
USING
tree1.
ENDMETHOD.
"constructor
*
填充图片
METHOD
fill_picture.
ENDMETHOD.
"fill_picture
*
填充树对象
METHOD
fill_tree.
ENDMETHOD.
"fill_tree
ENDCLASS.
"screen_init
IMPLEMENTATION
************************************************************************
**
Program
execution
************************************************************************
INITIALIZATION.
*
PERFORM
f_init_data.
START-OF-SELECTION.
PERFORM
build_fieldcatalog.
PERFORM
build_outtab.
PERFORM
build_sort_table.
CALL
SCREEN
100.
*
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
*
Dialog
Modules
PBO
and
PAI
*
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
MODULE
status_0100
OUTPUT.
SET
PF-STATUS
'MAIN100'.
SET
TITLEBAR
'TIT_100'.
CALL
METHOD
screen_init=>init_screen.
ENDMODULE.
"status_0100
OUTPUT
*
Dialog
Modules
PAI
MODULE
cancel
INPUT.
CASE
ok_code.
WHEN
'EXIT'
OR
'BACK'
OR
'CANC'.
PERFORM
exit_program.
WHEN
OTHERS.
CALL
METHOD
cl_gui_cfw=>dispatch.
ENDCASE.
CLEAR
ok_code.
ENDMODULE.
"cancel
INPUT
*&---------------------------------------------------------------------*
*&
Form
BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM
build_fieldcatalog.
*
get
fieldcatalog
CALL
FUNCTION
'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name
=
'SFLIGHT'
CHANGING
ct_fieldcat
=
gt_fieldcatalog.
*
change
fieldcatalog
DATA:
ls_fieldcatalog
TYPE
lvc_s_fcat.
LOOP
AT
gt_fieldcatalog
INTO
ls_fieldcatalog.
CASE
ls_fieldcatalog-fieldname.
WHEN
'CARRID'
OR
'CONNID'
OR
'FLDATE'.
ls_fieldcatalog-no_out
=
'X'.
ls_fieldcatalog-key
=
''.
WHEN
'PRICE'
OR
'SEATSOCC'
OR
'SEATSMAX'
OR
'PAYMENTSUM'.
ls_fieldcatalog-do_sum
=
'X'.
ENDCASE.
MODIFY
gt_fieldcatalog
FROM
ls_fieldcatalog.
ENDLOOP.
ENDFORM.
"
BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*&
Form
BUILD_OUTTAB
*&---------------------------------------------------------------------*
*
给输出的结果内表赋值
*----------------------------------------------------------------------*
FORM
build_outtab.
SELECT
*
FROM
sflight
INTO
TABLE
gt_sflight.
ENDFORM.
"
BUILD_OUTTAB
*&---------------------------------------------------------------------*
*&
Form
BUILD_SORT_TABLE
*&---------------------------------------------------------------------*
*
创建排序内表
*----------------------------------------------------------------------*
FORM
build_sort_table.
DATA
ls_sort_wa
TYPE
lvc_s_sort.
*
create
sort-table
ls_sort_wa-spos
=
1.
ls_sort_wa-fieldname
=
'CARRID'.
ls_sort_wa-up
=
'X'.
ls_sort_wa-subtot
=
'X'.
APPEND
ls_sort_wa
TO
gt_sort.
ls_sort_wa-spos
=
2.
ls_sort_wa-fieldname
=
'CONNID'.
ls_sort_wa-up
=
'X'.
ls_sort_wa-subtot
=
'X'.
APPEND
ls_sort_wa
TO
gt_sort.
ls_sort_wa-spos
=
3.
ls_sort_wa-fieldname
=
'FLDATE'.
ls_sort_wa-up
=
'X'.
APPEND
ls_sort_wa
TO
gt_sort.
ENDFORM.
"
BUILD_SORT_TABLE
*&---------------------------------------------------------------------*
*&
Form
build_header
*&---------------------------------------------------------------------*
*
build
table
for
html_header
*----------------------------------------------------------------------*
FORM
build_comment
USING
pt_list_commentary
TYPE
slis_t_listheader
p_logo
TYPE
sdydo_value.
DATA:
ls_line
TYPE
slis_listheader.
*
LIST
HEADING
LINE:
TYPE
H
CLEAR
ls_line.
ls_line-typ
=
'H'.
*
LS_LINE-KEY:
NOT
USED
FOR
THIS
TYPE
ls_line-info
=
'ALV-tree-simple-Demo:
flight-overview'.
"#EC
NOTEXT
APPEND
ls_line
TO
pt_list_commentary.
*
STATUS
LINE:
TYPE
S
CLEAR
ls_line.
ls_line-typ
=
'S'.
ls_line-key
=
'valid
to'.
"#EC
NOTEXT
ls_line-info
=
'January
29
1999'.
"#EC
NOTEXT
APPEND
ls_line
TO
pt_list_commentary.
ls_line-key
=
'time'.
ls_line-info
=
'2.00
pm'.
"#EC
NOTEXT
APPEND
ls_line
TO
pt_list_commentary.
*
ACTION
LINE:
TYPE
A
CLEAR
ls_line.
ls_line-typ
=
'A'.
*
LS_LINE-KEY:
NOT
USED
FOR
THIS
TYPE
ls_line-info
=
'up-to-date
data'.
"#EC
NOTEXT
APPEND
ls_line
TO
pt_list_commentary.
p_logo
=
'ENJOYSAP_LOGO'.
ENDFORM.
"build_comment
*&---------------------------------------------------------------------*
*&
Form
F_DATA_DISPLAY
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM
f_data_display
USING
tree1
TYPE
REF
TO
cl_gui_alv_tree_simple.
*
create
hierarchy
CALL
METHOD
tree1->set_table_for_first_display
EXPORTING
it_list_commentary
=
lt_list_commentary
i_logo
=
l_logo
i_background_id
=
'ALV_BACKGROUND'
i_save
=
'A'
is_variant
=
ls_variant
CHANGING
it_sort
=
gt_sort
it_outtab
=
gt_sflight
it_fieldcatalog
=
gt_fieldcatalog.
*
expand
first
level
CALL
METHOD
tree1->expand_tree
EXPORTING
i_level
=
1.
*
optimize
column-width
CALL
METHOD
tree1->column_optimize
EXPORTING
i_start_column
=
tree1->c_hierarchy_column_name
i_end_column
=
tree1->c_hierarchy_column_name.
ENDFORM.
"
F_DATA_DISPLAY
*&---------------------------------------------------------------------*
*&
Form
exit_program
*&---------------------------------------------------------------------*
*
free
object
and
leave
program
*----------------------------------------------------------------------*
FORM
exit_program.
*
CALL
METHOD
tree1->free.
SET
SCREEN
0.
*
LEAVE
PROGRAM.
ENDFORM.
------------------------
INCLUDE ztest_tree_event_receiver. see souece code below
*&---------------------------------------------------------------------*
*& Include ZTEST_TREE_EVENT_RECEIVER
*&---------------------------------------------------------------------*
CLASS lc_tree_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS: on_selection_changed
FOR EVENT selection_changed OF cl_gui_alv_tree_simple
IMPORTING index_outtab
grouplevel.
ENDCLASS.
CLASS lc_tree_event_receiver IMPLEMENTATION.
METHOD on_selection_changed.
DATA ls_outtab_line TYPE sflight.
ls_outtab_line-planetype = 'Note'. "#EC NOTEXT
DATA lv_str TYPE string.
CONCATENATE index_outtab '--' grouplevel INTO lv_str.
MESSAGE lv_str TYPE 'I'.
ENDMETHOD.
ENDCLASS.