簡體   English   中英

從字段符號獲取字段名稱

[英]Getting the fieldnames from the field-symbols

我需要在字段符號<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.

這是錯誤; 在此處輸入圖片說明

因為<itab>顯然是一個內部表 ,所以它的類型是“表”,而不是“結構”! (另請參見簡短轉儲,它說describe_by_data返回的類型cl_abap_tabledescr與目標go_struct的類型不兼容,即cl_abap_structdescr

因此,您必須首先獲取其表類型,然后獲取其行的類型(我在這里假設它是結構化類型,但在某些其他情況下也可以是其他類型)。

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

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

當您將引用類型分配給另一個引用類型時,您將得到轉儲。 定義結構類型並像下面的示例中那樣傳遞。 您將不會得到任何轉儲。

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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM