繁体   English   中英

用户点击ALV热点字段时如何触发代码?

[英]How to trigger code when the user clicks an ALV hotspot field?

我正在努力解决以下问题:

我有两个表(标题和项目),我想通过使用热点和类CL_SALV_TABLE将它们连接起来。 我设法显示了标题表并在带有订单号的列上设置了一个热点。 我希望在我单击一次数字字段(这是我的热点)后,第二个表作为弹出窗口打开。 但是,我不知道如何定义事件。 我知道如何通过使用CL_SALV_TABLE的显示方法来获得一个弹出窗口,例如,这段代码:

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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM