ALV双击事件调用TCODE

本文详细介绍了在SAP ABAP中如何定义和响应ALV网格的用户命令,包括双击事件处理和调用不同事务代码的方法。通过具体代码示例,展示了如何设置参数并直接跳转到特定交易屏幕。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板,以备拷贝之用~

1,定义用户命令form

form user_command using r_ucomm like sy-ucomm

                   rs_selfield type slis_selfield.

  case r_ucomm.

    when '&IC1'.        " SAP standard code for double-clicking

      if rs_selfield-sel_tab_field = 'ITAB1-VBELN'.

        set parameter id 'AUN' field rs_selfield-value.

        call transaction 'VA03' and skip first screen.

      endif.

      if rs_selfield-sel_tab_field = 'ITAB1-AUFNR'.

        set parameter id 'ANR' field rs_selfield-value.

        call transaction 'CO03' and skip first screen.

      endif.

      if rs_selfield-sel_tab_field = 'ITAB1-MATNR'.

        set parameter id 'MAT' field rs_selfield-value.

        call transaction 'MM03' and skip first screen.

      endif.

      if rs_selfield-sel_tab_field = 'ITAB1-VBELN1' or

         rs_selfield-sel_tab_field = 'ITAB1-VBELN2'.

        set parameter id 'VL' field rs_selfield-value.

        call transaction 'VL03N' and skip first screen.

      endif.

      if rs_selfield-sel_tab_field = 'ITAB1-EBELN'.

        set parameter id 'BES' field rs_selfield-value.

        call transaction 'ME23N'.

      endif.

  endcase.

endform.

2,调用alv的FM时参数

    已经有g_user_command type slis_formname value 'USER_COMMAND',

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

       i_buffer_active          = 'X'

       i_callback_program       = ld_repid

       it_fieldcat              = tbl_fieldcat

       is_layout                = gs_layout

       i_callback_user_command = g_user_command  

       i_save                   = g_save

*       i_background_id          = 'ALV_BACKGROUND'

*       i_grid_title             = text-001

 

       is_variant               = gs_variant

       it_events                = gt_events[]

    TABLES

       t_outtab                 = gt_output.

3,注意不用define用append方式添加fieldcat时,别忘了tabname~开始没注意,小找了一会

类似:    wrk_fieldcat-tabname = 'GT_OUTPUT'.

   wrk_fieldcat-col_pos       = '1'.

   wrk_fieldcat-fieldname     = 'EBELN'.

   wrk_fieldcat-outputlen     = 10.

   wrk_fieldcat-seltext_l     = c_no.

  APPEND wrk_fieldcat TO tbl_fieldcat.

感觉不如:

DEFINE MACRO_FIELDCAT.

   FIELDCAT-TABNAME    = '&1'.

   FIELDCAT-FIELDNAME = '&2'.

   FIELDCAT-SELTEXT_M =   &3.

   FIELDCAT-OUTPUTLEN =   &4.

   FIELDCAT-DATATYPE   = '&5'.

   FIELDCAT-LZERO      = 'X'.

  APPEND FIELDCAT.

  CLEAR FIELDCAT.

END-OF-DEFINITION.

 

 

样例:

FORM alv_user_command1 USING i_ucomm    LIKE sy-ucomm
                             i_selfield TYPE slis_selfield.

*响应事件
  CASE i_ucomm.
*- 响应双击事件
    WHEN '&IC1'.
      READ TABLE it_alv INTO ls_alv INDEX i_selfield-tabindex.
      IF sy-subrc EQ 0.
        CASE i_selfield-fieldname.
          WHEN 'MATNR'.
            IF NOT ls_alv-matnr IS INITIAL.                "一般可以通过设置Parameter Id来跳转
              SET PARAMETER ID 'MAT' FIELD ls_alv-matnr.
              CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
            ENDIF.
          WHEN 'EBELN'.
            IF NOT ls_alv-ebeln IS INITIAL. "但是这个功能在调用Me23n采购订单相关的程序时不起作用。这种情况下,我们需要采用另外一种方式,调用FUNCTION。
              CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
                EXPORTING
                  i_ebeln              = ls_alv-ebeln
                EXCEPTIONS
                  not_found            = 1
                  no_authority         = 2
                  invalid_call         = 3
                  preview_not_possible = 4
                  OTHERS               = 5.

              IF sy-subrc <> 0.

                MESSAGE ID sy-msgid TYPE sy-msgty NUMBER
                sy-msgno

                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

              ENDIF.

            ENDIF.
          WHEN OTHERS.
            MESSAGE TEXT-w01 TYPE 'I'.
        ENDCASE.
      ENDIF.
    WHEN '&PRINT'.
      PERFORM  f_print_data.
    WHEN OTHERS.

  ENDCASE.

ENDFORM.                    "ALV_USER_COMMAND1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值