ALV常用參數的詳細描述


 




調用功能模塊:
 
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 

    EXPORTING 

      i_interface_check        = ''                      接口一致性檢查 

      i_callback_program       = sy-repid                當前程序名 

      is_layout                = layout                  輸出樣式 

      it_fieldcat              = fieldcat[]              字段定義描述表 

      i_callback_pf_status_set = 'PF_STATUS_SET'         觸發事件調用子程序 

      i_callback_user_command  = 'USER_COMMAND'          鼠標事件操作子程序 

      it_events                = i_events[]              出口程序觸發事件 

       i_callback_html_top_of_page  = 'ALV_TOP_OF_PAGE'   ALV輸出表頭設置 

i_grid_settings = wl_lvc_s_glay                    打印表頭設置 

      it_sort = sortable[]                               排序設置 

TABLES 

      t_outtab                 = ig_out 

EXCEPTIONS 

  program_error            = 1 

OTHERS                   = 2. 

 
 
常用屬性:(賦值’’中內容必須為大寫) 
 
1.  Fieldcat 

data: fieldcat type slis_t_fieldcat_alv with header line. 

it_fieldcat              = fieldcat[] 

屬性
  (用來定義表單中的各個列的相關信息)
 
   Fieldcat-col_pos = n.                  輸出列
 
   Fieldcat-tabname = ‘FIELDNAME’.      對應的內表字段名
 
Fieldcat-seltext_s/m/l = ‘列名’.     輸出列文本  (_s:短文本    _l:長文本)
 
   Fieldcat-emphasize = ‘CX10’.    帶有顏色的高亮列 (其中X=(1-7)   顏色同format)
 
   Fieldcat-hotspot = ‘X’.           作為熱點顯示   可觸發鼠標觸發事件
 
   Fieldcat-currency = ‘CURRKEY’.   表 TCURX 中的貨幣名稱
 
   Fieldcat-quantity(3)                計量單位
 
   Fieldcat-qfieldname                參考計量單位的字段名稱
 
   Fieldcat-round = n.                四舍五入至小數位數下   n 位
 
   Fieldcat-exponent = n.             浮點數的冪指數為n
 
   Fieldcat-key = ‘X’.                關鍵字段
 
   Fieldcat-icon = ‘X’.               作為圖標輸出
 
   Fieldcat-symbol = ‘X’.             輸出作為符號
 
   Fieldcat-checkbox = ‘X’.           作為復選框輸出
 
   Fieldcat-just = SPACE, 'R', 'L', 'C'.   對齊方式
 
   Fieldcat-lzero = ‘X’.               輸出前導零
 
   Fieldcat-no_sign = ‘X’.             輸出抑制符號
 
   Fieldcat-no_zero = ‘X’.             為輸出隱藏零
 
   Fieldcat-edit_mask = SPACE, mask..  輸出為mask的模式
 
   Fieldcat-fix_column = ‘X’.           固定列
 
   Fieldcat-do_sum = ‘X’.              總計列值總和
 
   Fieldcat-no_out = ‘X’.               列不輸出
 
   Fieldcat-tech = ‘X’.                 該字段為技術字段
 
   Fieldcat-outputlen = n               列的字符寬度為n
 
   Fieldcat-decimals_out = n            能控制小數點的位數為n  

Fieldcat-datatype = C,I,N…             定義數據類型ABAP 字典中的數據類型
 
Fieldcat-inttype = C,I,N…              ABAP 數據類型(C,D,N,...)
 
2SORT
   data: sortable type slis_t_sortinfo_alv with header line.
 
it_sort = sortable[]
 
屬性
  (排序)
 
    Sortable-Fieldname        字段名
 
             Up              升序排列
 
             Down            降序排列
 
             Subtot           subtotals
 
            group           grouplevel,


 
3.  Layout
 
data: layout type slis_layout_alv . 

is_layout                = layout 

屬性 (用於定義ALV表單的相關格式、屬性) 

    info_fieldname = 'LINE_COLOR'.  設置特殊行顏色
 
(將LINE_COLOR增加到內表字段,寫'CX10'到特殊行的LINE_COLOR, X為顏色值)
 
    colwidth_optimize = ‘X’.   優化列寬設置
 
no_colhead = 'X'.         不顯示列名
 
no_vline = 'X'.            不顯示列間豎線
 
zebra                     striped pattern(有斑紋線模式)
 
    f2code = '&ETA'.          設置觸發彈出詳細信息窗口的功能碼,這里是雙擊
 
no_vline                  這個用來設置列間隔線
 
    detail_initial_lines           " show also initial lines
 
detail_popup               " show detail in popup 是否彈出詳細信息窗口
 
     detail_titlebar              設置彈出窗口的標題欄
 
     totals_text                  " text for 1st col. in total line
 
     totals_only                  " show only totals
 
     group_change_edit           " Settings by user for new group
 
     header_text                 " Text for header button
 
4.按鈕
         DATA: i_events TYPE slis_t_event WITH HEADER LINE. 

事件: 

it_events     = i_events[]    

i_callback_pf_status_set = 'PF_STATUS_SET'    

i_callback_user_command  = 'USER_COMMAND' 

出口程序觸發事件對應子程序:
 
FORM PF_STATUS_SET USING rt_extab TYPE slis_t_extab. 

FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield. 

功能代碼:              函數文本:                          圖標名稱:
 
&ETA                   細節                        ICON_SELECT_DETAIL
 
&EB9                 調用報告...                     ICON_TABLE_SETTINGS
 
&REFRESH              刷新                        ICON_REFRESH
 
&ALL                 全部選擇                      ICON_SELECT_ALL
 
