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 |