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

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