建立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的优先级要高。