从字段符号获取字段名称

时间:2019-01-08 04:31:57

标签: abap

我需要在字段符号<itab>中获取字段名称,以便可以将名称用于ALV的字段目录。

所以我使用了cl_abap_structdescr,但是它总是使我出错。 我尝试使用内部表进行此操作,但达到了预期的结果,但是我必须使用字段符号代替内部表。

ASSIGN lo_itab->* TO <itab>

data: go_struct type ref to cl_abap_structdescr,
      gt_comp   type abap_component_tab,
      gs_comp   type abap_componentdescr.


  go_struct ?= cl_abap_typedescr=>describe_by_data( <itab> ).
  gt_comp = go_struct->get_components( ).

  loop at gt_comp into gs_comp.

      PERFORM fill_fieldcat USING : 
     gs_comp-name      ''       gs_comp-name
   .
  endloop.

这是错误; enter image description here

2 个答案:

答案 0 :(得分:2)

由于const doARequest = require('./modules/doARequest.js').doARequest ... return addPost.addPost(event, doARequest).then(...) 显然是内部表,其类型为“表”,而不是“结构”! (另请参见简短转储,它说<itab>返回的类型describe_by_data与目标cl_abap_tabledescr的类型(即go_struct不兼容)

因此,您必须首先获取其表类型,然后获取其行的类型(我在这里假设它是结构化类型,但在某些其他情况下也可以是其他类型)。

cl_abap_structdescr

答案 1 :(得分:0)

当您将引用类型分配给另一个引用类型时,您将转储。定义结构类型并像下面的示例中那样传递。您将不会得到任何转储。

data: go_struct type ref to cl_abap_structdescr,
      gt_comp   type abap_component_tab,
      gs_comp   type abap_componentdescr.

  DATA ls_spfli TYPE spfli.
  go_struct ?= cl_abap_typedescr=>describe_by_data( ls_spfli ).
  gt_comp = go_struct->get_components( ).

  loop at gt_comp into gs_comp.

*      PERFORM fill_fieldcat USING :
*     gs_comp-name      ''       gs_comp-name
*   .
  endloop.