ALV Function - ooxxvv/MySAPnotes GitHub Wiki
ALV/Function
-
程式碼請參考 => REUSE_ALV_GRID_DISPLAY
-
要在ABAP/4程序中呼叫ALV Function Module來產生輸出畫面,有幾個敘述是必需做的:
- 宣告Internal Table來存放要顯示的資料
- 設定欄位的相關屬性(標題、排序……等)
- 呼叫ALV Function Module
其他說明
- 在 ALV 中,所有需要顯示的列,都必須在相應的 internal table 中有對應的字段,否則只要使用合計或者分類匯總都會當掉。
- 傳入 ALV 中的欄位對應的名稱必須使用大寫字母,否則數據不會顯示出來。
- 在 ABAP 中,字串的大小寫很重要,在單引號包圍的字串中,一般來說都應該用大寫,特別是在傳入參數時,就必須使用大寫字串,否則就會出現系統錯誤。
顏色碼的設定方式
- 基本上是用四碼來設定
- 第一碼固定為「C」,代表是 Color。
- 第二碼是 SAP 中的顏色碼,數字型態。
- 第三碼是否為選中的顏色,1 => 是,0 => 否。
- 第四碼是否為反白的顏色,1 => 是,0 => 否。
- 若此欄位被選中,則在此設定的顏色會被 ALV 的預設顏色覆蓋。
- 下載時,只有 Rich text format,HTML Format,才會有顏色的變化。
直行的顏色
- 設在 it_fieldcat 這個傳入參數的 EMPHASIZE 這個欄位中。
DATA: wa_fields TYPE LINE OF slis_t_fieldcat_alv.
wa_fields-fieldname = 'EBELN'.
wa_fields-seltext_m = '採購訂單號'.
wa_fields-emphasize = 'C610'.
橫列的顏色
- 在傳入資料的 Internal Table 中,加入一個 CHAR4 的欄位,欄位名稱可自行取名。
- 在此欄位中放入顏色代碼。
- 在傳入參數 is_layout 中的 info_fieldname,放入儲存顏色代碼的欄位名稱。
*-----宣告要顯示的Internal Table
DATA: BEGIN OF ivbap OCCURS 0,
vbeln LIKE vbap-vbeln,
matnr LIKE vbap-matnr,
matkl LIKE vbap-matkl,
justforcolor(4) TYPE c, "用來儲存這項資料在 ALV 中的底色
END OF ivbap.
LOOP AT ivbap.
IF sy-tabix EQ 10.
*---設定底色
ivbap-justforcolor = 'C100'.
MODIFY ivbap.
ENDIF.
ENDLOOP.
*-將底色設定的 Fieldname 存入設定中
lw_layout-info_fieldname = 'JUSTFORCOLOR'.
- 也可以用以下的「單一儲存格的顏色」中的設定方式,不要指定欄位名稱就可達到整列變色的效果。
單一儲存格的顏色
- 在傳入資料的 Internal Table 中,加入一個 TYPE lvc_t_scol 的欄位,欄位名稱可自行取名。
- 在此欄位中放入相關的顏色設定 (這個欄位會是一個 Internal table 的型態)。
- 在傳入參數 is_layout 中的 coltab_fieldname,放入儲存顏色代碼的欄位名稱。
- 若此欄位放空白,表示為整列變色。
- 如果不希望覆蓋原來 Key 欄位的顏色的設定,可以將 info_fieldname-nokeycol 設置為 「X」。
*------宣告要顯示的Internal Table
DATA: BEGIN OF ivbap OCCURS 0,
vbeln LIKE vbap-vbeln,
matnr LIKE vbap-matnr,
matkl LIKE vbap-matkl,
rowcolors(4) TYPE c, "用來儲存單一列在 ALV 中的底色
cellcolors TYPE lvc_t_scol, "用來儲存單一欄位在 ALV 中的底色
END OF ivbap.
DATA: lw_cellcolors TYPE lvc_s_scol.
LOOP AT ivbap.
IF sy-tabix EQ 10.
*---設定單一行的底色
ivbap-rowcolors = 'C100'.
*---設定單一欄位的底色
lw_cellcolors-fname = 'MATKL'.
lw_cellcolors-color-col = '6'.
lw_cellcolors-color-int = '0'.
lw_cellcolors-color-inv = '0'.
lw_cellcolors-nokeycol = ''.
APPEND lw_cellcolors TO ivbap-cellcolors.
MODIFY ivbap.
ENDIF.
ENDLOOP.
*---將底色設定的 Fieldname 存入設定中
lw_layout-info_fieldname = 'ROWCOLORS'.
lw_layout-coltab_fieldname = 'CELLCOLORS'.
Function
- REUSE_ALV_LIST_DISPLAY => 輸出的畫面像傳統的 List
- REUSE_ALV_GRID_DISPLAY => 新樣式的輸出的畫面 (較常用)
- REUSE_ALV_COMMENTARY_WRITE => 在 ALV 已被執行的狀態下加入資料
- REUSE_ALV_BLOCK_LIST_APPEND
- REUSE_ALV_BLOCK_LIST_DATA_GET
- REUSE_ALV_BLOCK_LIST_DATA_SET
- REUSE_ALV_BLOCK_LIST_DISPLAY
- REUSE_ALV_BLOCK_LIST_HS_APPEND
- REUSE_ALV_BLOCK_LIST_INIT
- REUSE_ALV_BLOCK_LIST_REFRESH
- REUSE_ALV_BLOCK_STATUS_GET
- REUSE_ALV_CHECKBOX_SET
- REUSE_ALV_EVENTS_GET
- REUSE_ALV_EVENTS_TRANSFER
- REUSE_ALV_EVENT_NAMES_GET
- REUSE_ALV_FIELDCATALOG_MERGE
- REUSE_ALV_HIERSEQ_LIST_DISPLAY
- REUSE_ALV_HS_LIST_WIDTH_GET
- REUSE_ALV_HS_TABLES_GET
- REUSE_ALV_LIST_LAYOUT_INFO_GET
- REUSE_ALV_LIST_LAYOUT_INFO_SET
- REUSE_ALV_LIST_WIDTH_GET
- REUSE_ALV_POPUP_TO_SELECT
- REUSE_ALV_TABLES_GET
- REUSE_ALV_TABLE_CREATE