我想在一个remove_column实例上执行cl_salv_column_table方法,但是由于它的可见性级别,我无法这样做。
计划:
我已经尝试过从cl_salv_columns_list继承,然后在remove-method中执行调用:
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来源类型:\CLASS=CL_SALV_COLUMNS_TABLE目标类型:"\PROGRAM=XXX\CLASS=LCL_COLUMNS_LIST“
背景:
我的任务是选择3个表的所有列(这类似于SELECT t1~*, t2~*, t3~* ...),只要它们的名称不冲突(例如,字段MANDT应该只显示一次)。这将需要定义一个非常大的结构,并将选择列表的大小提高到最大。
为了避免这种情况,我想利用内联声明生成的类型。通过set_visible( abap_false )隐藏单独的列仍然会在布局管理器中显示它们--这看起来很难看。
还有其他方法来完成我的目标吗?
发布于 2016-11-18 07:30:24
使用set_technical( abap_true )完全隐藏列。至于您的方法--对不起,继承不是这样工作的--没有我所知道的静态类型的面向对象语言。您不能将实例化的对象“重铸”到另一个类。您需要对框架进行广泛的修改,以支持这一点。
https://stackoverflow.com/questions/40635572
复制相似问题