SAP OO ALV学习分享

ALV GRID CONTROL实例

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

   

     data ALV_GRID1 type refto cl_gui_alv_grid.

 

  ALV GRID继承结构:

ALV GRID相关的几个控制结构
    1.字段目录 [Field catalog]

       字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.

       常用的控制字段如下:(下面的示例将说明这些字段的使用,参考STRUCTURE LVC_S_FCAT)

     2.布局控制[layout]

 

   布局是用来控制整个ALV的一个布局,比如ALV的标题,是否可编辑,行颜色,列颜色.

   参照ALV的控制结构[LVC_S_LAYO],以后的例子我将详细介绍如何设置行颜色和列颜色.

   详细的结构说明

 

3.打印和排序,过滤控制

 

   打印的参数控制请参考结构 [LVC_S_PRNT]

   排序的参数控制请参考结构[LVC_S_SORT]

   过滤的参数控制请参考结构[LVC_S_FILT]

 

 这里不再一一解释,进入中文版本,里面应该也有解释的,虽然一些不是很清楚.

 

五.编写简单的ALV程序.

 

   首先这里就不详细介绍DIALOG的用法了.

 

   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 BEFOREOUTPUT .             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 CHANGINGgt_fieldcat .

       *-----设置布局

PERFORM prepare_layout CHANGING gs_layout .

       *-----显示ALV

CALL METHODgr_alvgrid->set_table_for_first_display EXPORTING

* I_BUFFER_ACTIVE =

* I_CONSISTENCY_CHECK =

* I_STRUCTURE_NAME =

* IS_VARIANT =

* I_SAVE =

* I_DEFAULT = 'X'

is_layout = gs_layout

* IS_PRINT =

* IT_SPECIAL_GROUPS =

* IT_TOOLBAR_EXCLUDING =

* IT_HYPERLINK =

CHANGING

it_outtab = gt_list[]

it_fieldcatalog = gt_fieldcat

* IT_SORT =

* IT_FILTER =

EXCEPTIONS

invalid_parameter_combination = 1

program_error = 2

too_many_lines = 3

OTHERS = 4 .

ELSE .

        *----刷新ALV

CALL METHODgr_alvgrid->refresh_table_display *

EXPORTING * IS_STABLE = *

I_SOFT_REFRESH =

EXCEPTIONS

finished = 1

OTHERS = 2 .

IF sy-subrc <> 0. *--异常处理 ENDIF.

ENDIF .

 

 

下面是一段示例代码:

 

复制代码
FORM handle_data_changed USINGir_data_changed

                       TYPE REF TO cl_alv_changed_data_protocol.

 DATA: ls_mod_cell TYPE lvc_s_modi,

       Lv_value   TYPE lvc_value.

 

 SORT ir_data_changed->mt_mod_cellsBY row_id.

 LOOP ATir_data_changed->mt_mod_cells

                       INTO ls_mod_cell

                      WHERE fieldname = 'SEATSMAX'.

CALLMETHOD ir_data_changed->get_cell_value

    EXPORTING i_row_id = ls_mod_cell-row_id

                I_fieldname = 'CARRID'

    IMPORTING e_value    = lv_value.

 IFlv_value = 'THY' AND ls_mod_cell-value > '500'.

  CALL METHOD ir_data_changed->add_protocol_entry

        EXPORTING 

           I_msgid = 'SU'

           I_msgno = '000'

           I_msgty = 'E'

           I_msgv1 = 'This number can not exceed 500 for '

           I_msgv2 = lv_value

           I_msgv3 = 'The value is et to ''500'''

           I_fieldname = ls_mod_cell-fieldname

           I_row_id = ls_mod_cell-rowid.

  CALL METHOD ir_data_changed->modify_cell

        EXPORTING i_row_id = ls_mod_cell-row_id

                    I_fieldname = ls_mod_cell-fieldname

                    I_value = '500'.

 ENDIF.

 ENDLOOP.

ENDFORM.
复制代码

附录:ABAP颜色代码

ABAP中的颜色代码是由4位字都组成的

Cxyz

C:color的简写,颜色代码均以C开头

   x:标准色代码,SAP中一共有7个标准色

   y:反转颜色启用/关闭 1/0

   z:增强颜色启用/关闭 1/0

注意:

   颜色设置中有优先级顺序,他们是单元格--->行--->列.

 

猜你喜欢

转载自www.cnblogs.com/jay453084567/p/9138289.html
oo