循环进入具有动态字段名称的循环
loop into loop with dynamic field name
问题:我有 2 个这样的 table:
TABLE 1: HR table 有很多列和行
TABLE 2 :
table 包含我需要从中读取的列列表 table 1
In table 1 我需要循环所有行,我需要检查 table 中的所有字段 2,如果字段中有“X”,我需要打印字段描述来自 table 2.
我尝试使用嵌套循环(循环 table 1,每个循环迭代循环 table 2 并检查该行的所有字段)并且我不能在 table-(我需要循环变量)。
我的代码:
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'
我无法使用循环中的动态字段名称。
谢谢。
使用这样的东西:
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-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.
我使用 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.
问题:我有 2 个这样的 table:
TABLE 1: HR table 有很多列和行
TABLE 2 : table 包含我需要从中读取的列列表 table 1
In table 1 我需要循环所有行,我需要检查 table 中的所有字段 2,如果字段中有“X”,我需要打印字段描述来自 table 2.
我尝试使用嵌套循环(循环 table 1,每个循环迭代循环 table 2 并检查该行的所有字段)并且我不能在 table-(我需要循环变量)。
我的代码:
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'
我无法使用循环中的动态字段名称。
谢谢。
使用这样的东西:
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-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.
我使用 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.