인터널 테이블로
LVC_FIELDCATALOG_MERGE 펑션을 사용할려면 어떻게 사용해야 되나요?
인터널 테이블을 넣으니까 오류가 발생하던데, 사용법이나 원인을 가르쳐주세요.
PERFORM lvc_fieldcatalog_merge USING 'ZSTS0002' " or 'ITAB'
CHANGING gt_fieldcat_lvc.
*&---------------------------------------------------------------------*
*& Form lvc_fieldcatalog_merge
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0653 text
* <--P_GT_FIELDCAT_LVC text
*----------------------------------------------------------------------*
FORM lvc_fieldcatalog_merge USING p_table
CHANGING pt_fieldcat_lvc.
DATA : l_table LIKE dd02l-tabname.
l_table = p_table.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
i_structure_name = l_table
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME = l_table
CHANGING
ct_fieldcat = pt_fieldcat_lvc
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.
ENDFORM. " LVC_FIELDCATALOG_MERGE
----------------------------------------------------------------------------------
소스는 위와 같구요. ZSTS0002 는 Structure 이름 입니다.
인터널 테이블일 경우 어떤 방법으로 사용해야 되는지 궁금합니다.
* I_INTERNAL_TABNAME = l_table <--- 이 부분에 인터널 테이블 명을 적어도 오류가 발생함.
LVC_FIELDCATALOG_MERGE 펑션으로 인터널테이블 머지는 안되구요..오로지 아밥 딕셔너리에 있는
스트럭쳐만 가능합니다.
인터널테이블 머지를 위해서는 REUSE_ALV_FIELDCATALOG_MERGE 이것을 사용해야 합니다.
단 주의할점은 LVC_FIELDCATALOG_MERGE는 CLASS용(LVC_T_FCAT)이고
REUSE_ALV_FIELDCATALOG_MERGE는 Function용(SLIS_T_FIELDCAT_ALV)이라 두개 구조가 틀리죠.
그러므로 CLASS로 구현하는 ALV에서 REUSE_ALV_FIELDCATALOG_MERGE를 사용하려면
약간의 컨버전 작업이 필요한데요.
LVC_TRANSFER_FROM_SLIS 이 펑션으로 컨버전 작업(펑션용 fcat -> 클래스용 fcat)을 해주고
'LVC_FIELDCAT_COMPLETE 이 펑션으로 마무리 해주면 됩니다.
=============================================================
FORM lvc_fieldcatalog_merge USING p_table
CHANGING pt_fieldcat_lvc.
DATA : lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA : lt_alv_cat TYPE TABLE OF lvc_s_fcat.
DATA : l_table LIKE dd02l-tabname.
l_table = p_table.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = l_table
i_inclname = sy-repid
CHANGING
ct_fieldcat = lt_fieldcat[].
CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
EXPORTING
it_fieldcat_alv = lt_fieldcat
IMPORTING
et_fieldcat_lvc = lt_alv_cat
TABLES
it_data = l_table.
CALL FUNCTION 'LVC_FIELDCAT_COMPLETE'
CHANGING
ct_fieldcat = lt_alv_cat.
REFRESH pt_fieldcat_lvc.
pt_fieldcat_lvc[] = lt_alv_cat[].
ENDFORM. " LVC_FIELDCATALOG_MERGE