SAP ALV的使用通常有三种方式,分别为Funtion ALV 通常是指:REUSE_ALV_GRID_DISPLAY[ _LVC];然后OO ALV则会用到object:CL_GUI_ALV_GRID;OO SALV则会用到 CL_SALV_TABLE等一系列Object。
Function ALV:Function ALV 是基于函数的(Function-based)ALV 技术,使用函数模块和功能代码块实现. Function ALV一般有grid和list两种,grid以网格显示(REUSE_ALV_GRID_DISPLAY[ _LVC]),list以表格显示(REUSE_ALV_LIST_DISPLAY),两者的工具栏有一点不同。
OO ALV:使用面向对象的方法创建的ALV,需要创建一个容器,然后将 cl_gui_alv_grid 分配给这个容器,它存在很多的事件,这些实现需要注册这些事件处理方法,但是ALV的布局参数不用依靠Object来设置,和function一样,还是依靠函数。
OO SALV:(Simple ALV Grid Control),SALV也称为New ALV. 它是面向对象创建ALV的一种方式,但不提供编辑的功能,(当你需要编辑的时候,可以通过SALV适配器调用CL_GUI_ALV_GRID修改为编辑模式),一般情况下SALV是不需要创建容器的,但是ALV的布局也是需要通过Object来控制。
SALV 提供了更多的功能和样式选项,允许开发人员通过方法调用来设置排序、筛选、分组、求和、合计等功能,同时可以改变行列样式、添加自定义按钮和菜单等。
OO SALV主要是通过一个类CL_SALV_TABLE来实现的.系统里的demo为:SALV_DEMO_*
Function ALV 示例代码:
REPORT ztest_function_alv.
* 数据定义和选择
DATA: it_sflight TYPE TABLE OF sflight,
wa_sflight TYPE sflight.
SELECT * FROM sflight INTO TABLE it_sflight.
* 调用 Function ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_PF_STATUS'
TABLES
t_outtab = it_sflight.
form frm_set_pf_status using extab type slis_t_extab.
set pf-status 'STANDARD_FULLSCREEN' of program 'SAPLKKBL'.
endform.
SALV 示例代码
REPORT ZSALV-01.
*以前都是通过函数“REUSE_ALV_GRID_DISPLAY”来显示列表,这种方式是面向过程的
*现在有另外一种面向对象化的方式来显示列表,函数REUSE_ALV_GRID_DISPLAY可以做到的它也能够做到。
*它主要是通过一个类CL_SALV_TABLE来实现的.
*下面让我们来实现最简单的ALV列表。
"1、取得数据
SELECT * INTO TABLE @DATA(LT_VBAK) FROM VBAK UP TO 20 ROWS.
"2、调用类CL_SALV_TABLE的静态方法Factory()创建类的实例。
DATA: S_ALV TYPE REF TO CL_SALV_TABLE."定义参考类型
TRY.
CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE = S_ALV CHANGING T_TABLE = LT_VBAK ).
CATCH CX_SALV_MSG.
ENDTRY.
"3、取得实例之后再调用方法Display()显示列表
S_ALV->DISPLAY( ).
OO LAV示例:
data stbl type lvc_s_stbl.
data: ref_grid type ref to cl_gui_alv_grid.
data:gt_events type slis_t_event,
gs_events like line of gt_events.
data: l_grid_settings type lvc_s_glay.
data: rs_selfield type slis_selfield.
data: f4_flag(1).
data: lt_sbz like table of zhr_sbz,
ls_sbz type zhr_sbz.
class lcl_event_receiver definition.
public section.
methods:
handle_f4
for event onf4 of cl_gui_alv_grid
importing e_fieldname
es_row_no
er_event_data
et_bad_cells.
endclass.
*data gt_event_receiver type ref to lcl_event_receiver .
class lcl_event_receiver implementation.
method handle_f4.
* 窗口时间参数的自定义f4检索帮助
case e_fieldname.
when 'SCHKZ'. "内表字段名称
perform f4_help_schkz using e_fieldname
es_row_no.
when 'MASSG'. "内表字段名称
perform f4_help_massg using e_fieldname
es_row_no.
endcase.
er_event_data->m_event_handled = 'X'.
call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'
importing
e_grid = ref_grid.
** 设置后,alv稳定刷新
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
call method ref_grid->refresh_table_display
exporting
is_stable = stbl.
endmethod. "HANDLE_F4
endclass.
form frm_disp_data tables p_im_data structure wa_data.
perform get_fieldcat.
perform get_layout.
data:msg type lvc_title.
data:row type i .
describe table p_im_data lines row.
move row to msg.condense msg.
concatenate '记录数:' msg into msg .
gs_events-name = 'CALLER_EXIT'.
gs_events-form = 'FM_BUTTON'.
append gs_events to gt_events.
* l_grid_settings-edt_cll_cb = 'X' .
call function 'REUSE_ALV_GRID_DISPLAY_LVC'
exporting
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_PF_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
* i_grid_settings = l_grid_settings
i_grid_title = msg
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
i_default = 'X'
i_save = 'A'
it_events = gt_events
tables
t_outtab = p_im_data
exceptions
program_error = 1
others = 2.
endform.
form get_fieldcat .
define addcol.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = &1.
wa_fieldcat-scrtext_s = &2.
wa_fieldcat-scrtext_m = &2.
wa_fieldcat-scrtext_l = &2.
wa_fieldcat-edit = &3.
wa_fieldcat-checkbox = &4.
wa_fieldcat-key = &5.
wa_fieldcat-rollname = &6.
* wa_fieldcat-NO_ZERO = 'X'.
if wa_fieldcat-fieldname = 'PERNR'.
wa_fieldcat-NO_ZERO = 'X'.
ENDIF.
if wa_fieldcat-fieldname = 'ZSBZ'.
wa_fieldcat-DD_OUTLEN = '20'.
ENDIF.
if wa_fieldcat-fieldname = 'MASSN'.
wa_fieldcat-F4AVAILABL = 'X'.
wa_fieldcat-REF_TABLE = 'PA0000'.
wa_fieldcat-REF_field = 'MASSN'.
ENDIF.
if wa_fieldcat-fieldname = 'WERKS'.
wa_fieldcat-F4AVAILABL = 'X'.
wa_fieldcat-REF_TABLE = 'PA0001'.
wa_fieldcat-REF_field = 'WERKS'.
wa_fieldcat-seltext = '成本公司'.
ENDIF.
append wa_fieldcat to gt_fieldcat.
end-of-definition.
addcol 'SEL' '选择' 'X' 'X' 'X' ''.
addcol 'PERNR' '' '' '' '' 'PERNR_D'.
addcol 'NACHN' '姓名' '' '' '' ''.
addcol 'ICNUM' '身份证号码' '' '' '' ''.
addcol 'WERKS' '成本公司' 'X' '' '' ''.
addcol 'BEGDA' '入职日期' '' '' '' ''.
endform.
form get_layout .
gs_layout-cwidth_opt = 'X'. "清单格式优化模式:自动
gs_layout-zebra = 'X'.
gs_layout-stylefname = 'FIELD_STYLE'. "可编辑控制
gs_layout-no_rowmark = 'X'. "无缺省列表选择按钮
gs_layout-ctab_fname = 'CELLCOLORS'.
endform.
SAP ALV三种使用方式深度解析
4144

被折叠的 条评论
为什么被折叠?



