ALV Function - ooxxvv/MySAPnotes GitHub Wiki

ALV/Function

  1. 宣告Internal Table來存放要顯示的資料
  2. 設定欄位的相關屬性(標題、排序……等)
  3. 呼叫ALV Function Module

其他說明

  • 在 ALV 中,所有需要顯示的列,都必須在相應的 internal table 中有對應的字段,否則只要使用合計或者分類匯總都會當掉。
  • 傳入 ALV 中的欄位對應的名稱必須使用大寫字母,否則數據不會顯示出來。
  • 在 ABAP 中,字串的大小寫很重要,在單引號包圍的字串中,一般來說都應該用大寫,特別是在傳入參數時,就必須使用大寫字串,否則就會出現系統錯誤。

顏色碼的設定方式

  • 基本上是用四碼來設定
  • 第一碼固定為「C」,代表是 Color。
  • 第二碼是 SAP 中的顏色碼,數字型態。
  • ColorCode
  • 第三碼是否為選中的顏色,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