在查看数据的时候,不总是只有一个界面,为了让用户更方便地查看数据,需要根据当前的数据跳转到另外的界面中,比如查看明细等。本文演示 ALV 比较实用的功能:双击 ALV 单元格跳转到另外一个 ALV 中。
要实现的业务场景:报表首先显示航空公司信息,当用户点击航空公司 ID 所在字段的时候,跳转查看航空公司的航班信息。
ALV 常规的代码如下:
report zfalv_dbl_click.type-pools: slis.data: gt_scarr type standard table of scarr,gs_scarr like line of gt_scarr.data: gt_spfli type standard table of spfli,gs_spfli like line of gt_spfli.start-of-selection.perform get_scarr_data.perform frm_disp_data.*&---------------------------------------------------------------------*
*& Form get_scarr_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form get_scarr_data.select * from scarrinto table gt_scarr.
endform. "get_scarr_data*&---------------------------------------------------------------------*
*& Form get_spfli_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form get_spfli_data using p_carrid like scarr-carrid.select * from spfliinto table gt_spfliwhere carrid = p_carrid.
endform. "get_spfli_data*&---------------------------------------------------------------------*
*& Form frm_disp_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form frm_disp_data.data: lt_fieldcat type slis_t_fieldcat_alv,ls_fieldcat type slis_fieldcat_alv.clear lt_fieldcat[] .call function 'Z_FALV_FIELD_CATALOG'exportingit_output = gt_scarr[]tablesfield_catalog = lt_fieldcat[].call function 'REUSE_ALV_GRID_DISPLAY'exportingi_callback_program = sy-repidi_callback_user_command = 'FRM_USER_COMMAND'it_fieldcat = lt_fieldcat[]tablest_outtab = gt_scarr[].
endform. "frm_disp_data
为了能处理双击事件,下面的代码是必须的:
然后在双击事件中处理跳转的逻辑:
form frm_user_command using r_ucomm like sy-ucommrs_selfield type slis_selfield
.case r_ucomm.when '&IC1'. " double clickclear gs_scarr.read table gt_scarr into gs_scarr index rs_selfield-tabindex.check sy-subrc = 0.if rs_selfield-sel_tab_field = 'SCARR-CARRID'.perform get_spfli_data using gs_scarr-carrid.perform frm_disp_spfli_data.endif.endcase.
endform. "frm_user_command
源码
stonewm/abap-practice
说明:之前放在 gitee 上的代码由于不明原因个人对 repository 进行了删除,ABAP 博文关联的源码都会显示找不到。 github 上的链接仍然是有效的。