Grid ALV 事件

DATA: gt_event TYPE slis_t_event.

Event Default formname
slis_ev_item_data_expand ITEM_DATA_EXPAND
slis_ev_reprep_sel_modify REPREP_SEL_MODIFY
slis_ev_caller_exit_at_start CALLER_EXIT
slis_ev_user_command USER_COMMAND
slis_ev_top_of_page TOP_OF_PAGE
slis_ev_data_changed DATA_CHANGED
slis_ev_top_of_coverpage TOP_OF_COVERPAGE
slis_ev_end_of_coverpage END_OF_COVERPAGE
slis_ev_pf_status_set PF_STATUS_SET
slis_ev_context_menu CONTEXT_MENU

ALV 列字段的自动更新事件 DATA_CHANGED

ALV 可修改字段输入数据后,自动更新对应的结果列。

事件定义

DATA: ls_event TYPE LINE OF slis_t_event.
ls_event-name = slis_ev_data_changed.
ls_event-form = 'FRM_DATA_CHANGED'.
APPEND ls_event TO gt_event.

事件使用

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    i_callback_program       = sy-repid
    i_callback_pf_status_set = 'FRM_SET_STATUS'
    i_callback_user_command  = 'FRM_USER_COMMAND'
    it_events                = gt_event[]
    is_layout_lvc            = gs_layo
    it_fieldcat_lvc          = gt_fcat
    i_save                   = 'A'
  TABLES
    t_outtab                 = gt_alv
  EXCEPTIONS
    program_error            = 1
    OTHERS                   = 2.

事件功能 FORM

FORM frm_alv_data_change USING uo_data_changed
              TYPE REF TO cl_alv_changed_data_protocol.
  FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE,
                 <fs_line> TYPE str_alv.
  DATA: lt_mod TYPE lvc_t_modi,
        ls_mod TYPE lvc_s_modi.
  DATA: lv_row_id TYPE int4,
        lv_tabix TYPE int4,
        lv_fieldname TYPE lvc_fname.

  IF uo_data_changed->mp_mod_rows IS NOT INITIAL.
    " 将数据变化所在行数据赋值到指针
    ASSIGN uo_data_changed->mp_mod_rows->* TO <fs_table>.
    " 读取数据变化所在的具体单元格
    MOVE uo_data_changed->mt_mod_cells TO lt_mod.
    READ TABLE lt_mod INTO ls_mod INDEX 1.
    lv_row_id = ls_mod-row_id.
    lv_tabix = ls_mod-tabix.
    " 循环指针内的数据
    LOOP AT <fs_table> ASSIGNING <fs_line>.
      IF <fs_line>-lifnr_n IS NOT INITIAL.
        SELECT SINGLE name1 INTO <fs_line>-name1_n
          FROM lfa1
         WHERE lifnr = <fs_line>-lifnr_n.
        lv_fieldname = 'NAME1_N'.
        CALL METHOD uo_data_changed->modify_cell
          EXPORTING
            i_fieldname = lv_fieldname
            i_row_id    = lv_row_id
            i_tabix     = lv_tabix
            i_value     = <fs_line>-name1_n.
      ENDIF.
      IF <fs_line>-matnr_n IS NOT INITIAL.
        SELECT SINGLE maktx INTO <fs_line>-maktx_n
          FROM makt
         WHERE matnr = <fs_line>-matnr_n
           AND spras = sy-langu.
        lv_fieldname = 'MAKTX_N'.
        CALL METHOD uo_data_changed->modify_cell
          EXPORTING
            i_fieldname = lv_fieldname
            i_row_id    = lv_row_id
            i_tabix     = lv_tabix
            i_value     = <fs_line>-maktx_n.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.                    "frm_alv_data_change

自定义 F4 帮助

事件功能 FORM

FORM caller_exit USING ls_data TYPE slis_data_caller_exit.
  DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid.
  data: lt_wa_f4 type lvc_s_f4,
        lt_f4 type lvc_t_f4.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = l_ref_alv.
  set handler lcl_event_receiver=>on_f4 for l_ref_alv.
  set handler lcl_event_receiver=>on_data_changed for l_ref_alv.
  lt_wa_f4-fieldname  = 'MTART'.
  lt_wa_f4-register   = 'X'.
  lt_wa_f4-getbefore  = 'X'.
  lt_wa_f4-chngeafter = 'X'.
  append lt_wa_f4 to lt_f4.
  call method l_ref_alv->register_f4_for_fields
    EXPORTING
      it_f4 = lt_f4.
ENDFORM.                    "CALLER_EXIT

ALV 上的下拉框

事件定义

DATA: ls_event TYPE LINE OF slis_t_event.
ls_event-name = 'CALLER_EXIT'.
ls_event-form = 'FRM_CALLER_EXIT'.
APPEND ls_event TO gt_event.

设置 Fieldcat 属性

设置下拉字段为可输入fieldcat-edit = 'X'.,设置 fieldcat-drdn_hndl = '1'.

  • 1:为下拉框对应的组,可以用数字来标记下拉框的组,以此来实现多个下拉框

设置下拉框内容

DATA: lt_ddval TYPE lvc_t_drop,
      ls_ddval TYPE lvc_s_drop.
ls_ddval-handle = '1'.
ls_ddval-value  = 'value1'.
APPEND ls_ddval TO lt_ddval.
ls_ddval-handle = '1'.
ls_ddval-value  = 'value2'.
APPEND ls_ddval TO lt_ddval.

事件功能 FORM

FORM frm_caller_exit USING ls_data TYPE slis_data_caller_exit.
  DATA: lo_grid TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lo_grid.
  CALL METHOD lo_grid->set_drop_down_table
    EXPORTING
      it_drop_down = lt_ddval.
ENDFORM.                    "FRM_CALLER_EXIT