sap grid control

SAP CONTROL是通过SAP Control Framework来实现的,SAP系统允许通过ABAP OBJECTS来创建custom controlApplication serverAutomation client,用来在frontend驱动custom control。如果custom control要被包含在frontend中,那么frontend扮演的就是container的角色。Custom control可以是ActiveX objects或者JAVA BEANESSAP通过RFC来传递方法在frontend创建和使用custom control。通过ABAP OBJECTS在程序中implement custom controlCustom control的特点:

l         独立的二进制组件

l         通过SAPGUIfrontend本地安装

l         通过application serverfrontend传递功能

l         ABAP OBJECTS中有一个wrapper class

l         复用性强

一个SAP CONTAINER可以其他controls(比如:SAP GRID CONTROL,TREE CONTROL,SAP PICTURE OCNTROL,SAP SPLITTER CONTROL等等)SAP CONTAINER ADMINISTRATOR通过按照一个集体管理这些control并为他们提供一块物理区域用来显示这些control。每一个control都存在于container中,由于container本身也是control所以它们可以相互嵌套。有五种SAP CONTAINERS

l         SAP CUSTOMER CONTAINER:screen painterscreen或者subscreen的一块区域显示class: CL_GUI_CUSTOM_CONTAINER

l         SAP dialog box container:以模式对话框或整个屏幕显示CLASS:CL_GUI_DIAOLOGBOX_CONTAINER

l         SAP docking container:显示一个docked, resizble 非模式对话框。

l         SAP splitter container:在一个区域中对多个controls进行分组显示,也就是把这个区域分成不同的cells class: CL_GUI_SPLITTER_CONTAINER

l         SAP easy splitter container: 在两个cells显示controls。可以通过一个splitter barresizeClass: CL_GUI_EASY_SPLITTER_CONTAINER

SAP GRID control是在screen上显示list的常用控件,具有对任意字段进行排序,数据字段的汇总和冻结列等标准功能。数据收集是通过select表达式或者get event来实现的,这些记录存储在internal table中并同field description一块传递给SAP controlField description描述了每列的特性比如每列的headeroutput length。这些信息既可以在dictionary中全局定义也可以在程序本身中定义。你也可以综合使用这两种技术。SAP LINKqueryquick view的标准功能。如果定义了多个queriesquick view lists,他们会被自动压缩到一个single line并在屏幕中显示为一个long single line listSap grid control的继承层次关系:CL_GUI_OBJECT<-CL_GUI_CONTROL<-CL_GUI_ALV_GRID_BASE<-CL_GUI_ALV_GRID。在屏幕上实现alv grid的步骤:

l         通过screen painterscreen上为alv grid control创建一个区域,MY_CONTROL_AREAD的大小决定了alv grid control的大小。在PBO event中实现BACK,CANCELEXIT dialog status。在PAI EVENT中实现相应的代码

l         声明custom containersap grid control的指针变量DATA: g_custom_container TYPE REF TO cl_gui_custom_container,
      sap_grid 
TYPE REF TO cl_gui_alv_grid.

l         创建相应的对象并在对象之间建立联系  IF g_custom_container IS INITIAL.
  
CREATE OBJECT g_custom_container
      
EXPORTING container_name = 'MY_CONTROL_AREA'.
    
CREATE OBJECT sap_grid
      
EXPORTING i_parent = g_custom_container.
  
ENDIF.

l         通过程序逻辑取得需要显示的数据放到内表中,并根据需要建立field description。然后通过call screen调用屏幕。典型的调用过程如下:                                             

PBO

MODULE status_0100.

MODULE create_objects.

MODULE transfer_data.

PAI:

MODULE exit AT EXIT-COMMAND.

MODULE user_command_0100.

l         调用sap grid的方法显示数据

CALL METHOD sap_grid->set_table_for_first_display

    EXPORTING i_structure_name = ‘SFLIGHT’

    CHANGING  it_outtab        =  itab_sflight.

Field catalog存储在类型为lvc_t_fcatinternal table中,field catalog table中的每一行代表SAP GRID control的一列。

