Abap cl_salv_hierseq_表中的捕捉展开按钮
我通过classAbap cl_salv_hierseq_表中的捕捉展开按钮,abap,alv,Abap,Alv,我通过classcl_salv_hierseq_表显示一个分层顺序列表,默认情况下所有行都被压缩,用户可以单击任意行上的+按钮展开第二级行 当用户单击按钮+展开行时,我尝试执行自定义代码 默认情况下,无法捕获它,它由SAP内部处理。如果我设置自定义GUI状态并为F2按钮定义自定义功能代码,则会触发事件added_function,但我无法确定涉及哪一行 我还试图拦截事件链接\u单击,但无论如何都没有触发 这是我的密码: report salv_hierseq. tables: vbrp. sel
cl_salv_hierseq_表
显示一个分层顺序列表,默认情况下所有行都被压缩,用户可以单击任意行上的+按钮展开第二级行
当用户单击按钮+展开行时,我尝试执行自定义代码
默认情况下,无法捕获它,它由SAP内部处理。如果我设置自定义GUI状态并为F2按钮定义自定义功能代码,则会触发事件added_function
,但我无法确定涉及哪一行
我还试图拦截事件链接\u单击
,但无论如何都没有触发
这是我的密码:
report salv_hierseq.
tables: vbrp.
select-options:
werks for vbrp-werks default 'R001',
lgort for vbrp-lgort default 'NORS',
charg for vbrp-charg.
class lcl_report definition.
public section.
types:
begin of ty_kp,
exidv type vekpvb-exidv,
exida type vekpvb-exida,
ernam type vekpvb-ernam,
erdat type vekpvb-erdat,
aenam type vekpvb-aenam,
aedat type vekpvb-aedat,
vhilm type vekpvb-vhilm,
vhart type vekpvb-vhart,
vpobjkey type vekpvb-vpobjkey,
packvorschr_st type vekpvb-packvorschr_st,
exidv2 type vekpvb-exidv2,
venum type vekpvb-venum,
expand type char01,
end of ty_kp,
begin of ty_po,
matnr type vepovb-matnr,
velin type vepovb-velin,
vemng type vepovb-vemng,
vemeh type vepovb-vemeh,
werks type vepovb-werks,
lgort type vepovb-lgort,
sobkz type vepovb-sobkz,
qplos type vepovb-qplos,
/cwm/vemng type vepovb-/cwm/vemng,
hu_lgort type vepovb-hu_lgort,
venum type vepovb-venum,
vepos type vepovb-vepos,
end of ty_po.
data:
w_vekp type ty_kp,
t_vekp type standard table of ty_kp,
w_vepo type ty_po,
t_vepo type standard table of ty_po,
o_hs_alv type ref to cl_salv_hierseq_table.
methods:
get_data,
generate_output.
private section.
methods:
set_pf_status changing co_hs_alv type ref to cl_salv_hierseq_table,
set_expand_option changing co_hs_alv type ref to cl_salv_hierseq_table,
set_event_handlers changing co_hs_alv type ref to cl_salv_hierseq_table,
on_link_click for event link_click of cl_salv_events_hierseq importing row column level sender,
on_added_function for event added_function of cl_salv_events_hierseq importing e_salv_function sender.
endclass.
start-of-selection.
data: lo_report type ref to lcl_report.
create object lo_report.
lo_report->get_data( ).
lo_report->generate_output( ).
class lcl_report implementation.
method get_data.
select * into corresponding fields of table @t_vepo from vepo where werks in @werks and lgort in @lgort and charg in @charg.
select * into corresponding fields of table @t_vekp from vekp for all entries in @t_vepo where venum = @t_vepo-venum.
if not t_vekp is initial.
sort t_vekp by venum.
select * from vepo into corresponding fields of table t_vepo for all entries in t_vekp where venum = t_vekp-venum.
sort t_vepo by venum vepos.
delete t_vepo where velin = '2' or velin = '3'.
endif.
endmethod. "get_data
method generate_output.
data: lt_bind type salv_t_hierseq_binding,
la_bind like line of lt_bind.
la_bind-master = 'VENUM'.
la_bind-slave = 'VENUM'.
append la_bind to lt_bind.
try.
call method cl_salv_hierseq_table=>factory
exporting
t_binding_level1_level2 = lt_bind
importing
r_hierseq = o_hs_alv
changing
t_table_level1 = t_vekp
t_table_level2 = t_vepo.
catch cx_root.
endtry.
me->set_event_handlers( changing co_hs_alv = o_hs_alv ).
me->set_pf_status( changing co_hs_alv = o_hs_alv ).
me->set_expand_option( changing co_hs_alv = o_hs_alv ).
o_hs_alv->display( ).
endmethod. "generate_output
method set_event_handlers.
data: lo_events type ref to cl_salv_events_hierseq.
try .
lo_events = co_hs_alv->get_event( ).
set handler on_link_click for lo_events.
set handler on_added_function for lo_events.
catch cx_root.
endtry.
endmethod.
method set_pf_status.
data: lo_functions type ref to cl_salv_functions_list.
lo_functions = co_hs_alv->get_functions( ).
lo_functions->set_all( abap_true ).
co_hs_alv->set_screen_status( pfstatus = 'ZMM18VE' report = sy-repid set_functions = cl_salv_model_base=>c_functions_all ).
endmethod. "set_pf_status
method set_expand_option.
data:
lo_columns type ref to cl_salv_columns_hierseq,
lo_column type ref to cl_salv_column_hierseq.
try.
lo_columns = co_hs_alv->get_columns( 1 ).
lo_columns->set_expand_column( 'EXPAND' ).
catch cx_salv_data_error cx_root. "#EC NO_HANDLER
endtry.
endmethod. "set_expand_option
method on_link_click.
data lo_event type ref to cl_salv_events_hierseq.
lo_event = o_hs_alv->get_event( ).
field-symbols: <lfa_data> like line of lo_report->t_vekp.
read table lo_report->t_vekp assigning <lfa_data> index row.
check sy-subrc is initial.
if <lfa_data>-expand is initial.
<lfa_data>-expand = 'X'.
else.
clear <lfa_data>-expand.
endif.
lo_report->o_hs_alv->refresh( ).
endmethod.
method on_added_function.
endmethod.
endclass. "lcl_report IMPLEMENTATION
报告salv\u hierseq。
表:vbrp。
选择选项:
vbrp werks的werks默认值为“R001”,
vbrp lgort的lgort默认值为“NORS”,
vbrp费用。
类lcl_报告定义。
公共部分。
类型:
泰九的开始,
exidv类型vekpvb exidv,
exida型vekpvb exida,
ernam型vekpvb ernam,
erdat型vekpvb erdat,
aenam类型vekpvb aenam,
aedat型vekpvb aedat,
vhilm类型vekpvb vhilm,
vhart类型vekpvb vhart,
vpobjkey类型vekpvb vpobjkey,
packvorschr st型vekpvb-packvorschr st,
exidv2型vekpvb-exidv2,
静脉型vekpvb静脉,
展开类型char01,
蒂尤kp的结束,
天宝之始,
材料类型vepovb材料,
velin型vepovb velin,
vemng型vepovb vemng,
vemeh型vepovb vemeh,
werks型vepovb werks,
lgort类型vepovb lgort,
sobkz型vepovb sobkz,
QPLO型vepovb QPLO,
/cwm/vemng型vepovb-/cwm/vemng,
hu_lgort型vepovb-hu_lgort,
静脉型vepovb静脉,
vepos类型vepovb vepos,
天宝街的尽头。
数据:
w_vekp类型ty_kp,
ty_kp的t_vekp类型标准表,
w_-vepo类型ty_-po,
t_-vepo型泰_-po标准表,
o_hs_alv类型参考cl_salv_hierseq_表。
方法:
获取数据,
生成输出。
私人部分。
方法:
将状态更改co hs alv type ref设置为cl salv hierseq表格,
设置扩展选项,将co hs alv type ref更改为cl salv hierseq表格,
设置事件处理程序,将co hs alv type ref更改为cl salv hierseq表格,
在链接上,单击事件链接,单击cl\u salv\u events\u hierseq导入行-列级发送器,
在cl_salv_events_hierseq导入e_salv_函数发送器的事件添加_函数上。
末级。
开始选择。
数据:lo_报告类型参考lcl_报告。
创建对象lo_报告。
lo_报告->获取_数据()。
lo_报告->生成_输出()。
类lcl_报告实现。
方法获取数据。
从vepo中选择*进入表格@t_vepo的相应字段,其中@werks中的werks和@lgort中的lgort以及@charg中的charg。
对于@t_vepo中的所有条目,从vekp中选择*进入表格@t_vekp的相应字段,其中venum=@t_vepo-venum。
如果不是,则t_vekp为初始值。
按静脉对静脉进行分类。
对于t_vekp中的所有条目,将*从vepo选择到表t_vepo的相应字段中,其中venum=t_vekp-venum。
按静脉对静脉进行分类。
删除velin='2'或velin='3'的t_vepo。
恩迪夫。
endmethod。“获取数据
方法生成输出。
数据:lt_bind类型salv_t_hierseq_binding,
拉乌结就像拉乌结一样。
la_bind-master='VENUM'。
la_bind-slave='VENUM'。
将la_绑定附加到lt_绑定。
尝试
调用方法cl\u salv\u hierseq\u table=>factory
出口
t_binding_level1_level2=lt_bind
进口
r_hierseq=o_hs_alv
改变
t_表_level1=t_vekp
t_table_level2=t_vepo。
抓住你的根。
结束。
me->设置事件处理程序(更改co\u hs\u alv=o\u hs\u alv)。
me->set_pf_status(更改co_hs_alv=o_hs_alv)。
me->设置扩展选项(更改co\U hs\U alv=o\U hs\U alv)。
o_hs_alv->显示()。
endmethod.“生成输出”
方法集\事件\处理程序。
数据:lo_事件类型参考cl_salv_事件等级。
尝试
lo_events=co_hs_alv->get_event()。
在链接上设置处理程序\u单击以查找lo\u事件。
为lo_事件在函数上添加设置处理程序。
抓住你的根。
结束。
endmethod。
方法设置\u pf\u状态。
数据:lo_函数类型参考cl_salv_函数列表。
lo_functions=co_hs_alv->get_functions()。
lo_函数->全部设置(abap_真)。
co\U hs\U alv->设置屏幕状态(pfstatus='ZMM18VE'报告=sy repid set\u functions=cl\U salv\u model\u base=>c\u functions\u all)。
endmethod。“设置_pf_状态
方法集\扩展\选项。
数据:
lo_柱类型参考cl_salv_柱等级,
lo_柱类型参考cl_salv_柱等级。
尝试
lo_columns=co_hs_alv->get_columns(1)。
lo_columns->set_expand_column('expand')。
捕获残存数据错误残存根。“#EC无处理程序
结束。
endmethod。“设置\扩展\选项
方法单击链接。
数据lo_事件类型参考cl_salv_事件层次结构。
lo_事件=o_hs_alv->get_事件()。
字段符号:如lo_report->t_vekp的行。
读取表LOU report->t\U vekp分配索引行。
检查sy subrc是否为首字母。
if-expand是初始值。
-expand='X'。
其他的
清除-扩展。
恩迪夫。
lo_报告->o_hs_alv->刷新()。
endmethod。
方法添加了函数。
endmethod。
endclass.“lcl_报告实施”
如果我能很好地理解这个问题,你想要t
CLASS lcl_report DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF ty_scarr.
INCLUDE TYPE scarr.
TYPES: expand TYPE flag,
END OF ty_scarr.
DATA:
t_scarr TYPE STANDARD TABLE OF ty_scarr,
t_spfli TYPE STANDARD TABLE OF spfli,
o_hs_alv TYPE REF TO cl_salv_hierseq_table.
METHODS:
get_data,
generate_output.
PRIVATE SECTION.
METHODS:
on_added_function FOR EVENT added_function OF cl_salv_events_hierseq
IMPORTING e_salv_function sender.
ENDCLASS.
CLASS lcl_report IMPLEMENTATION.
METHOD get_data.
SELECT * FROM spfli INTO TABLE @t_spfli.
SELECT * FROM scarr INTO TABLE @t_scarr.
SORT t_scarr BY carrid.
SORT t_spfli BY carrid connid.
ENDMETHOD.
METHOD generate_output.
cl_salv_hierseq_table=>factory(
EXPORTING
t_binding_level1_level2 = VALUE #( ( master = 'CARRID' slave = 'CARRID' ) )
IMPORTING
r_hierseq = o_hs_alv
CHANGING
t_table_level1 = t_scarr
t_table_level2 = t_spfli ).
SET HANDLER on_added_function FOR o_hs_alv->get_event( ).
" ZMM18VE GUI status was created by copying the SALV_TABLE_STANDARD
" from program SAPLSALV_METADATA_STATUS, and reassigning the
" function key F2 to the new function code ZZ&IC1 (instead of &IC1).
o_hs_alv->set_screen_status( pfstatus = 'ZMM18VE' report = sy-repid set_functions = cl_salv_model_base=>c_functions_all ).
o_hs_alv->get_functions( )->set_all( abap_true ).
o_hs_alv->get_columns( 1 )->set_expand_column( 'EXPAND' ).
o_hs_alv->display( ).
ENDMETHOD. "generate_output
METHOD on_added_function.
DATA: cursor_field TYPE string.
CASE e_salv_function.
WHEN 'ZZ&IC1'.
ASSIGN ('(SAPLKKBL)GS_HIDE-INDEX') TO FIELD-SYMBOL(<index>).
CHECK sy-subrc = 0.
GET CURSOR FIELD cursor_field.
CASE cursor_field.
WHEN 'SYM_MINUS_FOLDER'.
MESSAGE |Request to collapse line { <index> }| TYPE 'I'.
WHEN 'SYM_PLUS_FOLDER'.
MESSAGE |Request to expand line { <index> }| TYPE 'I'.
ENDCASE.
" Execute standard Expand/Collapse
o_hs_alv->set_function( '&IC1' ).
ENDCASE.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA: lo_report TYPE REF TO lcl_report.
CREATE OBJECT lo_report.
lo_report->get_data( ).
lo_report->generate_output( ).