&SAL                 取消全選                      ICON_DESELECT_ALL 

&OUP                按升序排列                     ICON_SORT_UP
 
&ODN                按降序排列                     ICON_SORT_DOWN 

&ILT                  設置過濾器                    ICON_FILTER 

&UMC                  總計                         ICON_SUM 

&SUM                  小計...                      ICON_INTERMEDIATE_SUM 

&RNT_PREV           打印預覽                      ICON_LAYOUT_CONTROL 

&VEXCEL            Microsoft Excel                   ICON_XLS
 
&AQW                字處理...                       ICON_WORD_PROCESSING 

%PC                   本地文件  ...                   ICON_EXPORT
 
%SL                  郵件收件人                      ICON_MAIL
 
&ABC                 ABC 分析                      ICON_ABC 

&GRAPH                圖形                         ICON_GRAPHICS 

&OL0                 更改布局...                      ICON_ALV_VARIANTS 

&OAD                選擇格式...                 ICON_ALV_VARIANT_CHOOSE 

&AVE                 保存格式...                  ICON_ALV_VARIANT_SAVE 

&INFO                  信息                      ICON_INFORMATION 

  
 
1.  ALV表頭設置 

i_callback_html_top_of_page  = 'ALV_TOP_OF_PAGE'
 
form top_of_page using cl_dd type ref to cl_dd_document.
 
語法同HTML fomat   

 
 
ALV_GRID介紹
 
一.ALV介紹  
 The ALV Grid Control (ALV = SAP List Viewer)是一個顯示列表的靈活的工具,它提供了基本功能的列表操作,也可以通過自定義來進行增強,因此可以允許你可以在大型的應用程序中使用.
   SAP提示: 在SAP的開發項目中,ALV GRID也可以作為修改和創建數據的一種工具,然而,目前這個功能只在實驗計划中使用,還沒有向客戶發布.
   下面是一個ALV GRID的圖片:
  
它包括3大部分,工具欄,標題,用於顯示數據的網格控制器.如果有必要,用戶可以隱藏標題和工具欄.
 
    ALV家族包含3中ALV工具:簡易的,兩層ALV,分等級連續的列表和樹形結構的ALV.
 
二.ALV GRID CONTROL (ALV網格控制器)
    ALV GRID CONTROL使用了控制器技術以實現藝術性的屏幕顯示,象所有的控制器一樣,ALV GRID CONTROL通過系統中的一個全局的類提供了方法,以響應它的動作.
   使用了ABAP的對象以后,列表是通過ALV的一個實例(INSTANCE)來顯示的,程序員可以使用ABAP對象的事件管理.
 
三.ALV GRID CONTROL 實例
   ALV GRID實例的定義,參照CL_GUI_ALV_GRID類
   data ALV_GRID1 type ref to cl_gui_alv_grid.
   ALV GRID繼承結構:
 
ALV_GRID介紹二(1)
四、ALV GRID相關的幾個控制結構
 
1.字段目錄  [Field catalog]
      字段目錄是用來控制ALV顯示的網格中每個字段的屬性的,比如字段的順序,對齊方式,可編輯狀態,顏色,等等.
       常用的控制字段如下:(下面的示例將說明這些字段的使用,參考STRUCTURE LVC_S_FCAT)
2 ROW_POS   ALV 控制: 輸出行 (內部使用)  
3 COL_POS ALV 控制: 輸出列 列的位置,第幾列,例如1,2,…..
4 FIELDNAME ALV 控制: 內部表字段的字段名稱 字段名稱
5 TABNAME LVC 標簽名稱 表名,如果是內表,是1
6 CURRENCY ALV 控制: 貨幣單位  
7 CFIELDNAME ALV 控制: 參考的當前單位的字段名稱  
8 QUANTITY ALV 控制: 計量單位  
9 QFIELDNAME ALV 控制: 參考計量單位的字段名稱  
10 IFIELDNAME ALV 控制: 內部表字段的字段名稱  
11 ROUND ALV 控制: ROUND 值  
12 EXPONENT ALV 控制:流動表示的指數  
13 KEY ALV 控制: 關鍵字段 關鍵字段,前面變藍色
14 KEY_SEL ALV 控制: 可以被隱藏的關鍵列 可以被隱藏的關鍵列
15 ICON ALV 控制: 作為圖標輸出 此列作為圖標輸出
16 SYMBOL ALV 控制: 輸出作為符號  
17 CHECKBOX ALV 控制: 作為復選框輸出 復選框輸出
18 JUST ALV 控制: 對齊 對齊方式:
'R': right justified
'L': left justified
'C': centered
19 LZERO ALV 控制: 輸出前導零 X'
20 NO_SIGN ALV 控制:輸出抑制符號 X',不輸出符號
21 NO_ZERO ALV 控制: 為輸出隱藏零 X',隱藏0
22 NO_CONVEXT ALV 控制: 不考慮輸出的轉換退出  
23 EDIT_MASK ALV 控制: 為輸出編輯掩碼 格式
24 EMPHASIZE ALV 控制: 帶有顏色的高亮列 列的顏色
25 FIX_COLUMN ALV 控制: 固定列  
26 DO_SUM ALV 控制: 總計列值 X',合計
 