Field catalog中的fields:要显示的internal table中的字段必须在field catalog中显示要显示的字段既可以通过Dictionary reference( ref_table and ref_field )也可以直接指定一个abap dictionary data type(inttype)Column headerfield names in detail view既可以通过coltextseltext来指定。列的位置是通过col_pos来控制,如果想隐藏一列可以通过设置no_outX来实现。Icons可以在sap GRID control中显示,不过icon name必须能够被程序解释(include <icon>,而且icon必须设置为X

l         Fieldname field name in output table

l         Ref_table Name of DIC reference structure

l         Ref_field name of DIC reference field

l         Inttype Data type(c, f, I …)

l         Outputlen: column width

l         Coltext: column header

l         Seltext: field name in detail view

l         Col_pos: column position

l         No_out: column hidden

l         Icon: output column as icon

根据line type的不同,field catalog有三种创建方法

l         要显示数据的line type的字段都存在于一个global structure中,你只要把这个global structure type传递给alv grid的参数即可。Data table中不存在于global structure中的字段便不会被显示。

l         Data table line type中的字段名与global structure相同,但是你想调整global structure中某些字段的属性或者增加新的字段,或者两种情况同时存在。那么你就需要把这些字段放到field catalog table

l         没有相应的global structuredata table line type相匹配或者这些字段存在于多个global structure中,你就需要从头开始创建field catalog table了。

如果想保存变式,parameter i_varianti_save必须被传递给方法set_table_for_first_display。为了把变式唯一的分配给一个程序,program name必须通过structure gs_variant提供,program name可以有三十个字符长。如果你只传递了参数is_variant,那么只有存在的variant可以被调用,不能创建新的variant。如果你使用parameter i_save那么你必须传递一个variant structure i_variant

l         I_SAVE = SPACE No variants can be saved

l         I_SAVE = ‘U’the user can only save user specified variant

l         I_SAVE = ‘X’ the user can only save general variant

l         I_SAVE = ‘A’ the user can save both user specified and general variants

通过传递is_layoutset_table_for_first_display可以设置alv的格式,通过dictionary structure lvc_s_layo来定义layout变量。通过layout structuregrid_titledetailtitl可以设置alvheaderdetail display header。 通过layoutzebra字段可以设置zebra stripes

Set_table_for_first_display的参数

CALL METHOD sap_grid->set_table_for_first_display

    EXPORTING i_structure_name = Name of structure, table or view

              Is_variant =  display variants

              I_save = save display variant

              I_defautl = select initial layout

              Is_layout = change technical definition

              Is_print = parameters for printing on backend

              It_special_groups = groupings

              It_toolbar_excluding = hide standard functions

    CHANGING

              It_outtab = output table

              It_fieldcatalog =  Field catalog

              It_sort = sort criteria for first output display

              It_filter = filter criteria for first output display

如果用户双击alv的一个区域那么就会触发DOUBLE_CLICK事件。Export parameterdata table的相关信息,这两个parameter都是structures:

l         E_ROWTYPE LVC_S_ROW index字段表明了双击行所在internal table中的行数

l         E_COLUMN (TYPE LVC_S_COL) fieldname字段表明了所双击的位置在internal table中的字段名称。

如果一列被标识为HOT SPOT那么单击该列时就会触发HOTSPOT_CLICK事件,所传递的参数与DOUBLE_CLICK事件相同。

Event都定义在global class cl_gui_alv_grid中,可以通过这些事件在程序中实现用户交互。

Handling events的步骤

l         Definition of a local class

CLASS lcl_ils DEFINITION

    PUBLIC SECTION.

        METHODS on_dbclick FOR EVENT double_click

            OF CL_GUI_ALV_GRID IMPORTING e_row.

ENDCLASS.

l         Implementing a local class with handler method

CLASS lcl_ils IMPLEMENTATION.

    METHOD on_dbclick.

        (own functionality)

    ENDMETHOD.

ENDCLASS.

l         Generating the object

DATA alv_dbclick TYPE REF TO lcl_ils.

CREATE OBJECT alv_dbclick.

l         Registration of handler method for event double_click

SET HANDLER alv_dbclick->on_dbclick FOR alv_grid.

SAP GRID CONTROL DEMO PROGRAMS:

BCALV_GRID_01

Print list events

BCALV_GRID_02

Basic and detail lists with an event

BCALV_GRID_03

Detail list in a modal dialog box

BCALV_GRID_04

Threshold value handling

BCALV_GRID_05

Adding your own function to the application toolbar

BCALV_GRID_06

Context menus

BCALV_GRID_07

Adding your own menu to the application toolbar

BCALV_GRID_08

Menu with standard pushbutton

BCALV_GRID_09

Options for managing display variants

BCALV_GRID_10

Initial use of display variants

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章