循环进入具有动态字段名称的循环

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.