Code: Alles auswählen.
data: lt_dfies type DFIES occurs 0 with header line,
ls_dfies type dfies,
lt_bkpf type bkpf occurs 0 with header line,
ls_fieldcatalog type LVC_S_FCAT,
lt_fieldcatalog type lvc_t_fcat.
data: test type ref to data,
my_table type ref to data.
field-symbols: <fs> type any,
<ls_bkpf> type any,
<mytab> type table.
create data test type ('BKPF').
assign test->* to <fs>.
CALL FUNCTION 'DDIF_NAMETAB_GET'
EXPORTING
tabname = 'BKPF'
TABLES
dfies_tab = lt_dfies
EXCEPTIONS
NOT_FOUND = 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.
LOOP AT lt_dfies INTO ls_dfies.
MOVE-CORRESPONDING ls_dfies TO ls_fieldcatalog.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ENDLOOP.
* Tabelle mit Feldkatalog erstellen
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_fieldcatalog
IMPORTING
ep_table = my_table
.
assign my_table->* to <mytab>.
select * from bkpf up to 100 rows into table lt_bkpf.
loop at lt_bkpf assigning <ls_bkpf>.
CALL FUNCTION 'Z_FIELD_MAPPER'
EXPORTING
IS_SOURCESTRUCTURE = <ls_bkpf>
IMPORTING
ES_TARGETSTRUCTURE = <fs>
TABLES
IT_FIELDLIST = lt_dfies
.
append <fs> to <mytab>.
endloop.
break-point.
Code: Alles auswählen.
FUNCTION Z_FIELD_MAPPER.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" REFERENCE(IS_SOURCESTRUCTURE) TYPE ANY
*" EXPORTING
*" REFERENCE(ES_TARGETSTRUCTURE) TYPE ANY
*" TABLES
*" IT_FIELDLIST STRUCTURE DFIES
*"----------------------------------------------------------------------
DATA: ls_fieldlist TYPE dfies,
lv_lines TYPE i.
FIELD-SYMBOLS: <lf_sourcefield> TYPE ANY,
<lf_targetfield> TYPE ANY.
CLEAR: lv_lines, ls_fieldlist.
DESCRIBE TABLE it_fieldlist LINES lv_lines.
IF lv_lines IS INITIAL.
EXIT.
ENDIF.
LOOP AT it_fieldlist INTO ls_fieldlist.
ASSIGN COMPONENT ls_fieldlist-fieldname OF STRUCTURE
is_sourcestructure TO <lf_sourcefield>.
IF sy-subrc EQ 0.
ASSIGN COMPONENT ls_fieldlist-fieldname OF STRUCTURE
es_targetstructure TO <lf_targetfield>.
IF sy-subrc EQ 0.
<lf_targetfield> = <lf_sourcefield>.
ENDIF.
ENDIF.
UNASSIGN: <lf_sourcefield>, <lf_targetfield>.
CLEAR ls_fieldlist.
ENDLOOP.
ENDFUNCTION.
Code: Alles auswählen.
loop at it_fieldlist into ls_fieldlist.
***************************eingefügt**************
IF ls_fieldlist-inttype EQ 'P'.
ls_fieldlist-inttype = 'C'.
ls_fieldlist-datatype = 'CHAR'.
ls_fieldlist-decimals = 0.
MODIFY it_fieldlist FROM ls_fieldlist.
ENDIF.
***************************eingefügt**************
assign component ls_fieldlist-fieldname
of structure is_sourcestructure to <lf_sourcefield>.
if sy-subrc eq 0.
assign component ls_fieldlist-fieldname
of structure es_targetstructure to <lf_targetfield>.
if sy-subrc eq 0.
<lf_targetfield> = <lf_sourcefield>.
endif.
endif.
unassign: <lf_sourcefield>, <lf_targetfield>.
clear ls_fieldlist.
endloop.
Code: Alles auswählen.
ASSIGN COMPONENT ls_fieldlist-fieldname
OF STRUCTURE es_targetstructure TO <lf_targetfield>
TYPE 'C'.
Code: Alles auswählen.
LOOP AT ct_dfies INTO ls_dfies.
IF ls_dfies-inttype EQ 'P'.
ls_dfies-inttype = 'C'.
ls_dfies-datatype = 'CHAR'.
ls_dfies-decimals = 0.
MODIFY ct_dfies FROM ls_dfies.
ENDIF.
* Feldkatalog von p_struct
MOVE-CORRESPONDING ls_dfies TO ls_fieldcatalog.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ENDLOOP.
* Tabelle mit Feldkatalog von p_struct erstellen
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_fieldcatalog
IMPORTING
ep_table = my_table
.
* Zuweisung des Datenobjekts an das Feldsymbol (Dereferenzierung).
ASSIGN my_table->* TO <lt_table>.
Code: Alles auswählen.
CREATE DATA dref LIKE LINE OF <lt_table>.
ASSIGN dref->* TO <fs>.