Here is a very simple program that will capture and write a list of the fields and their definitions of a database table that I have explicitly assigned to a variable using the type statement. I have been playing with this code and attempting to dynamically associate a database table structure with a variable, and then using that variable to assign it's structure to a <FS>. Everything that I tried generated a syntax error.
Could somebody please tell me what syntax I need to dynamically associate a database structure with a variable, versus statically?
This is the code.
data: dr_dref type ref to data,
rf_descr_ref type ref to cl_abap_typedescr .
data: <b>wa_vbap type vbak</b>. " DB table reference
field-symbols: <fs> type any.
Assign every field of this structure to the untyped field symbol.
assign component sy-index of structure <b>WA_vbap</b> to <fs>.
if sy-subrc ne 0.
call method cl_abap_typedescr=>describe_by_data
p_data = <fs>
p_descr_ref = rf_descr_ref.
write: / sy-index, rf_descr_ref->type_kind,
here is the code sample. I guess this is what you wanted. right?
REPORT YRTTS. type-pools : abap. data: wa_vbak type vbak . data : it_details type abap_compdescr_tab, wa_comp type abap_compdescr. data : ref_descr type ref to cl_abap_structdescr. ref_descr ?= cl_abap_typedescr=>describe_by_data( wa_vbak ). it_details = ref_descr->components. break-point .
Your code is still explicitly associating a database tablename with a variable. Your code populates an internal table with the database table fields and attributes, just the way I wanted. But, I want to be able to associate the database table name at runtime rather than hard coding it in the program.
What do I need to change in your code to dynamically associate a database table name? Everything I tried previously failed the syntax check.
data: wa_vbak type vbak .
Run this program, enter the structure name that you want the components of and hit execute.
report zrich_0003. type-pools : abap. data : it_details type abap_compdescr_tab, wa_comp type abap_compdescr. parameters: p_type(10) type c. data : ref_descr type ref to cl_abap_structdescr. ref_descr ?= cl_abap_typedescr=>describe_by_name( p_type ). it_details = ref_descr->components. break-point .