如何在ALV网格中显示内联声明的数据类型?
例:
SELECT *
INTO TABLE @DATA(lt_result)
FROM table.如何在ALV网格中显示lt_result?
发布于 2018-01-19 16:25:26
下面是一个基本的例子:
DATA: alv TYPE REF TO cl_salv_table.
SELECT *
INTO TABLE @DATA(lt_result)
FROM table.
cl_salv_table=>factory( IMPORTING r_salv_table = alv
CHANGING t_table = lt_result ).
alv->display( ).您可以在包SALV_OM_OBJECTS中使用SALV对象模型找到其他示例。
这是一种比使用'REUSE_ALV_GRID_DISPLAY‘更现代的方法,您不需要定义字段目录。
发布于 2018-01-19 14:16:59
不管您是如何创建lt_result的,您都必须做同样的事情。如您的示例中所示,select *将导致lt_result等于如果您执行DATA lt_result type table of tablename
在这种情况下,您可以发送结构的名称。但是,只有在SE11中定义了结构类型时,即在没有任何联接或别名的情况下才能执行select *。
否则,您必须创建并发送一个字段目录,其中包含您希望显示的lt_result中的所有字段。
示例:
SELECT * FROM mara
UP TO 10 ROWS
INTO TABLE @DATA(lt_mara).
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_structure_name = 'MARA'
* it_fieldcat => use this if i_structure_name is not sufficient
TABLES
t_outtab = lt_mara
EXCEPTIONS
OTHERS = 1.如果使用cl_gui_alv_grid,同样的情况也适用。
编辑:您可以像这样动态地填充字段目录:
DATA:
lo_t_struct TYPE REF TO cl_abap_tabledescr,
lo_struct TYPE REF TO cl_abap_structdescr.
lo_t_struct ?= cl_abap_tabledescr=>describe_by_data( lt_result ).
lo_struct ?= lo_t_struct->get_table_line_type( ).
LOOP AT lo_struct->components ASSIGNING FIELD-SYMBOL(<comp>).
"Fill a range-table with <comp>-name
ENDLOOP.使用range表从表dd04t获取字段描述。
然后再次在lo_struct->components循环,并用字段名和描述填充字段目录。在这里,您还可以为任何给定字段添加特殊逻辑。
https://stackoverflow.com/questions/48319296
复制相似问题