2017-10-12 3 views
-1

J'ai un fieldsymbol avec type = données FIELD-SYMBOLS: <fs_it_orignal> TYPE data.Vérifier strucutre de fieldsymbol

Puis-je remplir remplir dynamiquement le symbole de champ <fs_it_orignal> = some_values.

ce some_value peut être soit de la structure A B ou C.

Je cherchais la meilleure façon de vérifier où la <fs_it_orignal> est de la structure AB ou C.

+0

Avez-vous un certain nombre de types ou pourrait-il en être chose dans votre dictionnaire? –

+2

"Remplir" n'est pas assez précis. Avec =, vous affectez des valeurs, mais pour qu'un champ-symbole fonctionne, vous devez d'abord affecter une variable cible, et c'est ce qui détermine la structure sous-jacente. Alors s'il vous plaît, ne pas seulement poster des fragments incomplets, mais un exemple complet qui démontre le problème réel. – vwegert

Répondre

-2

J'ai pas très sophistiqué proposition en raison des exigences manquantes ...

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

Si vous sont juste après savoir si le symbole de champ est d'un certain type, vous pouvez le faire en comparant le nom de la structure:

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.