ALV_GRID介紹二(2)
27 NO_SUM ALV 控制: 沒有總計列值 X' ,沒有合計
28 NO_OUT ALV 控制: 列沒有輸出 X' ,隱藏此列
29 TECH ALV 控制: 技術字段 X'.也是隱藏,但是有點不一樣
30 OUTPUTLEN ALV 控制: 列的字符寬度 輸出的長度
31 CONVEXIT 轉換例程  
32 SELTEXT ALV 控制: 對話功能的列標識符  
33 TOOLTIP ALV 控制: 列抬頭的工具提示  
34 ROLLNAME ALV 控制: F1 幫助的數據元素  
35 DATATYPE ABAP 字典中的數據類型 ABAP 字典中的數據類型
36 INTTYPE ABAP 數據類型(C,D,N,...) ABAP 數據類型(C,D,N,...)
37 INTLEN 以字節計的內部長度 內容的長度
38 LOWERCASE 允許/不允許小寫字母 X' 允許大小寫
39 REPTEXT 標題  
40 HIER_LEVEL ALV 控制: 內部使用  
41 REPREP ALV 控制: 價值是補充/補充接口的選擇標准  
42 DOMNAME 定義域名  
43 SP_GROUP 組代碼  
44 HOTSPOT ALV 控制: 單擊敏感 X',下面出現下划線,響應單擊
45 DFIELDNAME ALV 控制: 數據庫中列組的字段名稱  
46 COL_ID ALV 控制: 列 ID  
47 F4AVAILABL 字段有輸入幫助嗎 X'.此列有搜索幫助
48 AUTO_VALUE ALV 控制: 自動復制值  
49 CHECKTABLE 表名  
50 VALEXI 固定值存在  
51 WEB_FIELD ALV 控制: 內部表字段的字段名稱  
52 HREF_HNDL 自然數 熱點連接的句柄
53 STYLE ALV 控制: 樣式 下面有例子會介紹,比如PUSHBUTTION
54 STYLE2 ALV 控制: 樣式  
55 STYLE3 ALV 控制: 樣式  

56 STYLE4 ALV 控制: 樣式  
57 DRDN_HNDL 自然數 下拉的句柄
58 DRDN_FIELD ALV 控制: 內部表字段的字段名稱 下拉的字段
59 NO_MERGING 字符字段長度 1 相同的值不合並
60 H_FTYPE ALV 樹控制: 功能類型 (總計,平均,最大.最小, ...)  
61 COL_OPT 可選列優化的條目  
62 NO_INIT_CH 字符字段長度 1  
63 DRDN_ALIAS 字符字段長度 1  
64 REF_FIELD ALV 控制: 內部表字段的參考字段名稱  
65 REF_TABLE ALV 控制: 內部表字段的參考表名稱  
66 TXT_FIELD ALV 控制: 內部表字段的字段名稱  
67 ROUNDFIELD ALV 控制: 帶有 ROUND 說明的字段名稱  
68 DECIMALS_O ALV 控制: 輸出小數位的編號  
69 DECMLFIELD ALV 控制: 帶有 DECIMALS 說明的字段名稱  
70 DD_OUTLEN ALV 控制: 輸出字符長度  
71 DECIMALS 小數點后的位數 設置小數的位數
72 COLTEXT ALV 控制: 列標題 列標題
73 SCRTEXT_L 長字段標簽  
74 SCRTEXT_M 中字段標簽  
75 SCRTEXT_S 短字段標簽  
76 COLDDICTXT ALV 控制: 確定 DDIC 文本參考  
77 SELDDICTXT ALV 控制: 確定 DDIC 文本參考  
78 TIPDDICTXT ALV 控制: 確定 DDIC 文本參考  
79 EDIT ALV 控制: 准備輸入 輸出狀態.'X'可輸入
80 TECH_COL ALV 控制: 內部使用  
81 TECH_FORM ALV 控制: 內部使用  
82 TECH_COMP ALV 控制: 內部使用  
83 HIER_CPOS ALV 控制: 層次列位置  
84 H_COL_KEY 樹控制: 列名稱/項目名稱  
85 H_SELECT 標識是否可以選擇樹控制中的列  
86 DD_ROLL 數據元素 (語義域)  
87 DRAGDROPID ALV 控制: 拖&放處理拖放對象  
88 MAC 字符字段長度 1  
89 INDX_FIELD 自然數  
90 INDX_CFIEL 自然數  
91 INDX_QFIEL 自然數  
92 INDX_IFIEL 自然數  
93 INDX_ROUND 自然數  
94 INDX_DECML 自然數  
95 GET_STYLE 字符字段長度 1  
96 MARK 字符字段長度 1  
 

ALV_GRID介紹二(3)
2.布局控制[layout]
   布局是用來控制整個ALV的一個布局,比如ALV的標題,是否可編輯,行顏色,列顏色.
   參照ALV的控制結構[LVC_S_LAYO],以后的例子我將詳細介紹如何設置行顏色和列顏色.
   詳細的結構說明
 
字段名 描述  Value range
CWIDTH_OPT 最優化寬度 SPACE, 'X'
SMALLTITLE 小標題,如果設置了這個字段,則標題與列標題大小一樣 SPACE, 'X'
GRID_TITLE 標題,在網格和工具條之間 最長70個字符
NO_HEADERS 如果被設置,列標題隱藏 SPACE, 'X'
NO_HGRIDLN 隱藏水平線 SPACE, 'X'
NO_MERGING 禁用單元格合並 SPACE, 'X'
NO_ROWMARK 如果被設置,選擇列在選擇模式為D和A的時候隱藏 SPACE, 'X'
NO_TOOLBAR 隱藏工具條 SPACE, 'X'
NO_VGRIDLN 隱藏垂直線 SPACE, 'X'
SEL_MODE 選擇模式 SPACE, 'A', 'B', 'C', 'D'
EXCP_CONDS 合計例外 SPACE, 'X'
EXCP_FNAME 字段名稱帶有例外編碼 最長30個字符
EXCP_LED 例外作為 LED SPACE, 'X'
EXCP_ROLLN 例外文檔的數據元素 SPACE, 'X'
CTAB_FNAME 帶有復雜單元格顏色編碼的字段名稱 最長30個字符
INFO_FNAME 帶有簡單行彩色代碼的字段名稱 最長30個字符
ZEBRA 可選行顏色,如果設置了,出現了間隔色帶 SPACE, 'X'
NO_TOTLINE 沒有總計 SPACE, 'X'
NUMC_TOTAL 可以對NUMC字段進行合計 SPACE, 'X'
TOTALS_BEF 總計輸出在第一行,小計在新的值之前 SPACE, 'X'
STYLEFNAME 設置單元格,比如PUSHBUTTON 最長30個字符
 

