模板,以备拷贝之用~
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