`
zhangdaiscott
  • 浏览: 406238 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8fb25857-16b4-3681-ab5e-e319f45c42a8
Jeecg快速开发平台
浏览量:0
文章分类
社区版块
存档分类

一个ALV(OO)的实例

 
阅读更多

个人感觉还是OO的方法较简单容易理解。这个实例,包含了grid形式全屏显示, list显示 和 grid在容器里显示的三种情况。

实例需要定义一个screen 0100 ,包含一个名为‘CONTAINER’的容器。第一种情况下实现了页眉页脚的显示,对列标题修改,选定行 列以及单元格。

ReportYY_ALV_TEST .
*变量定义
TYPESty_spfliTYPEspfliOCCURS0.
DATA:gr_tableTYPEREFTOcl_salv_table,
gr_functTYPEREFTOcl_salv_functions,
gr_columnstypereftocl_salv_columns_table,
gr_columntypereftoCL_SALV_COLUMN_table.
*选择屏幕设计
SELECTION-SCREENBEGINOFBLOCKblkWITHFRAME.
PARAMETERS:p_fullRADIOBUTTONGROUPgp,
p_listRADIOBUTTONGROUPgp,
p_gridRADIOBUTTONGROUPgp.
SELECTION-SCREENENDOFBLOCKblk.
*----------------------------------------------------------------------*
*CLASSlcl_alvDEFINITION
*----------------------------------------------------------------------*
*ALV操作类(定义)
*----------------------------------------------------------------------*
CLASSlcl_alvDEFINITION.
PUBLICSECTION.
METHODS:getdata"取得要显示的数据
RETURNINGvalue(lt_tab)TYPEty_spfli,
alv_full"全屏Grid列表处理方法
IMPORTINGvalue(lt_tab)TYPEty_spfli,
alv_list"普通List处理方法
IMPORTINGvalue(lt_tab)TYPEty_spfli,
alv_grid"在自定义屏幕上显示的列表
IMPORTINGvalue(lt_tab)TYPEty_spfli,
main."主方法
ENDCLASS."lcl_alvDEFINITION
*----------------------------------------------------------------------*
*CLASSlcl_alvIMPLEMENTATION
*----------------------------------------------------------------------*
*ALV操作类(实现)
*----------------------------------------------------------------------*
CLASSlcl_alvIMPLEMENTATION.
*取得要显示的数据
METHODgetdata.
SELECT*INTOTABLElt_tabFROMspfli.
ENDMETHOD."getdata
*输出全屏网格列表的方法
METHODalv_full.
DATA:lr_selectionsTYPEREFTOcl_salv_selections,
lt_columnTYPEsalv_t_column,
lt_rowTYPEsalv_t_row,
lt_cellTYPEsalv_t_cell,
ls_cellTYPEsalv_s_cell.
DATA:lr_gridTYPEREFTOcl_salv_form_layout_grid,
lr_grid2TYPEREFTOcl_salv_form_layout_grid,
lr_textTYPEREFTOcl_salv_form_text,
lr_actionTYPEREFTOcl_salv_form_action_info,
lr_headerTYPEREFTOcl_salv_form_header_info,
lr_labelTYPEREFTOcl_salv_form_label.
"创建实例
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table=gr_table
CHANGING
t_table=lt_tab
).
CATCHcx_salv_msg.
ENDTRY.
"显示列表
gr_funct=gr_table->get_functions()."<<此行和下一行用來顯示標題的功能按鈕
gr_funct->set_all(Abap_True).">>
gr_columns=gr_table->get_columns().
gr_columns->set_optimize('X').
gr_column?=gr_columns->Get_Column('PERIOD')."<<此行和下一行來隱藏'PERIOD'欄位
gr_column->SET_VISIBLE(abap_false).">>
gr_column?=gr_columns->Get_Column('DISTANCE')."<<此行和下一行設置列標題顯示名
gr_column->SET_LONG_TEXT('飛行距離').">>
"取得类CL_SALV_SELECTIONS的实例
lr_selections=gr_table->get_selections().
"设置选择模式
lr_selections->set_selection_mode(if_salv_c_selection_mode=>row_column).
"选择列
APPEND'FLTIME'TOlt_column.
APPEND'DISTANCE'TOlt_column.
lr_selections->set_selected_columns(lt_column).
"选择行
APPEND3TOlt_row.
APPEND4TOlt_row.

lr_selections->set_selected_rows(lt_row).
"选择一个单元格
ls_cell-row=7.
ls_cell-columnname='CITYFROM'.
lr_selections->set_current_cell(ls_cell).
"页眉页脚
CREATEOBJECT:lr_grid,lr_grid2.
lr_header=lr_grid->create_header_information(
row=1
column=1
text='HeaderInformation'
).
lr_label=lr_grid->create_label(
row=2
column=1
text='Label'
).
lr_action=lr_grid->create_action_information(
row=3
column=1
text='ActionInformation'
).

lr_text=lr_grid->create_text(
text='text'
row=4
column=1
).
gr_table->set_top_of_list(lr_grid).
lr_text=lr_grid2->create_text(
text='endofpage'
row=1
column=1
).
gr_table->set_end_of_list(lr_grid2).
""弹出窗口设置
"gr_table->set_screen_popup(
"start_column=1
"end_column=120
"start_line=1
"end_line=20).
gr_table->display().
ENDMETHOD."alv_ful
*输出全屏普通列表的方法
METHODalv_list.
DATA:lr_displayTYPEREFTOcl_salv_display_settings.
"创建实例
TRY.
cl_salv_table=>factory(
EXPORTING
list_display='X'
IMPORTING
r_salv_table=gr_table
CHANGING
t_table=lt_tab
).
CATCHcx_salv_msg.
ENDTRY.
"显示列表
gr_funct=gr_table->get_functions().
gr_funct->set_all('X').
gr_columns=gr_table->get_columns().
gr_columns->set_optimize('X').
"设置ALV的显示样式
lr_display=gr_table->get_display_settings().
lr_display->set_striped_pattern('X')."设置颜色间隔显示
lr_display->set_list_header('Elliott''sALVTest')."设置ALV的抬头
lr_display->set_horizontal_lines('')."设置水平线是否显示
lr_display->set_vertical_lines('')."设置垂直线是否显示
gr_table->display().
ENDMETHOD."alv_list
*输出在自定义屏幕上的列表
METHODalv_grid.
CALLSCREEN'0100'.
ENDMETHOD."alv_grid
*主方法,整合数据
METHODmain.
DATA:lt_tabTYPETABLEOFspfli.
"取得要显示的数据
lt_tab=me->getdata().
"判断选择屏幕的选择条件调用不同的方法
CASE'X'.
WHENp_full.
me->alv_full(lt_tab).
WHENp_list.
me->alv_list(lt_tab).
WHENp_grid.
me->alv_grid(lt_tab).
ENDCASE.
ENDMETHOD."main
ENDCLASS."lcl_alvIMPLEMENTATION
*----------------------------------------------------------------------*
*MODULEstatus_0100
*----------------------------------------------------------------------*
*PBO屏幕输出前执行
*----------------------------------------------------------------------*
MODULEstatus_0100OUTPUT.
"定义变量
DATA:lr_containerTYPEREFTOcl_gui_custom_container,
lr_alv2TYPEREFTOlcl_alv,
lt_tabTYPETABLEOFspfli.
"创建容器实例
IFcl_salv_table=>is_offline()=''.
CREATEOBJECTlr_container
EXPORTING
container_name='CONTAINER'.
ENDIF.
"创建类LCL_ALV实例
CREATEOBJECTlr_alv2.
"取得列表数据
lt_tab=lr_alv2->getdata().
"创建ALV实例
TRY.
cl_salv_table=>factory(
EXPORTING
r_container=lr_container
container_name='CONTAINER'
IMPORTING
r_salv_table=gr_table
CHANGING
t_table=lt_tab
).
CATCHcx_salv_msg.
ENDTRY.
"显示ALV列表
gr_funct=gr_table->get_functions().
gr_funct->set_all(Abap_True).
gr_columns=gr_table->get_columns().
gr_columns->set_optimize('X').
gr_table->display().
"释放内存
FREElt_tab.
ENDMODULE."status_0100
*----------------------------------------------------------------------*
*MODULEuser_command_0100
*----------------------------------------------------------------------*
*PAI屏幕输出后的动作
*----------------------------------------------------------------------*
MODULEuser_command_0100INPUT.
ENDMODULE."user_command_0100
*报表执行
START-OF-SELECTION.
DATAlr_alvTYPEREFTOlcl_alv.
CREATEOBJECTlr_alv.
lr_alv->main().

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics