ALV双击事件

实例一

REPORT ZR_EXAMPLE_16.

TABLES:MARA.
TYPE-POOLS: SLIS.
SELECT-OPTIONS:MATNR FOR MARA-MATNR OBLIGATORY.

DATA:LT_MARA TYPE TABLE OF MARA WITH HEADER LINE,
  FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
  LAYOUT TYPE SLIS_LAYOUT_ALV,
  W_REPID  LIKE SY-REPID.

START-OF-SELECTION.
  SELECT * FROM MARA INTO TABLE LT_MARA
 WHERE MATNR IN MATNR.

  W_REPID = SY-REPID.
*  定义热键显示字段,使双击事件有效
  FIELDCAT-REF_TABNAME = 'LT_MARA'.
  FIELDCAT-FIELDNAME = 'MATNR'.
  FIELDCAT-HOTSPOT = 'X'.
  APPEND FIELDCAT.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM            = W_REPID             "定义回执程序
      IS_LAYOUT                     = LAYOUT
      I_STRUCTURE_NAME              = 'MARA'
      I_CALLBACK_USER_COMMAND   = 'ALV_USER_COMMAND'   "定义执行事件
      IT_FIELDCAT                       = FIELDCAT[]
    TABLES
      T_OUTTAB                          = LT_MARA.

*---------------------------------------------------------------------*
*       事件触发子程序                         *
*---------------------------------------------------------------------*
FORM ALV_USER_COMMAND USING R_UCOMM     LIKE SY-UCOMM
                         RS_SELFIELD TYPE SLIS_SELFIELD.
  CASE R_UCOMM.
 WHEN '&IC1'.
* 获取当前ALV所在行数据
   READ TABLE LT_MARA INDEX RS_SELFIELD-TABINDEX.
   SET PARAMETER ID: 'MAT' FIELD LT_MARA-MATNR.
   CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
  ENDCASE.
ENDFORM.

实例二

FORM user_command USING r_ucomm LIKE sy-ucomm
               rs_selfield TYPE slis_selfield.
"使用此处可以不用给 FIELDCAT-HOTSPOT = 'X'. 赋值
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = gc_grid.
  CALL METHOD gc_grid->check_changed_data.
  rs_selfield-refresh = 'X'.


  CASE r_ucomm.
    WHEN '&IC1'.
      CLEAR gt_tabc[].
      READ TABLE gt_alv INTO gs_alv INDEX rs_selfield-tabindex.
      LOOP AT gt_lipstab INTO gs_lips WHERE vgbel = gs_alv-ebeln AND vgpos = gs_alv-ebelp.
        gs_tabc-vbeln = gs_lips-vbeln.
        gs_tabc-posnr = gs_lips-posnr.
        gs_tabc-pstyv = gs_lips-pstyv.
        CASE gs_tabc-pstyv.
          WHEN 'ELN'.
            gs_tabc-zms = '收料'.
          WHEN 'NLC'.
            gs_tabc-zms = '发料'.
        ENDCASE.
        gs_tabc-matnr = gs_lips-matnr.
        gs_tabc-arktx = gs_lips-arktx.
        gs_tabc-lfimg = gs_lips-lfimg.
        gs_tabc-meins = gs_lips-meins.
        gs_tabc-lgmng = gs_lips-lgmng.
        READ TABLE gt_likp INTO gs_likp WITH KEY vbeln = gs_lips-vbeln.
        IF sy-subrc IS INITIAL.
          gs_tabc-lfdat = gs_likp-lfdat.
        ENDIF.
        APPEND gs_tabc TO gt_tabc.
        CLEAR gs_tabc.
      ENDLOOP.
      CALL SCREEN 200 STARTING AT 20 3 ENDING AT 160 10.
  ENDCASE.
ENDFORM.

实例三

FORM user_command USING r_ucomm LIKE sy-ucomm
               rs_selfield TYPE slis_selfield.

  DATA: lv_ebeln TYPE ebeln.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lc_grid.
  CALL METHOD lc_grid->check_changed_data.
  rs_selfield-refresh = 'X'.

  CASE r_ucomm.
      CASE rs_selfield-fieldname.    "对某一字段设置事件
        WHEN 'EBELN'.
          lv_ebeln = rs_selfield-value.
          SET PARAMETER ID 'BES' FIELD  lv_ebeln.
          CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
      ENDCASE.
  ENDCASE.
ENDFORM.

猜你喜欢

转载自blog.csdn.net/qq_37968127/article/details/88945827