2017-10-12 46 views
-1

我有類型fieldsymbol的strucutre =數據 FIELD-SYMBOLS: <fs_it_orignal> TYPE data.檢查fieldsymbol

然後我填動態填充字段符號<fs_it_orignal> = some_values.

some_value可以是結構A B或C中的。

我一直在尋找,檢查的最佳方式,其中<fs_it_orignal>是結構AB或C.

+0

你有一組特定的類型或可能它是任何:剛剛知道,如果字段符號是某種類型後,可以通過比較結構的名稱,這樣做你字典中的東西? – 2017-10-12 14:03:23

+2

「填充」不夠精確。用=表示值,但爲了使字段符號工作,需要首先分配一個目標變量,這就是決定底層結構的原因。所以,請不要只發布不完整的片段,而是一個完整的例子來說明實際問題。 – vwegert

回答

-2

我有一個不是很複雜的提案由於缺少需求的...

DATA: 
lro_struc_a   TYPE REF TO cl_abap_structdescr, 
lro_struc_b   TYPE REF TO cl_abap_structdescr, 
lro_struc_c   TYPE REF TO cl_abap_structdescr, 
lro_struc_o   TYPE REF TO cl_abap_structdescr, 
lt_data_comp_a   TYPE cl_abap_structdescr=>component_table, 
lt_data_comp_b   TYPE cl_abap_structdescr=>component_table, 
lt_data_comp_c   TYPE cl_abap_structdescr=>component_table, 
lt_data_comp_o   TYPE cl_abap_structdescr=>component_table. 

"analyze every structure 
lro_struc_a ?= cl_abap_typedescr=>describe_by_data(ls_struc_a). 
lro_struc_b ?= cl_abap_typedescr=>describe_by_data(ls_struc_b). 
lro_struc_c ?= cl_abap_typedescr=>describe_by_data(ls_struc_c). 
lro_struc_o ?= cl_abap_typedescr=>describe_by_data(<fs_it_orignal>). 

"get list of fields per structure 
lt_data_comp_a = lro_struc_a->get_components(). 
lt_data_comp_b = lro_struc_b->get_components(). 
lt_data_comp_c = lro_struc_c->get_components(). 
lt_data_comp_o = lro_struc_o->get_components(). 

*insert comparison depending on number of fields, names (respecting order) or types according to your requirement 
1

如果您

field-symbols: <fs_it_orignal> type any. 

"-- Code here to assign your FS to something 

case replace(val = cl_abap_typedescr=>describe_by_data(<fs_it_orignal>)->absolute_name 
       regex = '\\TYPE=' with = ''). 
    when 'Z_STRUCT_A'. 
    "-- Do what ever 
    when 'Z_STRUCT_B'. 
    "-- Do what ever 
    when 'Z_STRUCT_C'. 
    "-- Do what ever 
endcase.