Output table fields with DDIC reference
|
Output table fields without DDIC reference
|
Explanation
|
FIELDNAME
|
FIELDNAME
|
要顯示內表的字段
|
REF_TABLE
|
|
參考的數據字典結構
|
REF_FIELD
|
|
要參考的數據字典字段
|
|
INITYPE
|
要顯示的內表的字段的ABAP數據類型
|
|
OUTPUTLEN
|
列的寬度
|
|
COLTEXT
|
列頭文本
|
|
SELTEXT
|
選擇列的描述信息
|
ALV GRID參考文檔 ( 3 ) - 建立field catalog
建立field catalog下面的步驟便是如何填充FIELD CATALOG內表。上面介紹了field catalog的行類型的各個字段。爲了正確的填充每一列的field catalog 的字段,下面的這幾個字段必須被填充。
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的優先級要高。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.