前言
用户想要通过前台的报表字段双击或单击的方式跳转到对应的单据上
实现方法
其实挺简单的,单击和双击都可以通过user_command里面事件捕获
单击要特殊一点,需要在fieldcat里面设置属性hotspot
gs_fieldcat-hotspot = 'X'.
在user_command中捕获用户的双击操作
*&---------------------------------------------------------------------*
*& Form frm_user_command
*&---------------------------------------------------------------------*
* 菜单栏事件
*----------------------------------------------------------------------*
* --> pv_ucomm 触发的功能码
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_user_command USING pv_ucomm LIKE sy-ucomm "user_command
pv_selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data. "将更新后的数据传到alv所对应的内表
pv_selfield-refresh = 'X'. "刷新数据
CASE pv_ucomm.
WHEN '&IC1'. " 正常只捕获双击,若设置了fieldcat-hotspot = 'X',则也可以捕获单击
IF pv_selfield-fieldname = 'EBELN'.
" 此时已捕获到双击ebeln列的事件,双击的行索引是pv_selfield-tabindex.
PERFORM frm_click_ebeln USING pv_selfield-tabindex.
ENDIF.
ENDCASE.
lr_grid->set_frontend_layout( is_layout = gs_layout ).
"Refresh ALV display
lr_grid->refresh_table_display( is_stable = VALUE lvc_s_stbl( row = 'X'
col = 'X' )
i_soft_refresh = 'X' ).
ENDFORM.
在例程中处理穿透事件
*&---------------------------------------------------------------------*
*& Form frm_click_ebeln
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> RS_SELFIELD_TABINDEX
*&---------------------------------------------------------------------*
FORM frm_click_ebeln USING pv_row TYPE syst_tabix.
DATA(ls_alv) = VALUE #( gt_alv[ pv_row ] OPTIONAL ).
IF ls_alv IS NOT INITIAL.
CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
EXPORTING
i_ebeln = ls_alv-ebeln
i_display_only = 'X'.
ENDIF.
ENDFORM.
穿透例程大杂烩
采购订单穿透
*&---------------------------------------------------------------------*
*& Form frm_click_ebeln
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> RS_SELFIELD_TABINDEX
*&---------------------------------------------------------------------*
FORM frm_click_ebeln USING pv_row TYPE syst_tabix.
DATA(ls_alv) = VALUE #( gt_alv[ pv_row ] OPTIONAL ).
IF ls_alv IS NOT INITIAL.
CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
EXPORTING
i_ebeln = ls_alv-ebeln
i_display_only = 'X'.
ENDIF.
ENDFORM.
物料凭证穿透
*&---------------------------------------------------------------------*
*& Form frm_click_mblnr
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> PV_SELFIELD_TABINDEX
*&---------------------------------------------------------------------*
FORM frm_click_mblnr USING pv_row TYPE syst_tabix.
DATA(ls_output) = VALUE #( gt_output[ pv_row ] OPTIONAL ).
IF ls_output IS NOT INITIAL.
CALL FUNCTION 'MIGO_DIALOG'
EXPORTING
i_action = 'A04'
i_refdoc = 'R02'
i_mblnr = ls_output-mblnr
i_mjahr = ls_output-mjahr
EXCEPTIONS
illegal_combination = 1
OTHERS = 2.
ENDIF.
ENDFORM.
合作伙伴BP穿透
*&---------------------------------------------------------------------*
*& Form frm_click_partner
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_click_partner USING pv_row TYPE syst_tabix.
" 感谢Jim Feng提供的BP跳转代码 :)
DATA: lv_partner TYPE but000-partner.
DATA(ls_output) = VALUE #( gt_output[ pv_row ] OPTIONAL ).
lv_partner = ls_output-partner.
IF ls_output IS NOT INITIAL.
" create new request
DATA(lo_request) = NEW cl_bupa_navigation_request( ).
lo_request->set_partner_number( lv_partner ).
lo_request->set_bupa_activity( '03' ). " 01 - Create, 02 - Change, 03 - Display
" set skip start-up options
DATA(lo_options) = NEW cl_bupa_dialog_joel_options( ).
lo_options->set_locator_visible( space ).
" open New BDT Instance for display of selected partner
cl_bupa_dialog_joel=>start_with_navigation(
EXPORTING
iv_request = lo_request
iv_options = lo_options
iv_in_new_internal_mode = abap_true
EXCEPTIONS
already_started = 1 " Maintenance Already Running
not_allowed = 2 " No Authorization to Start Dialog
OTHERS = 3
).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
ENDFORM.