SAP ABAP筆記: 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

 

注意:

   顏色設置中有優先級順序,他們是單元格--->行--->列.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM