如何在SALV表上调用remove_column?

时间:2016-11-16 15:10:22

标签: abap

我想在remove_column的实例上执行方法cl_salv_column_table,但由于其可见性级别,我无法这样做。

安排:

我已经尝试从cl_salv_columns_list继承,然后在remove - 方法中执行调用:

CLASS lcl_columns_list DEFINITION INHERITING FROM CL_SALV_COLUMNS_LIST.
    PUBLIC SECTION.
    METHODS:
        remove IMPORTING iw_colname TYPE string.
ENDCLASS.

但显然我的演员知识生锈了,因为我无法找到合适的解决方案。

这是我目前的等级制度 - 红色箭头表示我必须采取的方式:

enter image description here

我的方法如下:

DATA lo_column_list TYPE REF TO lcl_columns_list.
lo_column_list ?= CAST cl_salv_columns_list( lo_columns ).

但它失败了:

CX_SY_MOVE_CAST_ERROR
Source type: \CLASS=CL_SALV_COLUMNS_TABLE
Target type: "\PROGRAM=XXX\CLASS=LCL_COLUMNS_LIST"

背景

我的任务是选择3个表中的所有列(这些列将像SELECT t1~*, t2~*, t3~* ...一样完成),只要它们的名称不冲突(例如,字段MANDT应该只显示一次)。这将需要定义一个非常大的结构,并将选择列表的大小调到最大。

为了避免这种情况,我想利用我的内联声明生成的类型。通过set_visible( abap_false )隐藏各个列仍然会在布局管理器中显示它们 - 这看起来非常难看。

还有其他方法可以实现我的目标吗?

1 个答案:

答案 0 :(得分:1)

使用set_technical( abap_true )完全隐藏列。至于你的方法 - 对不起,继承不能那样工作 - 我知道没有静态类型的面向对象语言。您无法将实例化对象“重铸”到其他类。您需要广泛修改框架以支持它。