2010 Feb 25 4:12 AM
I have a dynamic structure of a dynamic table. I want to loop thru table and check if there is field name 'ABC' exist in the structure. If it exists, depending on value of the field I will change value of another field in the structure.
For example if field struct-fieldname = 'ABC ' and field value = 'S', I will display field XYZ (struct-xyz) as positive, otherwise display as negative. Can this be achieved using dynamic structure and dynamic table via field symbol? Thanks
Hi Valerie,
Glad to hear you solved this issue but for those who are not aware you can declare <fs_components> as <fs_components> type abap_compdescr.
You can declare lv_name as string.
lv_name = <fs_components>-name.
So here in LV_NAME you will get the feild name of any dynamic Structure. Now using Assign Component you can get the values from the structure.
Regards,
Jayesh
2010 Feb 25 5:26 AM
hello ,
try like this
data:
ls_comp type abap_componentdescr,
ls_stru type ref to cl_abap_structdescr,
lt_comp type standard table of abap_componentdescr.
ls_stru ?= cl_abap_typedescr=>describe_by_data(<FS1>).
lt_comp = ls_stru->get_components( ).
internal table lt_comp with have both field name , values as well.
loop at lt_comp into ls_comp.
ls_comp-name -->fieldname
assign component sy-tabix
of structure i_copaitem
to <fs_value>.--->fieldvalue
endloop.
regards
Prabhu
2010 Mar 10 11:57 AM
Hi,
you can use the below code snippet
FIELD-SYMBOLS : <lv_value> TYPE any.
ASSIGN COMPONENT 'ABC' of STRUCTURE struc to <lv_value>.
IF sy-subrc = 0.
IF <lv_value> IS INITIAL.
ENDIF.
ENDIF.
This will read the value of field 'ABC' from your structure to <lv_value>
2010 Mar 11 9:05 AM
Hi,
You can try this
DATA: tb_struct TYPE REF TO cl_abap_structdescr,
tb_comp TYPE abap_component_tab.
* Populate the fields of wa_pc_model_data2
tb_struct ?=
cl_abap_typedescr=>describe_by_data( wa_pc_model_data2 ).
LOOP AT tb_struct->components ASSIGNING <fs_components>.
wf_var1 = <fs_components>-name.
PERFORM fill_fields USING wf_var1
wa_pc_model_data2
CHANGING wf_update_coc.
CLEAR: wf_var1.
ENDLOOP.
CLEAR tb_struct.
UNASSIGN: <fs_components>,
<fs>,
<fs_name>.
FORM fill_fields USING pf_wf_var1
pf_wa_pc_data_field
CHANGING pf_wf_update_coc.
** Assign the component of the structure to the field symbol
ASSIGN COMPONENT pf_wf_var1
OF STRUCTURE pf_wa_pc_data_field TO <fs_name>.
IF sy-subrc = 0.
ASSIGN COMPONENT pf_wf_var1
OF STRUCTURE wa_coc_tech TO <fs>.
IF sy-subrc = 0.
** Check if the IDOC data is filled
** Also check if the IDOC and database table data are same
IF NOT <fs_name> IS INITIAL AND "IDOC data
<fs_name> NE <fs>. "IDOC data NE database table data
<fs> = <fs_name>. "Update database field from IDOC field
pf_wf_update_coc = 'X'. "Set the flag
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " fill_fields
2010 Mar 11 2:19 PM
Thanks, but your code gave me compilation errors due to no data definition for: <fs_components>
If I declare <fs_components> as any,
there will be no component name <fs_components>-name.
Also what is wf_var1, wf_update_coc?
Anyway, I solved the problem. I just loop at the dynamic structure check if the component field name 'XXX' and 'YYY' exist, if both field name exist,
then I can change value via command
assign component 'XXX' of structure <fs> to <fval>.
assign component 'YYY' of structure <fs> to <fval2>.
if <fval> = 'H'.
<fval2> = <fval2> * - 1.
endif.
thanks all for your help.
2020 Mar 17 3:42 PM
Hi Valerie,
Glad to hear you solved this issue but for those who are not aware you can declare <fs_components> as <fs_components> type abap_compdescr.
You can declare lv_name as string.
lv_name = <fs_components>-name.
So here in LV_NAME you will get the feild name of any dynamic Structure. Now using Assign Component you can get the values from the structure.
Regards,
Jayesh
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |