ALV Field catalog(필드 카탈로그) 생성 서브루틴
#2023.11.06 : CL_SALV_DDIC의 참조테이블/참조필드 정보가 기존 다른 Function/Class와 상이하여 소스 일부 수정
*&---------------------------------------------------------------------*
*& Form CM_CREATE_FIELD_CAT_BY_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM cm_create_field_cat_by_itab USING pt_outtab
CHANGING pt_fieldcat TYPE lvc_t_fcat.
CLEAR pt_fieldcat[].
DATA ls_fieldcat TYPE lvc_s_fcat.
DATA: lv_ftype TYPE c,
lv_comps TYPE i.
DATA: ld_data TYPE REF TO data,
ld_line TYPE REF TO data.
FIELD-SYMBOLS: <lft_outtab> TYPE ANY TABLE,
<lfs_outtab> TYPE any.
DESCRIBE FIELD pt_outtab TYPE lv_ftype COMPONENTS lv_comps.
IF lv_ftype EQ cl_abap_typedescr=>typekind_table.
CREATE DATA ld_data LIKE pt_outtab.
ASSIGN ld_data->* TO <lft_outtab>.
CREATE DATA ld_line LIKE LINE OF <lft_outtab>.
ASSIGN ld_line->* TO <lfs_outtab>.
ELSE.
ASSIGN pt_outtab TO <lfs_outtab>.
ENDIF.
LOOP AT cl_salv_ddic=>get_by_data( pt_outtab ) INTO DATA(ls_dfies).
IF ls_dfies-lfieldname IS NOT INITIAL. "STRUCTURE
ls_fieldcat = CORRESPONDING #( ls_dfies
MAPPING key = keyflag
ref_table = precfield
ref_field = lfieldname
EXCEPT rollname tabname ).
ELSE.
ls_fieldcat = CORRESPONDING #( ls_dfies
MAPPING key = keyflag
ref_table = reftable
ref_field = reffield
EXCEPT tabname ).
ENDIF.
ls_fieldcat-col_pos = sy-tabix.
IF ls_fieldcat-datatype EQ 'CLNT'.
ls_fieldcat-tech = 'X'.
ENDIF.
IF ls_fieldcat-ref_table IS INITIAL." AND ls_fieldcat-f4availabl EQ abap_true.
ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE <lfs_outtab> TO FIELD-SYMBOL(<lfv>).
DESCRIBE FIELD <lfv> HELP-ID DATA(lv_helpid).
IF lv_helpid CS '-'.
CLEAR ls_fieldcat-rollname.
SPLIT lv_helpid AT '-' INTO ls_fieldcat-ref_table DATA(lv_ref_field).
IF ls_fieldcat-fieldname NE lv_ref_field.
ls_fieldcat-ref_field = lv_ref_field.
ENDIF.
ELSE.
CLEAR ls_fieldcat-f4availabl.
ENDIF.
ENDIF.
IF ls_dfies-reftable EQ ls_dfies-precfield AND ls_dfies-reffield IS NOT INITIAL.
CASE ls_fieldcat-datatype.
WHEN 'CURR'.
ls_fieldcat-cfieldname = ls_dfies-reffield.
WHEN 'QUAN'.
ls_fieldcat-qfieldname = ls_dfies-reffield.
ENDCASE.
ENDIF.
IF ls_fieldcat-coltext IS INITIAL AND ls_fieldcat-reptext IS INITIAL AND ls_fieldcat-scrtext_l IS INITIAL AND ls_fieldcat-scrtext_m IS INITIAL AND ls_fieldcat-scrtext_s IS INITIAL.
ls_fieldcat-coltext = ls_dfies-fieldtext.
ENDIF.
APPEND ls_fieldcat TO pt_fieldcat.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CM_CREATE_FIELD_CAT_BY_DDIC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM cm_create_field_cat_by_ddic USING pv_ddicname
CHANGING pt_fieldcat TYPE lvc_t_fcat.
DATA: lt_dd03t TYPE SORTED TABLE OF dd03t WITH UNIQUE KEY fieldname ddlanguage.
CLEAR pt_fieldcat[].
CLEAR: lt_dd03t.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
i_structure_name = pv_ddicname
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER = abap_true
* I_INTERNAL_TABNAME =
CHANGING
ct_fieldcat = pt_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
SELECT
fieldname, ddlanguage, ddtext
FROM dd03t
WHERE tabname EQ @pv_ddicname
AND as4local EQ 'A'
AND ddlanguage IN ( @sy-langu, 'E' )
INTO CORRESPONDING FIELDS OF TABLE @lt_dd03t.
LOOP AT pt_fieldcat ASSIGNING FIELD-SYMBOL(<lfs>).
<lfs>-col_pos = sy-tabix.
IF <lfs>-coltext IS INITIAL AND <lfs>-reptext IS INITIAL AND <lfs>-scrtext_l IS INITIAL AND <lfs>-scrtext_m IS INITIAL AND <lfs>-scrtext_s IS INITIAL.
READ TABLE lt_dd03t INTO DATA(ls_dd03t) WITH TABLE KEY fieldname = <lfs>-fieldname
ddlanguage = sy-langu.
IF sy-subrc NE 0.
READ TABLE lt_dd03t INTO ls_dd03t WITH TABLE KEY fieldname = <lfs>-fieldname
ddlanguage = 'E'.
ENDIF.
IF sy-subrc EQ 0.
<lfs>-coltext = ls_dd03t-ddtext.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
ABAP
'ABAP > 소스코드' 카테고리의 다른 글
[Form] Report 프로그램에 백그라운드 작업 정보 표시 (0) | 2023.09.20 |
---|---|
[Report] 엑셀 데이터로 Table Insert(Modify) 프로그램 (0) | 2023.09.06 |
[Report] Customer Exit(SMOD) 및 BAdI 찾는 리포트 (0) | 2023.07.20 |
[Function] Internal Table 엑셀 다운로드(XLSX 형식) (0) | 2023.07.11 |
[Function] ZCM_EXCEL_UPLOAD - 필드 점검 및 변환 엑셀 업로드 (3) | 2023.07.10 |
댓글