在线申报的 ALV 网格
ALV Grid for In-Line Declaration
如何在 ALV 网格中显示行内声明的数据类型?
例如:
SELECT *
INTO TABLE @DATA(lt_result)
FROM table.
如何在 ALV 网格中显示 lt_result
?
无论您如何创建 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.
使用范围 table 从 table dd04t 获取字段描述。
然后在lo_struct->components
处再次循环,将fieldname和description填入field catalog。
您还可以在此处为任何给定字段添加特殊逻辑。
这是一个基本示例:
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' 更现代的方法,您不需要定义字段目录。
如何在 ALV 网格中显示行内声明的数据类型?
例如:
SELECT *
INTO TABLE @DATA(lt_result)
FROM table.
如何在 ALV 网格中显示 lt_result
?
无论您如何创建 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.
使用范围 table 从 table dd04t 获取字段描述。
然后在lo_struct->components
处再次循环,将fieldname和description填入field catalog。
您还可以在此处为任何给定字段添加特殊逻辑。
这是一个基本示例:
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' 更现代的方法,您不需要定义字段目录。