关于用OO开发ALV中半自动创建输出结构的方法

时间:2022-02-03 18:29:34

一般调用两个FUNCTION 就能实现.

 

1. REUSE_ALV_FIELDCATALOG_MERGE
  用来将内表结构转化为slis_t_fieldcat_alv类型的数据.

2. LVC_TRANSFER_FROM_SLIS
  用来将普通ALV格式等数据转化为面对对象方法所需要的数据.与上面的FUNCTION一起使用.半自动创建ALV显示字段.

 

DATA: ls_fcat TYPE lvc_s_fcat.
DATA: ls_slis_fcat TYPE slis_t_fieldcat_alv.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
   EXPORTING
     i_program_name               = sy-repid
     i_internal_tabname           = 'GT_LIST'
*   i_structure_name             =
*   I_CLIENT_NEVER_DISPLAY       = 'X'
     i_inclname                   = sy-repid
*   I_BYPASSING_BUFFER           =
*   I_BUFFER_ACTIVE              =
    CHANGING
      ct_fieldcat                  = ls_slis_fcat
   EXCEPTIONS
     inconsistent_interface       = 1
     program_error                = 2
     OTHERS                       = 3
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
    EXPORTING
      it_fieldcat_alv       = ls_slis_fcat
*   IT_SORT_ALV           =
*   IT_FILTER_ALV         =
*   IS_LAYOUT_ALV         =
   IMPORTING
     et_fieldcat_lvc       = p_gt_fieldcat[]
*   ET_SORT_LVC           =
*   ET_FILTER_LVC         =
*   ES_LAYOUT_LVC         =
  TABLES
    it_data               = gt_list
 EXCEPTIONS
   it_data_missing       = 1
   OTHERS                = 2
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

 

第一个FUNCTION中的 i_internal_tabname 参数需要注意, 如果是参考工作区的结构生成的内表而不是用OCCURS 申明的话,最好在这个参数后面填上工作区结构名字,事实证明,能达到同样的效果.在使用OO开发ALV时,有一个FUNCTION 名字叫LVC_FIELDCATALOG_MERGE,功能和上面差不多,但貌似无法将内表按结构生成对应的FIELDCAT.