ALV GRID參考文檔 ( 3 ) - 建立field catalog

建立field catalog下面的步驟便是如何填充FIELD CATALOG內表。上面介紹了field catalog的行類型的各個字段。爲了正確的填充每一列的field catalog 的字段,下面的這幾個字段必須被填充。
Output table fields with DDIC reference
Output table fields without DDIC reference
Explanation
 
FIELDNAME
FIELDNAME
要顯示內表的字段
REF_TABLE
 
參考的數據字典結構
REF_FIELD
 
要參考的數據字典字段
 
INITYPE
要顯示的內表的字段的ABAP數據類型
 
OUTPUTLEN
列的寬度
 
COLTEXT
列頭文本
 
SELTEXT
選擇列的描述信息
 
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.
 DATA: ls_fcat TYPE lvc_s_fcat.
 Ls_fcat-fieldname = ‘CONNID’.
 Ls_fcat-ref_table =’SFLIGHT’.
 Ls_fcat-ref_col = ‘CONNID’.
 APPEND ls_fcat TO pt_fieldcat.
ENDFORM.
半自動的產生field catalog
把我們要顯示的字段都一行一行的插入到field catalog內表中確實是一件煩人的事情。並且如果想自動產生field catalog的話那也不是十分理想。幸運的是有一種方法可以半自動的產生field catalog。
這種方法需要調用一個功能模塊。我們傳入一個結構模版,他就會自動爲我們產生field catalog內表。可以遍歷這張內表,改變我們想要改變的東西。這個功能模塊的名字是’LVC_FIELDCATALOG_MERGE’。下面的代碼展示了這種方法的使用。
FORM frm_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat.
 DATA ls_fcat TYPE lvc_s_fcat.
 CALL FUNCTION ‘LVC_FIELDCATLOG_MERGE’
EXPORTING
 I_structure_name = ‘SFLIGHT’
CHANGING
 Ct_fieldcat = pt_fieldcat
EXCEPTIONS
 Inconsistent_interface = 1
 Program_error = 2
 Oters = 3.
 IF sy-subrc <> 0.
 
 ENDIF.
 LOOP AT pt_fieldcat INTO ls_fcat.
CASE ls_fcat-fieldname.
 WHEN ‘CARRID’.
    Ls_fcat-outputlen = ‘10’.
    Ls_fcat-coltext = ‘Airline carrid’.
    MODIFY pt_fieldcat FROM ls_fcat.
 WHEN ‘PAYMENTSUM’.
    Ls_fcat-no_out = ‘X’.
    MODIFY pt_fieldcat FROM ls_fcat.
ENDCASE.
 ENDLOOP.
ENDFORM.
這個例子中首先使用結構SFLIGHT建立了fieldcatlog內表。然後我們又改變了CARRID的輸出長度和字段文本。然後我們又改變字段paymentsum爲不輸出。
緊接着帶來的問題是假如我們把i_structure_name和i_fieldcatlog這兩個字段都傳進去了將會發生什麼。顯然這是個優先級的問題。I_structure_name的優先級要高。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章