![](/img/trans.png)
[英]Displaying a table with cl_salv_table: "itab is not type compatible with formal parameter t_table"
[英]Sorted table with parameter t_table of cl_salv_table class
如果我使用内部表作为标准表,参数 T_TABLE 通常接受,但是当我声明为排序表时,会发生此错误:“ITUSER”与形式参数“T_TABLE”不类型兼容。
你们能帮我确定为什么会发生这种情况吗?
TABLES: USER_ADDR,USR41.
TYPES: BEGIN OF LINE02_TYPE,
Z_BNAME TYPE USER_ADDR-BNAME,
Z_NAME TYPE USER_ADDR-NAME_FIRST,
Z_LAST TYPE USER_ADDR-NAME_LAST,
Z_TERMI TYPE USR41-TERMINAL,
Z_LASTD TYPE USR41-LOGON_DATE,
Z_KOSTL TYPE USER_ADDR-KOSTL,
END OF LINE02_TYPE.
DATA: ITUSER TYPE SORTED TABLE OF LINE02_TYPE WITH UNIQUE KEY Z_BNAME,
"ITUSER TYPE standard TABLE OF line02_type,
R_TABLE TYPE REF TO CL_SALV_TABLE.
START-OF-SELECTION.
SELECT A~BNAME A~NAME_FIRST A~NAME_LAST B~TERMINAL B~LOGON_DATE A~KOSTL FROM USER_ADDR AS A
LEFT JOIN USR41 AS B ON B~BNAME = A~BNAME
INTO TABLE ITUSER.
CALL METHOD CL_SALV_TABLE=>FACTORY
IMPORTING
R_SALV_TABLE = R_TABLE
CHANGING
T_TABLE = ITUSER.
CALL METHOD R_TABLE->DISPLAY.
不幸的是,我没有看到它在任何地方都有记录,但T_TABLE
必须是STANDARD TABLE
。 如果您深入研究FACTORY
方法,则T_TABLE
参数将传递给SET_DATA
方法,该方法需要将表作为STANDARD TABLE
try.
r_salv_table->set_data(
changing
t_table = t_table ).
catch cx_salv_no_new_data_allowed. "#EC NO_HANDLER
endtry.
此外,如果您将参数定义为TABLE
,则意味着STANDARD TABLE
。 这是参考
正如已经指出的那样, factory
的签名正在changing t_table type table
。 TABLE
是一种通用 ABAP 类型,它是说STANDARD TABLE
的旧方式。
这是必需的,因为您通过ALV
执行的操作会反映在表本身上。 当您按下排序按钮时,内部表格也将被排序(因此也会changing
)。 因此,当您获得例如双击事件时,您可以安全地访问my_table[ row ]
,因为它的排序方式与显示给用户的方式相同。 这种排序不能在HASHED TABLE
或SORTED TABLE
中表示(排序可以在任何列上)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.