# FAGLL03H增加自定义字段(一)
原创 ABAP三叔 [ ABAP三叔 ](javascript:void\(0\);)
__ _ _ _ _
FAGLL03H总账行项目浏览器(总账视图)是财务模块比较常用的一个报表,在项目中经常有增加自定义字段的需求。
自定义字段分两种类型:
本文将介绍第一种类型的增强方法。
见下图所示,报表中有一列"管理利润中心",字段名"ZZ01",它和利润中心用的是同一张表"CEPC",现在需要从文本表"CEPCT"取它的描述。
2.在实施类 ZCL_IM_FAGL_LIG 中创建私有方法add_text_field,定义如下
• * * * * * * * * * * * *
PRIVATE SECTION.
METHODS add_text_field IMPORTING !id_tabname TYPE pivb_db_tabname OPTIONAL !id_primary_field TYPE pivb_field_dbname !id_domname TYPE domname OPTIONAL !id_fieldname TYPE pivb_field_dbname OPTIONAL !id_db_name TYPE pivb_field_dbname OPTIONAL !id_language_key TYPE boole_d OPTIONAL !id_language_field TYPE pivb_field_dbname OPTIONAL CHANGING !ct_secondary_fields TYPE pivb_secondary_fields_t .3\. add_text_field方法实代码
• * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
METHOD add_text_field.
DATA: ls_sec_field LIKE LINE OF ct_secondary_fields. DATA: ls_key LIKE LINE OF ls_sec_field-key_fields. DATA: ld_db_name TYPE pivb_field_dbname. DATA: ld_ddobjname TYPE ddobjname. DATA: ld_fieldname TYPE dfies-lfieldname. DATA: ls_dfies TYPE dfies. DATA: lt_dd08v TYPE STANDARD TABLE OF dd08v. DATA: ls_dd08v LIKE LINE OF lt_dd08v.
** This determines what kind of field will be added to the output** 1) Text field: appear next to parent field in the sidebar and** added as a new field to be selected ls_sec_field-field_category = 'TEXT'.
** 2) Standard secondary field: added as a new selectable field** in the sidebar* ls_sec_field-field_category = 'FIELD'.
** 3) Tech field: hidden secondary field that can be used for** selection of other secondary fields* ls_sec_field-field_category = 'TECH'.** if key fields are language dependent, set ID_LANGUAGE_KEY = 'X'** and provide the language-dependent field name ID_LANGUAGE_FIELD** then sy-langu will automatically be used to determine the texts
** Determination of text fields via DD08L/DD03L IF id_tabname IS NOT INITIAL AND id_db_name IS INITIAL. ls_sec_field-tabname = id_tabname.
ld_ddobjname = id_tabname. CALL FUNCTION 'DDIF_TABL_GET' EXPORTING name = ld_ddobjname TABLES dd08v_tab = lt_dd08v.
READ TABLE lt_dd08v WITH KEY frkart = 'TEXT' INTO ls_dd08v.
ld_db_name = ls_dd08v-fieldname.
** Key fields of the text table CLEAR ls_key. ls_key-db_name = ld_db_name. ls_key-source = id_primary_field.** Language dependent key field IF id_language_field IS NOT INITIAL. CLEAR ls_key. ls_key-db_name = id_language_field. ls_key-is_language = id_language_key. ls_key-source = 'SY-LANGU'. ENDIF. APPEND ls_key TO ls_sec_field-key_fields.
SELECT SINGLE fieldname FROM dd03l INTO ls_sec_field-db_name WHERE tabname = id_tabname AND keyflag = space. "#EC CI_NOORDER
** Determination of text fields via domain ELSEIF id_domname IS NOT INITIAL. ls_sec_field-domname = id_domname.
** Determination of text field via explicit text table and field ELSEIF id_tabname IS NOT INITIAL AND id_db_name IS NOT INITIAL. ls_sec_field-tabname = id_tabname. ls_sec_field-db_name = id_db_name. CLEAR ls_key.ld_ddobjname = id_tabname. ld_fieldname = COND #( WHEN id_fieldname IS SUPPLIED THEN id_fieldname ELSE id_primary_field ).