我想在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.
但显然我的演员知识生锈了,因为我无法找到合适的解决方案。
这是我目前的等级制度 - 红色箭头表示我必须采取的方式:
我的方法如下:
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 )
隐藏各个列仍然会在布局管理器中显示它们 - 这看起来非常难看。
还有其他方法可以实现我的目标吗?
答案 0 :(得分:1)
使用set_technical( abap_true )
完全隐藏列。至于你的方法 - 对不起,继承不能那样工作 - 我知道没有静态类型的面向对象语言。您无法将实例化对象“重铸”到其他类。您需要广泛修改框架以支持它。