ALV_GRID介紹二(4)
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 BEFORE OUTPUT .
             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 CHANGING gt_fieldcat .
       *-----設置布局
PERFORM prepare_layout CHANGING gs_layout .
       *-----顯示ALV
CALL METHOD gr_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 METHOD gr_alvgrid->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2 .
IF sy-subrc <> 0.
*--異常處理
ENDIF.
ENDIF .
 
  方法"set_table_for_first_display"的參數說明
 參數 含義
I_BUFFER_ACTIVE 如果方法調用是靜態的,可以設置這個標記,這表示,如果每次顯示ALV都是
相同的字段目錄.既然這樣,那么字段目錄會被放到一個特殊的緩存里,
這樣加速了ALV的顯示
I_STRUCTURE_NAME 輸出數據參考的數據字典的結構名,例如'SFLIGHT'.如果指定了這個參數,字段
目錄會自動生成,下面的參數IT_FIELDCATALOG不需要傳值.
IS_VARIANT 決定布局顯示的變式
I_SAVE 決定用戶是否可以保存變式:
'X' 只能保存全局變式
'U' 只能保存特定變式
'A' 都可以保存
SPACE 不可以保存變式
I_DEFAULT 決定用戶是否可以定義默認的布局:
'X' 可以定義默認布局,這個參數是默認的
SPACE 不可以定義默認布局
IS_LAYOUT 布局參數,傳遞布局控制的一些信息
IS_PRINT 后台打印屬性的參數
IT_SPECIAL_GROUPS 如果在字段目錄中,一些字段通過SP_GROUP被分組在一起.我們就必須為這些
組傳遞一個組的文本內表進去
IT_TOOLBAR_EXCLUDING 需要隱藏的標准的按鈕的內表
IT_HYPERLINK 為每個句柄分配了超連接的內表,LVC_S_HYPE中的HREF存放了超連接的地址,
HANDLE指定了句柄,使用這些句柄,你可以在GRID中使用超連接
IT_ALV_GRAPHICS 比較復雜,沒有用過,意思好象是可以在圖表中顯示ALV.
IT_OUTTAB 輸出數據存放的內表,數據都是存放在這個內表里
IT_FIELDCATALOG 字段目錄
IT_SORT 排序的標准
IT_FILTER 過濾的標准
   
方法"REFRESH_TABLE_DISPLAY"的參數說明
 
參數 含義
IS_STABLE 刷新的穩定性,有2個參數,一個是行,一個是列.如果設置了相應的值,
那么對應的行,或者列,在刷新的時候,將會保持穩定,就是滾動條保持不動.
I_SOFT_REFRESH 這個參數只是在異常情況下被使用,如果設置了這個參數,任何創建的合計,
任何排序次序,任何為了顯示數據而設置的過濾都將保持不變.這個是非常
有意義的.例如:當然你沒有修改數據內表里的數據而想刷新ALV,僅僅只是
改變一下布局和字段目錄.
 

ALV_GRID介紹二(5)
 
第三步,獲取要顯示數據的字段目錄.有兩種方式.
       1.手動創建
FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .
DATA ls_fcat type lvc_s_fcat .
ls_fcat-fieldname = 'CARRID' .
ls_fcat-inttype = 'C' .
ls_fcat-outputlen = '3' .
ls_fcat-coltext = 'Carrier ID' .
ls_fcat-seltext = 'Carrier ID' .
APPEND ls_fcat to pt_fieldcat .
CLEAR ls_fcat .
ls_fcat-fieldname = 'CONNID' .
ls_fcat-ref_table = 'SFLIGHT' .
ls_fcat-ref_table = 'CONNID' .
ls_fcat-outputlen = '3' .
ls_fcat-coltext = 'Connection ID' .
ls_fcat-seltext = 'Connection ID' .
APPEND ls_fcat to pt_fieldcat .
ENDFORM .
   2.半自動的創建
FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .
DATA ls_fcat type lvc_s_fcat .
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'SFLIGHT'
CHANGING
ct_fieldcat = pt_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
*--Exception handling
ENDIF.
LOOP AT pt_fieldcat INTO ls_fcat .
CASE pt_fieldcat-fieldname .
WHEN 'CARRID' .
ls_fcat-outpulen = '10' .
ls_fcat-coltext = 'Airline Carrier ID' .
MODIFY pt_fieldcat FROM ls_fcat .
WHEN 'PAYMENTSUM' .
ls_fcat-no_out = 'X' .
MODIFY pt_fieldcat FROM ls_fcat .
ENDCASE .
ENDLOOP .
ENDFORM .
 
 
 
ALV_GRID介紹二(6)
 

第四步,設置布局
 FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.
    ps_layout-zebra = 'X' .
    ps_layout-grid_title = 'Flights' .
    ps_layout-smalltitle = 'X' .
ENDFORM. " prepare_layout
 
第五步,排除不需要的標准按鈕(可選,這個是第一種方法,還有另外一種,在添加自定義的按鈕的時候介紹)
    在你的ALV上,如果你想排除一些你不想要的標准按鈕,你可以把需要排除的按鈕填入到表UI_FUNCTIONS中,然后傳給set_table_for_first_display方法的參數"IT_TOOLBAR_EXCLUDING".這些按鈕的功能碼一般都可以通過查看類cl_gui_alv_grid的常量屬性中獲取到,或者自己加個斷點,在after_user_command事件中.
     如果你要隱藏全部的工具條,你可以把layout中的no_toolbar設置為"X".
 FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions .
     DATA ls_exclude TYPE ui_func.
     ls_exclude = cl_gui_alv_grid=>mc_fc_maximum .
     APPEND ls_exclude TO pt_exclude.
     ls_exclude = cl_gui_alv_grid=>mc_fc_minimum .
     APPEND ls_exclude TO pt_exclude.
     ls_exclude = cl_gui_alv_grid=>mc_fc_subtot .
     APPEND ls_exclude TO pt_exclude.
     ls_exclude = cl_gui_alv_grid=>mc_fc_sum .
     APPEND ls_exclude TO pt_exclude.
     ls_exclude = cl_gui_alv_grid=>mc_fc_average .
     APPEND ls_exclude TO pt_exclude.
     ls_exclude = cl_gui_alv_grid=>mc_mb_sum .
     APPEND ls_exclude TO pt_exclude.
     ls_exclude = cl_gui_alv_grid=>mc_mb_subtot .
ENDFORM .
 
ALV_GRID介紹二(7)
 

按照上面的步驟,一個ALV的DEMO基本可以創建了.下面我們將講述一些功能.
 
功能一:在第一次顯示以后,修改字段目錄和布局.
 
    在運行的時候,很有可能需要在顯示之后,需要設置一個新的布局或者字段目錄.有下面這些方法去實現.
    字段目錄 :    get_frontend_fieldcatalog
                set_frontend_fieldcatalog
   布局:         get_frontend_layout
                set_frontend_layout
    使用這些方法,你在執行的任何時候,可以獲取這些內容,然后修改他們.
DATA ls_fcat TYPE lvc_s_fcat .
DATA lt_fcat TYPE lvc_t_fcat .
DATA ls_layout TYPE lvc_s_layo .
CALL METHOD gr_alvgrid->get_frontend_fieldcatalog
  IMPORTING
    et_fieldcatalog = lt_fcat[] .
 LOOP AT lt_fcat INTO ls_fcat .
   IF ls_fcat-fieldname = 'PAYMENTSUM' .
     ls_fcat-no_out = space .
     MODIFY lt_fcat FROM ls_fcat .
   ENDIF .
 ENDLOOP .
CALL METHOD gr_alvgrid->set_frontend_fieldcatalog
   EXPORTING
     it_fieldcatalog = lt_fcat[] .
 
CALL METHOD gr_alvgrid->get_frontend_layout
  IMPORTING
    es_layout = ls_layout .
   ls_layout-grid_title = 'Flights (with Payment Sums)' .
CALL METHOD gr_alvgrid->set_frontend_layout
  EXPORTING
    is_layout = ls_layout .
 
ALV_GRID介紹二(8)
 

功能二:設置排序條件
   有時候我們需要使用到數據的排序.這個可以通過填充參考結構LVC_T_SORT創建的內表來實現,這個內表中包含了排序的標准.可以傳遞給set_table_for_first_display這個方法的IT_SORT參數來初始化一個排序.
 FORM prepare_sort_table CHANGING pt_sort TYPE lvc_t_sort .
     DATA ls_sort TYPE lvc_s_sort .
     ls_sort-spos = '1' .
     ls_sort-fieldname = 'CARRID' .
     ls_sort-up = 'X' . "A to Z
     ls_sort-down = space .
     APPEND ls_sort TO pt_sort .
     ls_sort-spos = '2' .
     ls_sort-fieldname = 'SEATSOCC' .
     ls_sort-up = space .
     ls_sort-down = 'X' . "Z to A
     APPEND ls_sort TO pt_sort .
ENDFORM. " prepare_sort_table
 
   這有2點特別的說明:
      1.如果這邊排序的字段名,不存在於字段目錄中,那將出現DUMP.
      2.排序以后,垂直的網格中,如果出現相同的內容,就會合並,如果要避免,請在布局中設置"no_merging"為"X" .
 
    你可以通過使用方法“get_sort_criteria” 和“set_sort_criteria”來獲取和設置排序的標准.
 
ALV_GRID介紹二(9)
 
功能三:設置過濾(和排序類似)
    ALV的標准按鈕中已經有過濾的功能,我們也可以在初始顯示的時候就設置過濾條件.我們需要把過濾條件填充到參考表類型"LVC_T_FILT"創建的內表中.過濾條件是類似一個RANGES結構的.然后把這個內表傳遞給方法"SET_TABLE_FOR_FIRST_DISPLAY"中的參數"IT_FILTER"
 
FORM prepare_filter_table CHANGING pt_filt TYPE lvc_t_filt .
     DATA ls_filt TYPE lvc_s_filt .
     ls_filt-fieldname = 'FLDATE' .
     ls_filt-sign = 'E' .
     ls_filt-option = 'BT' .
     ls_filt-low = '20030101' .
     ls_filt-high = '20031231' .
     APPEND ls_filt TO pt_filt .
ENDFORM. " preparefiltertable
  
    我們可以使用"get_filter_criteria" 和"set_filter_criteria"來獲取過濾條件和設置過濾條件.
 
 
 
ALV_GRID介紹二(10)
 
功能四:選擇方式
   有時候,我們需要選擇一些單元格,行或者列,在布局中,有個參數"SEL_MODE"可以設置我們不同的選擇方式.下面是參數的介紹.和不同的地方.
 
值 模式 可能的選擇 注釋
SPACE 等同於B 參考B 默認設置
'A' 行和列的選擇,無法選擇單元格 多行,多列 用戶可以使用最左邊的選擇按鈕來選擇多行
'B' 單選,不可以多選行,不可以多選單元格 多行,多列  
'C' 多選,可以多選行,不可以多選單元格 多行,多列  
'D' 單元格的選擇,可以多選單元格 多行,多列,任何單元格多選 用戶可以使用最左邊的選擇按鈕來選擇多行
 
注意: 
  1.如果你設置了ALV是可編輯的,可能會覆蓋你在布局中選擇方式的設置的.
  2.設置了選擇方式以后,我們可以使用很多方法來獲取用戶的選擇.比如"GET_SELECTED_CELLS","GET_SELECTED_CELLS_ID","GET_SELECTED_ROWS","GET_SELECTED_COLUMNS"
  3.在執行PAI以后,用戶所選擇的單元格,行或者列可能丟失.你可以在PBO中,使用對應的SET方法來恢復這些選擇.
 
ALV_GRID介紹二(11)
 

功能五:顏色設置
 
   有的時候,我們需要在ALV網格上繪上一些顏色.可以給特定的行,某個特定的列,某個特定的單元格繪制顏色.
如果某列被設置為關鍵列,這列的顏色將被自動繪制,而不需要我們額外的指定.
 
先介紹ALV里色碼.就是顏色編碼,4位CHAR型.
                             Cxyz---
             Color ||    |
                     |    1/0: 相反 開/1/0: 強化 開/關
 其中C是固定的第一位,第二位代表是顏色編碼(1到7),第三位是加強的設置,第四位是相反,個人理解,在強化關閉的情況下,相反的作用是背景和字體的變化.
 
顏色編碼:
 x 顏色 主要使用在
1 Gray-blue headers
2 Light gray List bodies
3 yellow totals
4 Blue-green Key columns
5 green Positive threshold value
6 red Negative threshold value
7 orange Control levels 
  
A)設置列的顏色.
    我們可以通過字段目錄的"emphasize"控制字段來控制某列的顏色.這個字段同樣是4位的CHAR型,傳入上述的顏色編碼.例如:
           LS_FCAT-EMPHASIZE = 'C701'. 
 如果這列被設置為關鍵列,就是    LS_FCAT-KEY = 'X' ,那么顏色設置就不會起作用.請注意,自動產生的字段目錄中,KEY的設置是自動獲取的.
 
B)設置行的顏色
     為某行設置顏色,是有點復雜的,我們需要在要顯示的數據內表中增加一個字段,這個字段不需要在字段目錄中存在.同樣,這個字段也是4位的CHAR型,符合顏色編碼的定義.
  那我們就需要這樣來定義我們的數據內表:
 DATA BEGIN OF gt_list OCCURS 0 .
     INCLUDE STRUCTURE SFLIGHT .
     DATA rowcolor(4) TYPE c .
DATA END OF gt_list .
   很明顯,填入顏色編碼以后,ALV怎么知道它是我們用來設置顏色的呢,在布局中,有個控制字段"INFO_FNAME",我們可以設置這個字段來告訴ALV,我們的顏色字段是哪個.
    ps_layout-info_fname = 'ROWCOLOR'. 
   請注意,這個字段隨便你起名字,但是記住,一定是數據內表里的字段,而且這邊設置的時候一定要大寫.你可以在任何時候設置行的顏色,只需要去修改內表里的這個字段的值,但是記得,一定要刷新以后才起作用.
 
C)設置單元格的顏色     
    設置單元格和設置行的顏色,本質上沒有什么大的區別,但是定位單元格需要2個參數.我們需要在數據內表中插入一個表類型的字段,這樣我們的數據內表就變成了DEEP結構了,不過ALV是可以處理的.不需要擔心.
插入的這個表類型的類型為"LVC_T_SCOL".
   里面有3個參數:
     FNAME告訴我們你需要設置的是哪個字段,如果為空,然后直接在COLOR中設置顏色,就是整行設置為這個顏色.如果具體到某個單元格,必須指定是哪個字段.
     COLOR字段是用來設置顏色的.
     NOKEYCOL字段比較關鍵了.設置為關鍵列的一些字段,我們的顏色設置可能被覆蓋.通過這個字段的設置,可以避免被關鍵列覆蓋.
 同樣,ALV在布局中有個字段"CTAB_FNAME"告訴我們,數據內表中,哪個字段是用來設置單元格的顏色的.
 DATA BEGIN OF gt_list OCCURS 0 .
    INCLUDE STRUCTURE SFLIGHT .
DATA rowcolor(4) TYPE c .
DATA cellcolors TYPE lvc_t_scol .
DATA END OF gt_list .
DATA ls_cellcolor TYPE lvc_s_scol .
...
  READ TABLE gt_list INDEX 5 .
    ls_cellcolor-fname = 'SEATSOCC' .
    ls_cellcolor-color-col = '7' .
    ls_cellcolor-color-int = '1' .
    APPEND ls_cellcolor TO gt_list-cellcolors .
  MODIFY gt_list INDEX 5 .
 
注意: 
   顏色設置中有優先級順序,他們是單元格--->行--->列.
 
ALV_GRID介紹二(12)
 
功能六:插入超鏈接
     插入超鏈接是通過一個含有超級鏈接和句柄的表來實現的.這個表類型為"LVC_T_HYPE" ,句柄是一個INT4類型的字段,我們需要在數據顯示的內表中,加入這樣的字段,來告訴ALV,我們的字段指定的句柄,從而找到對應的超級鏈接.在字段目錄中,WEB_FIELD是用來指定對應的句柄名的.
 
   下面舉個例子來說明,我們要為字段CARRID,CONNID建立超級鏈接:
 首先,內表定義中,我們加入2個句柄字段:
 DATA BEGIN OF gt_list OCCURS 0 .
    INCLUDE STRUCTURE SFLIGHT .
DATA rowcolor(4) TYPE c .
DATA cellcolors TYPE lvc_t_scol .
DATA carrid_handle TYPE int4 .
DATA connid_handle TYPE int4 .
DATA END OF gt_list .
 
第二: 建立一個超級鏈接內表,里面存放句柄所對應的超級鏈接.創建的時候注意,它參考的表類型,一定是"LVC_T_HYPE".
 FORM prepare_hyperlinks_table CHANGING pt_hype TYPE lvc_t_hype .
DATA ls_hype TYPE lvc_s_hype .
   ls_hype-handle = '1' .
   ls_hype-href = 'http://www.company.com/carrids/car1' .
   APPEND ls_hype TO pt_hype .
   ls_hype-handle = '2' .
   ls_hype-href = 'http://www.company.com/carrids/car1' .
   APPEND ls_hype TO pt_hype .
   ls_hype-handle = '3' .
   ls_hype-href = 'http://www.company.com/carrids/car1' .
   APPEND ls_hype TO pt_hype .
   ls_hype-handle = '4' .
   ls_hype-href = 'http://www.company.com/connids/con11' .
   APPEND ls_hype TO pt_hype .
   ls_hype-handle = '5' .
   ls_hype-href = 'http://www.company.com/connids/con12' 
   APPEND ls_hype TO pt_hype .
.. ..
ENDFORM .
 
第三.通過字段目錄FIELDCATLOG來指定相應的句柄字段.
 
    對於CARRID的field catalog
       Ls_fieldcat-web_field = ‘CARRID_HANDLE’.
    對於CONNID的field catalog
       Ls_fieldcat-web_field = ‘CONNID_HANDLE’.
 
在方法"SET_TABLE_FOR_FIRST_DISPLAY"中把句柄內表傳給參數it_hyperlink。
  
第四:在數據顯示的內表中,指定對應的句柄:
   LOOP AT gt_list.
   IF gt_list-carrid = ‘XX’.
  Gt_list-carrid_handle = ‘1’.
  IF gt_list-connid = ‘01’.
   Gt_list-connid_handle = ‘4’.
  ENDIF.
   ENDIF.
  ENDLOOP.
 
ALV_GRID介紹二(13)
 

功能七:把字段設置為下拉
    有時候我們可以把一些字段設置為下拉,比如一些類型,一些字段的值是比較固定的一些值,當然,我們也可以通過搜索幫助來做,這些只是看各自的愛好和需要了.
   設置為下拉,和上一篇設置超級鏈接是類似的,也是使用了一個內表存放了句柄和對應的值,這個表類型為"LVC_T_DROP".不過傳遞給ALV的方式有點區別.超級鏈接是通過方法"SET_TABLE_FOR_FIRST_DISPLAY"的參數來傳遞的,而下拉的內表傳遞需要使用方法"SET_DROP_DOWN_TABLE".
   如果我們希望把這個列都設置為下拉,那么我們可以在字段目錄中,把控制字段"DRDN_HNDL"指向對應的下拉內表的句柄就可以了.例如:
       ps_fcat-drdn_hndl = '1' .
 如果是某個單元格設置為下拉,那我們就需要在數據顯示的內表中增加一個句柄字段(如果是有多個不同的字段需要設置下拉,可以增加多個字段),同時得在字段目錄里設置"DRDN_FIELD".例如:
      ps_fcat-drdn_field = 'PTYP_DD_HNDL' .
 數據顯示內表定義為:
 DATA BEGIN OF gt_list OCCURS 0 .
INCLUDE STRUCTURE SFLIGHT .
DATA rowcolor(4) TYPE c .
DATA cellcolors TYPE lvc_t_scol .
DATA carrid_handle TYPE int4 .
DATA connid_handle TYPE int4 .
DATA ptype_dd_hndl TYPE int4 .
DATA END OF gt_list .
 
定義下拉的句柄內表:
 FORM prepare_drilldown_values.
DATA lt_ddval TYPE lvc_t_drop .
DATA ls_ddval TYPE lvc_s_drop .
   ls_ddval-handle = '1' .
   ls_ddval-value = 'JFK-12' .
   APPEND ls_ddval TO lt_ddval .
   ls_ddval-handle = '1' .
   ls_ddval-value = 'JSF-44' .
   APPEND ls_ddval TO lt_ddval .
   ls_ddval-handle = '1' .
   ls_ddval-value = 'KMDA-53' .
   APPEND ls_ddval TO lt_ddval .
   ls_ddval-handle = '1' .
   ls_ddval-value = 'SS3O/N' .
   APPEND ls_ddval TO lt_ddval .
CALL METHOD gr_alvgrid->set_drop_down_table
   EXPORTING
      it_drop_down = lt_ddval .
ENDFORM. " prepare_drilldown_values
 
准備好內表,以后,使用方法set_drop_down_table來傳遞給ALV.
 
 
 
ALV_GRID介紹二(14)
 
功能八:基於事件的附加功能
      作為使用面向對象的方法開發的一個組件,ALV GRID控制器有很多響應用戶交互的事件.這些事件經常被用來增強一些用戶響應的功能.為實現這樣的功能,我們必須在程序中創建一個類的實例來作為ALV GRID實例的事件處理者.
     下表列出了一些ALV GRID的事件,后面的HTML列用來說明是否在HTML形式SAP GUI上支持.
 
用戶定義文本輸出:
 Event Application HTML
Print_end_of_list Define output text to be printed at the end of the entire list √
Print_top_of_list Define output text to be printed at begin of the entire list √
Print_top_of_page Define output text to be printed at begin of each page √
Print_end_of_page Define output text to be printed at the end of each page √
Subtotal_text Define self-defined subtotal texts √
 
ALV GRID的鼠標動作事件
 Event Application HTML
Button_click Query click on a push button in the ALV GRID control √
Double_click Query a double click on a cell of the ALV GRID √
Hotspot_click Query a hotspot click on columns defined for this purpose in advance √
ondrag Collect information when elements of the ALV GRID Control are dragged ×
ondrop Process information when elements of the ALV GRID Control are dropped ×
ondropComplete Perform final actions after successful drag&drop ×
ondropGetFlavor Distinguish between options for drag&drop behavior ×
 
自定義和標准功能實現
 Event Application HTML
Before_user_command Query self-defined and standard functions √
User_command Query self-defined function codes √
After_user_command Query self-defined and standard functions codes √
 
自定義功能的定義(自定義按鈕,菜單等等)
 Event Application HTML
Tool bar Change,delete or add gui elements on alv grid √
Menu_button Define menus for menu buttons in the toolbar √
Context_menu_request Change context menu ×
Onf1 Define self-defined f1 help √
 
下面是一段代碼,舉例說明如果定義我們的事件處理類.
 CLAS lcl_event_handler DEFINITION.
 PUBLIC SECTION.
METHODS:
*--在ALV的工具條上增加新的按鈕
Handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
    IMPORTING e_object e_interactive,
*--實現用戶命令
Handle_user_command 
       FOR EVENT user_command OF cl_gui_alv_grid
       IMPORTING e_ucomm.
*--熱點點擊控制
Handle_hotspot_click
       FOR EVENT hotspot_click OF cl_gui_alv_grid
       IMPORTING e_row_id e_column_id es_row_no.
*--在用戶命令觸發之前
Handle_before_user_command
   FOR EVENT before_user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm.
*--在用戶命令觸發之后
Handle_after_user_command
   FOR EVENT after_user_command OF cl_gui_alv_grid
       IMPORTING e_ucomm.
*--在ALV可修改的情況下,控制數據修改
Handle_data_changed
   FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed.
*--在數據修改完成之后
 Handle_data_changed_finished
   FOR EVENT data_changed_finished OF cl_gui_alv_grid
        IMPORTING e_modified.
*--管理菜單
Handle_menu_button
   FOR EVENT menu_button OF cl_gui_alv_grid
        IMPORTING e_object e_ucomm.
*--管理按鈕點擊
Handle_button_click
   FOR EVENT button_click OF cl_gui_alv_grid
        IMPORTING e_objec e_ucomm.
 PRIVATE SECTION.
ENDCLASS.
 
下面是類的實現的一些概要代碼,參數可以從ALV的事件中直接獲取出來:
 CLASS lcl_event_handler IMPLEMENTATION.
 *-- Handle toolbar
 METHOD handle_toolbar.
    PERFORM handle_toolbar USIGN e_object e_interactive.
 ENDMETHOD.
 *-- Handle hotspot click
 METHOD handle_hotspot_click.
    PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no.
 ENDMETHOD.
 *-- Handle double click
 METHOD handle_double_click.
    PERFORM handle_double_click USING e_row e_column es_row_no.
 ENDMETHOD.
 *-- Handle after user command
 METHOD handle _after_user_command.
    PERFORM handle_after_user_command USING e_object.
 ENDFORM.
 *-- Handle before user command
 METHOD handle_before_user_command.
    PERFORM handle_before_user_command.
 ENDMETHOD.
 *--Handle data changed
 METHOD handle_data_changed.
    PERFORM handle_data_changed USING er_data_changed.
 ENDMEHTOD.
 METHOD handle_data_changed_finished.
     PERFORM handle_data_chaged USING e_modified.
 ENDMETHOD.
 METHOD handle_menu_button.
     PERFORM handle_menu_button USING e_object e_ucomm.
 ENDMEHTOD.
 MEHTOD handle_button_click.
     PERFORM handle_button_click USING e_objcet e_ucomm.
 ENDMETHOD.
ENDCALSS.
 
光定義了這些還不夠,我們需要把事件管理類注冊到ALV GRID的實例事件.
 DATA gr_event_handler TYPE REF TO lcl_event_handler .
.. ..
*--Creating an instance for the event handler
CREATE OBJECT gr_event_handler .
*--Registering handler methods to handle ALV Grid events
SET HANDLER gr_event_handler->handle_user_command FOR gr_alvgrid .
SET HANDLER gr_event_handler->handle_toolbar FOR gr_alvgrid .
SET HANDLER gr_event_handler->handle_menu_button FOR gr_alvgrid .
SET HANDLER gr_event_handler->handle_double_click FOR gr_alvgrid .
SET HANDLER gr_event_handler->handle_hotspot_click FOR gr_alvgrid .
SET HANDLER gr_event_handler->handle_button_click FOR gr_alvgrid .
SET HANDLER gr_event_handler->handle_before_user_command
FOR gr_alvgrid .
SET HANDLER gr_event_handler->handle_context_menu_request
FOR gr_alvgrid .
SET HANDLER gr_event_handler->handle_data_changed FOR gr_alvgrid .
SET HANDLER gr_event_handler->handle_data_changed_finished
FOR gr_alvgrid .
 
 

 


免責聲明!

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



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