[英]ALV Grid for In-Line Declaration
如何在 ALV 網格中顯示內嵌聲明的數據類型?
例如:
SELECT *
INTO TABLE @DATA(lt_result)
FROM table.
lt_result
如何顯示在 ALV 網格中?
這是一個基本示例:
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”更現代的方法,您不需要定義字段目錄。
無論您如何創建 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.
使用范圍表從表 dd04t 中獲取字段描述。
然后再次在lo_struct->components
處循環,並用 fieldname 和 description 填充字段目錄。 您還可以在此處為任何給定字段添加特殊邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.