您可以使用CASTING TYPE
構造完成此任務。這是基於RTTS樣品溶液:
FIELD-SYMBOLS <table> TYPE any.
DATA: fieldtab LIKE TABLE OF dfies,
r_type_struct TYPE REF TO cl_abap_structdescr,
handle TYPE REF TO data.
DATA: lref_struct TYPE REF TO cl_abap_structdescr,
lref_table TYPE REF TO cl_abap_tabledescr.
DATA: lit_component_table TYPE cl_abap_structdescr=>component_table,
lwa_component_table LIKE LINE OF lit_component_table.
SELECT DISTINCT *
FROM cdpos
INTO TABLE @DATA(t_cdpos)
UP TO 100 ROWS.
* looping original table
LOOP AT t_cdpos ASSIGNING FIELD-SYMBOL(<fs_cdpos>).
* get key fields of table
CALL FUNCTION 'GET_KEY_FIELDS_OF_TABLE'
EXPORTING
tabname = <fs_cdpos>-tabname
mandt_needed = 'X'
TABLES
key_fieldtab = fieldtab.
* get table structure
lref_struct ?= cl_abap_structdescr=>describe_by_name(<fs_cdpos>-tabname).
lit_component_table = lref_struct->get_components().
* remove non-key fields
LOOP AT lit_component_table ASSIGNING FIELD-SYMBOL(<fs_struct>).
READ TABLE fieldtab WITH KEY fieldname = <fs_struct>-name TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
DELETE lit_component_table.
ENDIF.
ENDLOOP.
* create key fields type handle
TRY.
r_type_struct = cl_abap_structdescr=>create(lit_component_table).
CATCH cx_sy_struct_creation .
ENDTRY.
* create key type
CREATE DATA handle TYPE HANDLE r_type_struct.
ASSIGN handle->* TO <table>.
* assigning final key structure
ASSIGN <fs_cdpos>-tabkey TO <table> CASTING TYPE HANDLE r_type_struct.
ENDLOOP.
UPD:什麼內容是關於處理結果的結構OP的問題,由名人們不能滿足其組件(如WERKS),作爲一個不能預先其類型知道,因爲它動態變化。您應該訪問的結構組件,如:
ASSIGN COMPONENT 1 OF STRUCTURE <table> TO <component>.
另一個更強大的變種將使用板式把手r_type_struct
其中包含的所有字段components[]
表:
LOOP AT r_type_struct->components[] ASSIGNING FIELD-SYMBOL(<fs_comp>).
ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE <table> TO <component>.
IF <COMPONENT> IS ASSIGNED.
"do smth
ENDIF.
ENDLOOP.
您想要移動的重點領域? –
@lausek是的,我的要求是將關鍵字段分解爲結構格式,不推薦使用偏移量,因爲tabname會動態更改。 –