REUSE_ALV_GRID_DISPLAY_LVC函数输⼊参数属性的应⽤REUSE_ALV_GRID_DISPLAY_LVC函数输⼊参数属性的应⽤
前⾯我们讲过, Grid 的输出有两个:REUSE__GRID_DISPLAY 和 REUSE__GRID_DISPLAY_LVC
两者的操作⼤同⼩异,只是后者能更好的和ALV容器结合使⽤,前后则不能;⽽在输⼊参数属性的结构上也有些差异。
本篇⽂章主要讲解下ALV中输⼊参数的⼀些应⽤。
⾸先了解下ALV输⼊参数的作⽤(粗体为常⽤参数):
I_INTERFACE_CHECK: 检查接⼝⼀致性
I_BYPASSING_BUFFER: 是否使⽤缓存
I_BUFFER_ACTIVE:是否激活缓存,如果每次显⽰ALV都是相同的字段⽬录,则该字段⽬录会被放到⼀特殊的缓存⾥,加快显⽰速度。:调⽤ALV的程序名称
:ALV⼯具栏Subroutine(⼦程序)
:
ALV Ur Command Subroutine(⼦程序),实现对应菜单项及相应事件功能见义勇为条例
:ALV抬头内容信息
:ALV HTML格式抬头内容信息
I_CALLBACK_HTML_END_OF_LIST:ALV HTML格式页脚内容信息
I_STRUCTURE_NAME:为输出表数据结构的命名,指定了这个参数,域⽬录将会⾃动⽣成
I_BACKGROUND_ID:ALV背景图⽚Object ID
:ALV 标题
:GRID信息
:ALV输出布局样式
:设定显⽰的项⽬名称及输出设定
:隐藏设置的ALV⼯具栏
IT_SPECIAL_GROUPS / IT_SPECIAL_GROUPS_LVC:若内表中⼀些字段通过SP_GROUP被分组在⼀起,必须为这些组传递组⽂本内表
:ALV排序设置
IT_FILTER / IT_FILTER_LVC:ALV过滤设置
《狼和小羊》的故事
IS_SEL_HIDE:替换或修改屏幕中lect-option的值
:⽤户是否可以定义默认的布局,’X'-可以定义默认布局,Space-不可以定义默认布局(默认:X)
:保存表格布局,’X'-只能保存全局变式;’U'-只能保存特定变式;’A'-都可以保存;Space-不能保存变式(默认:space)
:表格布局变式
:设置事件, 类型为slis_t_event的内表(name:事件名称,form:事件的FORM)
IT_EVENT_EXIT:设置回调的⽅法的执⾏⾏为,表明⽤户所写的代码是在执⾏标准执⾏之前还是之后
IS_PRINT:后台打印的相关参数
I_SCREEN_START_COLUMN:以对话框形式显⽰的开始列
I_SCREEN_START_LINE:以对话框形式显⽰的开始⾏
I_SCREEN_END_COLUMN:以对话框形式显⽰的结束列
I_SCREEN_END_LINE:以对话框形式显⽰的结束⾏
I_HTML_HEIGHT_TOP:HTML抬头的⾼度
I_HTML_HEIGHT_END:HTML页脚的⾼度
IT_ALV_GRAPHICS:是否可以在图表中显⽰ALV
IT_HYPERLINK:使⽤超链接
下⾯详细介绍下常⽤的输⼊参数:
1. I_CALLBACK_PROGRAM 参数属性
定义调⽤程序名称,⼀般为当前程序sy-repid
2. I_CALLBACK_PF_STATUS_SET 参数
定义ALV屏幕菜单,此参数允许报表展现⽤户⾃定义的屏幕菜单,
参数类型为:SLIS_FORMNAME,指定⾃定义按钮的⼦FORM,该⼦FORM不显式的调⽤;
如:
i_callback_pf_status_t = 'FRM_SET_STATUS'
Form中的定义为:
FORM frm_t_status USING p_extab TYPE slis_t_extab.
SET PF-STATUS 'Z_ALV_STATUS' .
ENDFORM. " frm_t_status
2.1). 没有⾃定义按钮时候,该参数可以不要,这时会显⽰ALV标准的按钮;
当然这些按钮可以部分隐藏(见:);
2.2). 当我们使⽤⾃定义按钮后,ALV⾃带的标准按钮,则会失效,这时需要将⼀些必要的按钮在⼯具条补上;
2.3). 其中 “分隔符” 的插⼊⽅法为:在需要插⼊分隔符的⽅框内,选择菜单:Edit->Inrt-> Separator line 即可插⼊分隔符;
2.4). 下⾯是ALV中的标准⼯具的名称、代码、图标名称、快捷键:
名称代码图标名称快捷键
刷新REFRESH ICON_REFRESH F8(可随便更改)
导出为EXCEL表格EXCEL⽆Shift-F8(可随便更改)
ABC 分析&ABC ICON_ABC Ctrl-F1
按升序排列&OUP ICON_SORT_UP Ctrl-F4
设置过滤器&ILT ICON_FILTER Ctrl-F5
总计&UMC ICON_SUM Ctrl-F6
邮件查收件%SL ICON_MAIL Ctrl-F7
更改布局…&OL0ICON_ALV_VARIANTS Ctrl-F8
选择布局…&OAD ICON_ALV_VARIANT_CHOOSECtrl-F9
保存布局…&AVE ICON_ALV_VARIANT_SAVE Ctrl-F10
信息&INFO ICON_INFORMATION Ctrl-F12
明细&ETA ICON_SELECT_DETAIL Ctrl-Shift-F3
按降序排列&ODN ICON_SORT_DOWN Ctrl-Shift-F4
删除过滤器&ILD ICON_FILTER_UNDO Ctrl-Shift-F5
⼩计&SUM ICON_INTERMEDIATE_SUM Ctrl-Shift-F6
Microsof&VEXCEL ICON_XLS Ctrl-Shift-F7
字处理&AQW ICON_WORD_PROCESSING Ctrl-Shift-F8
本地⽂件%PC ICON_EXPORT Ctrl-Shift-F9
打印预览&RNT_PREV ICON_LAYOUT_CONTROL Ctrl-Shift-F10
图形&GRAPH ICON_GRAPHICS Ctrl-Shift-F11
2.5). ⼀般情况下,可以快速拷贝标准程序的菜单栏,再进⾏修改、筛选;
操作步骤如下:
01). 进⼊ SE80,打开 Repository Information System;
02). 打开路径: Repository Information System-> Program Library->Program SubObjects->GUI Status;
03). 在右边屏幕的程序名称(Program Name)输⼊框内输⼊标准程序名称:SAPLKKBL,然后执⾏;
土味情话短句
04). 在输出的列表中,找到 STANDARD 或 STANDARD_FULLSCREEN:
alv_gui_status
05).双击进⼊菜单编辑后,拷贝到需要⽤到的程序中即可。
标注:步骤1:在程序上右键-创建-GUI状态
步骤2:报表
步骤3:附加 -调整模板
步骤4:在程序填写 SAPLKKBL 在状态填写 STANDARD_FULLSCREEN
完成标准按钮添加
3. I_CALLBACK_USER_COMMAND 参数属性
响应菜单项及其相应事件,捕捉点击相应的按钮或双击等操作的 Code(FCode);
参数类型为:SLIS_FORMNAME,与 I_CALLBACK_PF_STATUS_SET 参数⼀样,为定义的⼦ FORM,不显式调⽤;如:
i_callback_ur_command = 'FRM_ ALV_USER_COMMAND'
Form 的定义为:
*&---------------------------------------------------------------------*
*& Form FRM_ALV_USER_COMMAN
*&---------------------------------------------------------------------*
FORM frm_alv_ur_command USING p_ucomm TYPE sy-ucomm
p_rs_lfield TYPE slis_lfield.
CASE p_ucomm.
WHEN '&IC1' . " 判断⽤户的动作
"读取⽤户点击的当前⾏的⼀⾏内容
READ TABLE i_tab INTO wa_tab INDEX p_rs_lfield-tabindex .
IF p_rs_lfield-fieldname EQ 'CITYFROM'.
"判断⽤户点击的是哪⼀列
IF NOT wa_tab-cityfrom IS INITIAL .
PERFORM frm_show_detail USING p_rs_lfield . " 显⽰明细猫的肢体语言
ENDIF.
ELSEIF p_rs_lfield-fieldname EQ 'TCODE' .
IF NOT wa_tab-tcode IS INITIAL .
PERFORM frm_call_tran USING p_rs_lfield . " 调⽤其他事务
ENDIF .
ELSEIF p_rs_lfield-fieldname EQ 'ICON_FOLDER' .
PERFORM frm_open_folder USING p_rs_lfield . " 打开⽂件
ENDIF.
CLEAR wa_tab.
多罗罗动漫WHEN '&SAVE_DATA' .
PERFORM frm_save_data . " 保存数据
WHEN 'PRINT' .
PERFORM frm_print_data. " 打印数据
WHEN 'EXCEL' .
PERFORM frm_export . " 导出数据
ENDCASE.
p_rs_lfield-refresh = 'X' . " 当⽤户在显式界⾯上对数据进⾏修改时,同时内表中的数据也随之刷新
ENDFORM. " frm_alv_ur_command
其中,标准按钮的FCode,可以通过类 CL_GUI_ALV_GRID 中的 Attributes 查看;
操作步骤:
01). 进⼊事务码SE24,输⼊类名称:CL_GUI_ALV_GRID,点击显⽰( Display );
02). 切换到 Attributes 标签,找到⾃⼰需要的”属性”和”初始值”,这个初始值就是我们要找的标准按钮的FCODE;
3.1 热点链接
热点链接,即中的 hotspot 属性;
设置之后,当⽤户点击带有热点的字段时,就会触发 Subroutine(FRM_USER_COMMAND)中的动作;
对于热点链接,所对应的FCode为 “&IC1“;
⽰例如下:
lv_pos = lv_pos + 1 .
wa_fieldcat-col_pos = lv_pos .
wa_fieldcat-fieldname = 'MATNR' .
wa_fieldcat-scrtext_l = '物料编号'.
wa_fieldcat-fix_column = 'X' .
wa_fieldcat-hotspot = 'X' . " 热点,链接⽤
APPEND wa_fieldcat TO i_fieldcat .
CLEAR wa_fieldcat.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_USER_COMMAND
*&---------------------------------------------------------------------*
FORM frm_alv_ur_command USING p_ucomm TYPE sy-ucomm
p_rs_lfield TYPE slis_lfield .
CASE p_ucomm.
WHEN '&IC1' . "判断⽤户的动作
"读取⽤户点击的当前⾏的⼀⾏内容
READ TABLE i_tab INTO wa_tab INDEX p_rs_lfield-tabindex .
IF p_rs_lfield-fieldname EQ 'MATNR'. " 判断⽤户点击的是哪⼀列
IF NOT wa_tab-matnr IS INITIAL .
………
ENDIF.
道路交通安全宣传ELSEIF p_rs_lfield-fieldname EQ 'TCODE' .
IF NOT wa_tab-tcode IS INITIAL .
PERFORM frm_call_tran USING p_rs_lfield. " 调⽤其他事务
ENDIF .
ENDIF.
CLEAR wa_tab.
ENDCASE.
p_rs_lfield-refresh = 'X'.
ENDFORM. " frm_alv_ur_command
3.2 显⽰明细
在使⽤ REUSE_ALV_GRID_DISPLAY_LVC 时,会发现使⽤ REUSE_ALV_GRID_DISPLAY 时的双击显⽰⾏明细功能没有了;这是标准程序决定的,REUSE_ALV_GRID_DISPLAY_LVC 已经取消了双击显⽰⾏明细功能。
当然,也可以点击⼯具栏中的放⼤镜按钮,直接查看明细;
如若想要实现双击显⽰明细,则可以直接执⾏FCode:&ETA调⽤标准功能:
*&---------------------------------------------------------------------*
*& Form FRM_ALV_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PA_UCOMM text
* -->PS_SELFIELD text
*----------------------------------------------------------------------*
FORM frm_alv_ur_command USING pa_ucomm TYPE sy-ucomm
ps_lfield TYPE slis_lfield.
CASE pa_ucomm.
WHEN '&IC1'. "双击
pa_ucomm = '&ETA'. "查看明细
ENDCASE.
ENDFORM. " FRM_ALV_USER_COMMAND
柳树的介绍
3.3 调⽤其他事务
*&---------------------------------------------------------------------*
*& Form frm_alv_call_tran
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_RS_SELFIELD text
*----------------------------------------------------------------------*
FORM frm_alv_call_tran USING p_rs_lfield TYPE slis_lfield .
SET PARAMETER ID 'LIB' FIELD p_rs_lfield-value.
超级女警察CALL TRANSACTION 'SE37' AND SKIP FIRST SCREEN.
ENDFORM. " frm_alv_call_tran
其中,”LIB“是指:参数ID(PARAMETER ID)。
查找⽅法:
01). ⽤⼀个事务码进⼊屏幕界⾯,在输⼊框内按 F1;
02). 在弹出来的界⾯中点击”技术信息”按钮,在字段数据的最后⼀⾏,即为参数ID;
“SE37″是指我们要调⽤的事务代码,AND SKIP FIRST SCREEN 表⽰跳过第⼀屏屏幕;
4. I_CALLBACK_TOP_OF_PAGE / I_CALLBACK_HTML_TOP_OF_PAGE 参数属性
I_CALLBACK_TOP_OF_PAGE 与 I_CALLBACK_HTML_TOP_OF_PAGE 参数属性都⽤于书写 ALV抬头标题信息,