SAP CONTROL是通过SAP Control Framework来实现的,SAP系统允许通过ABAP OBJECTS来创建custom control。Application server是Automation client,用来在frontend驱动custom control。如果custom control要被包含在frontend中,那么frontend扮演的就是container的角色。Custom control可以是ActiveX objects或者JAVA BEANES。SAP通过RFC来传递方法在frontend创建和使用custom control。通过ABAP OBJECTS在程序中implement custom control。Custom control的特点:
l 独立的二进制组件
l 通过SAPGUI在frontend本地安装
l 通过application server向frontend传递功能
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 painter的screen或者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 bar来resize。Class: CL_GUI_EASY_SPLITTER_CONTAINER。
SAP GRID control是在screen上显示list的常用控件,具有对任意字段进行排序,数据字段的汇总和冻结列等标准功能。数据收集是通过select表达式或者get event来实现的,这些记录存储在internal table中并同field description一块传递给SAP control。Field description描述了每列的特性比如每列的header和output length。这些信息既可以在dictionary中全局定义也可以在程序本身中定义。你也可以综合使用这两种技术。SAP LINK是query和quick view的标准功能。如果定义了多个queries或quick view lists,他们会被自动压缩到一个single line并在屏幕中显示为一个long single line list。Sap grid control的继承层次关系:CL_GUI_OBJECT<-CL_GUI_CONTROL<-CL_GUI_ALV_GRID_BASE<-CL_GUI_ALV_GRID。在屏幕上实现alv grid的步骤:
l 通过screen painter在screen上为alv grid control创建一个区域,MY_CONTROL_AREAD的大小决定了alv grid control的大小。在PBO event中实现BACK,CANCEL和EXIT dialog status。在PAI EVENT中实现相应的代码
l 声明custom container和sap 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_fcat的internal 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 header和field names in detail view既可以通过coltext和seltext来指定。列的位置是通过col_pos来控制,如果想隐藏一列可以通过设置no_out为X来实现。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 structure与data table line type相匹配或者这些字段存在于多个global structure中,你就需要从头开始创建field catalog table了。
如果想保存变式,parameter i_variant和i_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_layout给set_table_for_first_display可以设置alv的格式,通过dictionary structure lvc_s_layo来定义layout变量。通过layout structure的grid_title和detailtitl可以设置alv的header和detail display header。 通过layout的zebra字段可以设置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 parameter有data table的相关信息,这两个parameter都是structures:
l E_ROW(TYPE 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 |