簡體   English   中英

用於在線聲明的 ALV 網格

[英]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.

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