如何解决循环进入动态字段名
问题:我有2张这样的桌子:
表1:具有许多列和行的HR表
表2: 表,其中包含我需要从表1中读取的列的列表
在表1中,我需要循环所有行,并且需要检查表2中的所有字段,如果该字段中有“ X”,则需要从表2中打印字段描述。
我尝试使用嵌套循环(循环表1和每个循环迭代循环表2并检查行的所有字段)进行操作,但我无法在表上使用变量-(我需要在循环中使用变量)
我的代码:
LOOP AT lt_hrp9229 INTO ls_hrp9229
LOOP AT lt_otype_fields INTO ls_otype_fields .
IF ls_hrp9229-ls_otype_fields-FIELD_NAME = 'X'.
ev_descript_data = ev_descript_data && ',' && ls_otype_fields-Field_description.
ENDIF.
ENDLOOP.
ENDLOOP.
我在这一行有问题:
IF ls_hrp9229-ls_otype_fields-FIELD_NAME = 'X'
我无法在循环中使用动态字段名称。
谢谢。
解决方法
您可以使用以下代码:
FIELD-SYMBOLS <l_flag> TYPE FLAG.
ASSIGN COMPONENT ls_otype_fields-field_name OF STRUCTURE ls_hrp9229 TO <l_flag>.
IF SY-SUBRC = 0 AND <l_flag> = abap_true.
...
ENDIF.
,
使用类似这样的内容:
DATA: lt_hrp9229 TYPE TABLE OF HRP9229.
DATA: ev_descript_data TYPE string.
SELECT *
FROM dd03l
INTO TABLE @DATA(lt_otype_fields)
WHERE tabname = 'HRP9229'.
LOOP AT lt_hrp9229 ASSIGNING FIELD-SYMBOL(<fs_9229>).
LOOP AT lt_otype_fields ASSIGNING FIELD-SYMBOL(<fs_fields>).
ASSIGN COMPONENT <fs_fields>-fieldname OF STRUCTURE <fs_9229> TO FIELD-SYMBOL(<field_description>).
CHECK sy-subrc = 0.
IF <field_description> = 'OBJID'.
ev_descript_data = ev_descript_data && ',' && <fs_fields>-rollname. " pull your FIELD_DESC here instead
ENDIF.
ENDLOOP.
ENDLOOP.
,
我使用FIeld-Symbol解决了这个问题。
LOOP AT lt_hrp9229 INTO ls_hrp9229.
lv_index = sy-tabix.
LOOP AT lt_s_fields INTO ls_s_fields.
ASSIGN COMPONENT ls_s_fields-field_name OF STRUCTURE ls_hrp9229
TO FIELD-SYMBOL(<ls_s_fields_value>).
IF <ls_s_fields_value> = 'X'.
ev_descript_data = ev_descript_data && ',' && ls_s_fields-field_desc .
ENDIF.
ENDLOOP.
ls_et_hrp9229-descript_data = ev_descript_data.
MODIFY et_hrp9229 INDEX lv_index FROM ls_et_hrp9229 TRANSPORTING descript_data .
CLEAR ev_descript_data.
ENDLOOP.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。