ABAP 报表穿透(持续更新中...)

前言

用户想要通过前台的报表字段双击或单击的方式跳转到对应的单据上

实现方法

其实挺简单的,单击和双击都可以通过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.
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值