繁体   English   中英

带有 cl_salv_table 类的参数 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 TABLESORTED TABLE中表示(排序可以在任何列上)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM