SAP 对象ALV开发相关细节(ALV资料四)

ALV GRID CONTROL (ALV网格控制器)

ALV GRID CONTROL使用了控制器技术以实现艺术性的屏幕显示,象所有的控制器一样,ALV GRID CONTROL通过系统中的一个全局的类提供方法,以响应它的动作。

使用了ABAP的对象以后,列表是通过ALV的一个实例(INSTANCE)来显示的,程序员可以使用ABAP对象的事件管理.

3.2、ALV GRID CONTROL 实例

ALV GRID实例的定义,参照CL_GUI_ALV_GRID类

data ALV_GRID1 type ref to cl_gui_alv_grid.

3.3、简单对象ALV的开发流程

3.3.1、OO的ALV GRID必须存在于一个容器当中,就是FUNCTION的ALV,其实也是一样的,底层也是使用CL_GUI_ALV_GRID这个类的。首先ALV的显示需要有几个先决条件:

1,字段目录,这个是必须的,如果没有这个参数,参考一个数据字典也是可以的,就是参数I_STRUCTURE_NAME.

2.存放数据的内表,最好内表的结构和字段目录是一致的,否则可能会出现一些无法预知的错误,当然你说我非要不一样,那也不一定会出现错误.我建议是最好一样的.

这2个是必须的,布局的话,应该是可以不设置的,使用默认的就可以了.

第一步:创建个SCREEN,在屏幕上创建个容器,CONTAINER.定义变量.

DATA:
WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
WCL_ALV TYPE REF TO CL_GUI_ALV_GRID .

*--- 存放字段目录的内表
DATA gt_fieldcat TYPE lvc_t_fcat .

*--- 布局结构
DATA gs_layout TYPE lvc_s_layo .

*----声明需要显示的内表(以SFLIGHT为例)
DATA BEGIN OF gt_list OCCURS 0 .
INCLUDE STRUCTURE SFLIGHT .
DATA END OF gt_list .

第二步: 创建ALV这个对象,它的父组件是那个容器.

在PBO中写入如下代码:
PROCESS BEFORE OUTPUT .
MODULE display_alv .

创建DISPLAY_ALV的MODULE后,写下如下代码:
MODULE display_alv OUTPUT .
PERFORM display_alv .
ENDMODULE .

在FORM DISPLAY_ALV中,判断ALV实例是否存在,如果不存在,则创建:
IF WCL_ALV IS INITIAL .
CREATE OBJECT: WCL_CONTAINER
EXPORTING
CONTAINER_NAME = \'ALV_CON\'.
CREATE OBJECT WCL_ALV
EXPORTING
I_PARENT = WCL_CONTAINER.

*-----准备获取字段目录
PERFORM prepare_field_catalog CHANGING gt_fieldcat .

*-----设置布局
PERFORM prepare_layout CHANGING gs_layout .

*-----显示ALV
CALL METHOD gr_alvgrid->set_table_for_first_display

*----刷新ALV
CALL METHOD gr_alvgrid->refresh_table_display

第三步,获取要显示数据的字段目录.有两种方式.

1.手动创建

FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .
DATA ls_fcat type lvc_s_fcat .
ls_fcat-fieldname = \'CARRID\' .
ls_fcat-inttype = \'C\' .
ls_fcat-outputlen = \'3\' .
ls_fcat-coltext = \'Carrier ID\' .
ls_fcat-seltext = \'Carrier ID\' .
APPEND ls_fcat to pt_fieldcat .
CLEAR ls_fcat .
ENDFORM.

2.半自动的创建

FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .
DATA ls_fcat type lvc_s_fcat .

CALL FUNCTION \'LVC_FIELDCATALOG_MERGE\'
EXPORTING
    i_structure_name = \'SFLIGHT\'
CHANGING
    ct_fieldcat = pt_fieldcat[]
EXCEPTIONS
    inconsistent_interface = 1
    program_error = 2
    OTHERS = 3.

IF sy-subrc <> 0.
*--Exception handling
ENDIF.

LOOP AT pt_fieldcat INTO ls_fcat .
CASE pt_fieldcat-fieldname .
WHEN \'CARRID\' .
ls_fcat-outpulen = \'10\' .
ls_fcat-coltext = \'Airline Carrier ID\' .
MODIFY pt_fieldcat FROM ls_fcat .
WHEN \'PAYMENTSUM\' .
ls_fcat-no_out = \'X\' .
MODIFY pt_fieldcat FROM ls_fcat .
ENDCASE .
ENDLOOP .
ENDFORM .

第四步,设置布局

FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.
ps_layout-zebra = \'X\' .
ps_layout-grid_title = \'Flights\' .
ps_layout-smalltitle = \'X\' .
ENDFORM. " prepare_layout

第五步,排除不需要的标准按钮(可选,这个是第一种方法,还有另外一种,在添加自定义的按钮的时候介绍)

在你的ALV上,如果你想排除一些你不想要的标准按钮,你可以把需要排除的按钮填入到表UI_FUNCTIONS中,然后传给set_table_for_first_display方法的参数"IT_TOOLBAR_EXCLUDING".这些按钮的功能码一般都可以通过查看类cl_gui_alv_grid的常量属性中获取到,或者自己加个断点,在after_user_command事件中.

如果你要隐藏全部的工具条,你可以把layout中的no_toolbar设置为"X".

FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions .
DATA ls_exclude TYPE ui_func.
ls_exclude = cl_gui_alv_grid=>mc_mb_sum .
APPEND ls_exclude TO pt_exclude.
ENDFORM .

以上步骤,详见“示例程序”部分:示例二(对象ALV)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ᝰ随心ꦿེএ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值