如何在用户点击ALV热点字段时触发代码?
How to trigger code when the user clicks an ALV hotspot field?
我正在努力解决以下问题:
我有两个 table(header 和项目),我想使用热点和 class CL_SALV_TABLE
连接它们。我设法显示 header table 并在带有订单号的列上设置热点。我希望在我单击数字字段(这是我的热点)后,第二个 table 作为弹出窗口 window 打开。但是,我不知道如何定义事件。我知道如何使用 CL_SALV_TABLE
的显示方法来获得弹出窗口 window,例如,此代码:
CALL METHOD cl_salv_table=>factory(
* EXPORTING
* list_display = IF_SALV_C_BOOL_SAP=>FALSE
* r_container =
* container_name =
IMPORTING
r_salv_table = o_alv
CHANGING
t_table = it_tab )
.
CATCH cx_salv_msg .
ENDTRY.
o_alv->set_screen_popup( start_column = 1
end_column = 150
start_line = 1
end_line = 30 ).
o_alv->display( ).
非常感谢任何意见或帮助。提前致谢!
这是一个最小的示例,当单击 ALV 热点字段时执行代码(当单击“书号”列中的任何单元格时,将显示带有文本的弹出窗口,但您可以执行任何您想要的操作当然)。
需要记住的重要事项:
METHODS on_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid ...
: 热点字段被点击 时定义代码为运行的方法
SET HANDLER on_hotspot_click ...
: 告诉控制框架在事件发生时触发该方法
代码:
CLASS lcl_app DEFINITION.
PUBLIC SECTION.
METHODS constructor.
METHODS on_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id es_row_no.
DATA go_alv TYPE REF TO cl_gui_alv_grid.
DATA gt_sbook TYPE TABLE OF sbook.
ENDCLASS.
CLASS lcl_app IMPLEMENTATION.
METHOD constructor.
CREATE OBJECT go_alv EXPORTING i_parent = cl_gui_container=>screen0.
SELECT * FROM sbook INTO TABLE gt_sbook.
DATA(fieldcatalog) = VALUE lvc_t_fcat(
( fieldname = 'BOOKID' ref_table = 'SBOOK' ref_field = 'BOOKID' hotspot = 'X' ) ).
SET HANDLER on_hotspot_click FOR go_alv.
go_alv->set_table_for_first_display(
EXPORTING i_structure_name = 'SBOOK'
CHANGING it_outtab = gt_sbook it_fieldcatalog = fieldcatalog ).
ENDMETHOD.
METHOD on_hotspot_click.
READ TABLE gt_sbook INDEX es_row_no-row_id INTO DATA(ls_sbook).
IF sy-subrc = 0.
MESSAGE |click { ls_sbook-bookid } col { e_column_id-fieldname } row { es_row_no-row_id }| TYPE 'I'.
ENDIF.
ENDMETHOD.
ENDCLASS.
DATA go_app TYPE REF TO lcl_app.
PARAMETERS dummy.
AT SELECTION-SCREEN OUTPUT.
IF go_app IS NOT BOUND.
go_app = NEW lcl_app( ).
ENDIF.
我正在努力解决以下问题:
我有两个 table(header 和项目),我想使用热点和 class CL_SALV_TABLE
连接它们。我设法显示 header table 并在带有订单号的列上设置热点。我希望在我单击数字字段(这是我的热点)后,第二个 table 作为弹出窗口 window 打开。但是,我不知道如何定义事件。我知道如何使用 CL_SALV_TABLE
的显示方法来获得弹出窗口 window,例如,此代码:
CALL METHOD cl_salv_table=>factory(
* EXPORTING
* list_display = IF_SALV_C_BOOL_SAP=>FALSE
* r_container =
* container_name =
IMPORTING
r_salv_table = o_alv
CHANGING
t_table = it_tab )
.
CATCH cx_salv_msg .
ENDTRY.
o_alv->set_screen_popup( start_column = 1
end_column = 150
start_line = 1
end_line = 30 ).
o_alv->display( ).
非常感谢任何意见或帮助。提前致谢!
这是一个最小的示例,当单击 ALV 热点字段时执行代码(当单击“书号”列中的任何单元格时,将显示带有文本的弹出窗口,但您可以执行任何您想要的操作当然)。
需要记住的重要事项:
METHODS on_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid ...
: 热点字段被点击 时定义代码为运行的方法
SET HANDLER on_hotspot_click ...
: 告诉控制框架在事件发生时触发该方法
代码:
CLASS lcl_app DEFINITION.
PUBLIC SECTION.
METHODS constructor.
METHODS on_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id es_row_no.
DATA go_alv TYPE REF TO cl_gui_alv_grid.
DATA gt_sbook TYPE TABLE OF sbook.
ENDCLASS.
CLASS lcl_app IMPLEMENTATION.
METHOD constructor.
CREATE OBJECT go_alv EXPORTING i_parent = cl_gui_container=>screen0.
SELECT * FROM sbook INTO TABLE gt_sbook.
DATA(fieldcatalog) = VALUE lvc_t_fcat(
( fieldname = 'BOOKID' ref_table = 'SBOOK' ref_field = 'BOOKID' hotspot = 'X' ) ).
SET HANDLER on_hotspot_click FOR go_alv.
go_alv->set_table_for_first_display(
EXPORTING i_structure_name = 'SBOOK'
CHANGING it_outtab = gt_sbook it_fieldcatalog = fieldcatalog ).
ENDMETHOD.
METHOD on_hotspot_click.
READ TABLE gt_sbook INDEX es_row_no-row_id INTO DATA(ls_sbook).
IF sy-subrc = 0.
MESSAGE |click { ls_sbook-bookid } col { e_column_id-fieldname } row { es_row_no-row_id }| TYPE 'I'.
ENDIF.
ENDMETHOD.
ENDCLASS.
DATA go_app TYPE REF TO lcl_app.
PARAMETERS dummy.
AT SELECTION-SCREEN OUTPUT.
IF go_app IS NOT BOUND.
go_app = NEW lcl_app( ).
ENDIF.