ABAP概述
01、什么是ALV数据穿透
ALV数据穿透是在ALV报表的基础上,通过点击报表中的任意一行,将那一行的数据"穿透"到对应的详情界面,类似于HTML的超链接跳转,点击之后,将数据跳转到另一个页面进行展示。ALV数据穿透具体的应用场景,常常应用于采购订单等业务的穿透(即跳转)。
优点:ALV数据穿透,相比于Java Web开发相当简单,仅仅只需要配置跳转界面,无需关心数据如何传递到详情界面。
02、ALV数据穿透方法介绍
(1)数据穿透代码
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'. "鼠标双击
READ TABLE it_item INTO DATA(s_it_item) INDEX rs_selfield-TABINDEX. "行数据
SET PARAMETER ID 'MAT' FIELD it_item-matnr.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDFORM.
(2)代码拆分讲解
代码 | 解释 |
---|---|
frm_user_command | 类似于回调函数,当点击ALV时,会自动触发FORM |
r_ucomm | 事件名称 |
rs_selfield | 行数据 |
set parameter id | 设置跳转屏幕的参数 |
call transaction | 通过T-CODE,调用屏幕 |
skip first screen | 跳过第一个屏幕 |
03、简单实现ALV数据穿透
实现效果:点击ALV报表某一行中任意字段的数据,跳转穿透到详情界面
(1)ALV报表(上节已经介绍过了,所以笔者偷个懒直接复制粘贴)
TYPE-POOLS: slis.
TABLES: mara.
** Layout 变量定义
DATA: gs_layout TYPE lvc_s_layo,
gt_fcat_lvc TYPE lvc_t_fcat,
gs_fcat_lvc TYPE lvc_s_fcat.
*直接定义内表
DATA: BEGIN OF item OCCURS 0,
matnr LIKE mara-matnr, "物料编号
mtart LIKE mara-mtart, "物料类型
matkl LIKE mara-matkl, "物料组
END OF item.
* 筛选界面 单选p,多选s
SELECTION-SCREEN BEGIN OF BLOCK blc WITH FRAME TITLE text-001.
PARAMETERS: p_matnr LIKE mara-matnr."物料编号
SELECT-OPTIONS s_mtart FOR mara-mtart ."物料类型
SELECT-OPTIONS s_matkl FOR mara-matkl ."物料组
SELECTION-SCREEN END OF BLOCK blc.
* 初始化变量
INITIALIZATION.
DATA: it_item LIKE TABLE OF item WITH HEADER LINE.
START-OF-SELECTION.
PERFORM get_data.
PERFORM frm_set_fieldcat.
PERFORM frm_alv_display.
FORM get_data.
clear: it_item.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE it_item
FROM mara. " 我用了模糊查询 WHERE mara~matnr LIKE '%R18%'
ENDFORM.
FORM frm_set_fieldcat.
DEFINE set_fieldcat.
CLEAR gs_fcat_lvc .
gs_fcat_lvc-fieldname = &1."内表的字段
gs_fcat_lvc-outputlen = &2."输出长度
gs_fcat_lvc-scrtext_l = gs_fcat_lvc-scrtext_s = gs_fcat_lvc-scrtext_m = &3."在ALV里面显示的名字
gs_fcat_lvc-just = &4."水平对齐方式,L左对齐,R右对齐。
gs_fcat_lvc-lzero = &5. "输出前导0
gs_fcat_lvc-no_zero = &6.
gs_fcat_lvc-emphasize = &7.
APPEND gs_fcat_lvc TO gt_fcat_lvc.
END-OF-DEFINITION.
set_fieldcat:
'matnr' '' '物料编号' '' '' '' '',
'mtart' '' '物料类型' '' '' '' '' ,
'matkl' '' '物料组' '' '' '' '' .
ENDFORM.
FORM frm_alv_display.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fcat_lvc
TABLES
t_outtab = it_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
(2)ALV报表数据穿透
将上面的代码粘贴到ALV报表代码最下面即可
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'. "鼠标双击
READ TABLE it_item INTO DATA(s_it_item) INDEX rs_selfield-TABINDEX. "行数据
SET PARAMETER ID 'MAT' FIELD it_item-matnr.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDFORM.