1. 程式人生 > >SAP ABAP ALV控制顯示的網格中的每一個欄位屬性

SAP ABAP ALV控制顯示的網格中的每一個欄位屬性

欄位目錄是用來控制ALV顯示的網格中每個欄位的屬性的,比如欄位的順序,對齊方式,可編輯狀態,顏色,等等.常用的欄位如下:

row_pos:預設值為0,可選值為1、2、3,既最大分3級別顯示

fieldname欄位的名字(內表中定義的欄位名)

ref_field(ALV 控制: 內部表字段的參考欄位名稱)     參考的資料字典的欄位名,配合ref_tabname一起使用,一般用來使單元格生成F4幫助

ref_table(ALV 控制: 內部表字段的參考表名稱)    參考資料字典的表名,配合ref_fieldname使用

fieldname     ALV 控制: 內部表字段的欄位名稱TABNAME        LVC 標籤名稱

Cfieldname     currency unit field name值為當前輸出內表中的貨幣單位欄位的欄位名稱

Ctabname       Cfieldname欄位值對應的輸出內表

Qfieldname        計量單位欄位名,例如如值EA對應的欄位名

Qtabname         Qfieldname  對應的輸出內表名

COLTEXTALV 控制: 列標題

key           欄位是否為關鍵字(X或空)

checkbox複選框形式(X或空)

ICON作為圖示輸出,在ALV輸出內表中的欄位內容必須是有效的圖示名稱,圖示名稱和ID存在資料字典中ICON表中。

OUTPUTLEN        ALV 控制: 列的字元寬度

edit            當前列可編輯

emphasize 設定列的顏色。 取值格式C(1-7)(0-1)(0-1)當有欄位的edit屬性生效時,會與該引數值想衝突。

edit_mask       同write語句中的edit mask格式是一樣的,一般用來格式化時間和日期等

col_pos欄位的位置

no_out當前列隱藏輸出

just          對齊方式(取值為R,L,C)

lzero輸出前導零(X或空),僅NUMC型別欄位有效

no_zero如果取值為零,則為空,既不輸出零。

do_sum對當前列輸出時自動求和

scrtext_l欄位的文字描述,輸出時候顯示。長描述

scrtext_m欄位的文字描述,輸出時候顯示。中描述

scrtext_s欄位的文字描述,輸出時候顯示。短描述

lowercase     是否允許小寫字母(X)

decimals輸出小數點後面位數

hotspot         當前列設定為熱點 敏感、單機響應

fix_column     固定列,不隨滾動條滾動(必須在左邊才生效)

Key_sel          這個引數只和設定了key的欄位相關,和key一起使用,可以互動式的隱藏設定為KEY的欄位(alv_list有效)

tech          技術欄位,設定’X’後,該欄位不會顯示,也不能輸出,如同MANDT欄位一樣的效果

symbol        作為Symbol符號輸出,在ALV輸出內表中的欄位值可以是ABAP名稱,如SYM_FILLED_SQUARE(常量,不能使用引號),也可以是ID,如’%’,並且在報表中要使用include <LIST>語句.參考程式:RSTXSYMB

no_sign不輸出正負號+、-

reptext_ddic   與資料元素的主標題類似

ddictxt可選值為S,M,L,指定列標題為長描述,中描述,還是短描述,該值定義後,列標題的顯示內容將固定.

以上fieldcat引數對於REUSE_ALV_LIST_DISPLAY和REUSE_ALV_GRID_DISPLAY生效。

以下來自http://e6621887.iteye.com/blog/851155

ALV常用引數的詳細描述

呼叫功能模組:

CALL FUNCTION \'REUSE_ALV_GRID_DISPLAY\'

EXPORTING

i_structure_name = 'SPFLI'//輸出表的結構

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…        定義資料型別

2.  SORT

data: sortable type slis_t_sortinfo_alv with header line.

it_sort = sortable[]

屬性

  (排序)

Sortable-Fieldname        欄位名

Up              升序排列

Down            降序排列

Subtot         

 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

f2code = \'&ETA\'.    設定觸發彈出詳細資訊視窗的功能碼,這裡是雙擊

 no_vline           這個用來設定列間隔線

detail_initial_lines 

detail_popup        是否彈出詳細資訊視窗

detail_titlebar       設定彈出視窗的標題欄

totals_text

totals_only

group_change_edit

header_text

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 (如果被設定,選擇列在選擇模式---這是網上摘抄話.) ---------禁用系統自帶的行選擇'X'

為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\' .