- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以将用户定义的函数添加到 CL_SALV_TREE
实例,而不将 GUI 状态复制到使用该实例的报表?
我想做的是使用 add_function
方法添加自定义函数。
REPORT zzy.
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
main.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD main.
DATA: lt_table TYPE STANDARD TABLE OF t000.
TRY .
cl_salv_tree=>factory(
IMPORTING
r_salv_tree = DATA(lo_salv_tree)
CHANGING
t_table = lt_table
).
DATA(lo_salv_functions) = lo_salv_tree->get_functions( ).
lo_salv_functions->add_function(
name = 'EXPORT_TO_EXCEL'
icon = '@J2@'
tooltip = 'Export as Excel'
position = if_salv_c_function_position=>right_of_salv_functions
).
lo_salv_functions->set_all( abap_true ).
lo_salv_tree->display( ).
CATCH cx_salv_error.
ASSERT 0 = 1.
ENDTRY.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_main=>main( ).
但是该按钮不会出现。
我记得前段时间我尝试使用 CL_SALV_TABLE
执行此操作,但在使用 add_function
时出现了明确的异常。
我当时尝试的是。
REPORT zzy.
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
main.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD main.
DATA: lt_table TYPE STANDARD TABLE OF t000.
TRY .
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_salv_table)
CHANGING
t_table = lt_table
).
DATA(lo_salv_functions) = lo_salv_table->get_functions( ).
lo_salv_functions->add_function(
name = 'EXPORT_TO_EXCEL'
icon = '@J2@'
tooltip = 'Export as Excel file'
position = if_salv_c_function_position=>right_of_salv_functions
).
lo_salv_functions->set_all( abap_true ).
lo_salv_table->display( ).
CATCH cx_salv_error.
ASSERT 0 = 1.
ENDTRY.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_main=>main( ).
它以未处理的异常 CX_SALV_METHOD_NOT_SUPPORTED
引起的短路转储结束。我在SAP标准代码中看到的是
if lr_controller->r_model->get_display_object( )
ne IF_SALV_C_TABLE_OBJECTS=>GRID
and lr_controller->r_model->get_display_object( )
ne IF_SALV_C_TABLE_OBJECTS=>TREE.
text = text-001.
l_name = name.
raise exception type CX_SALV_METHOD_NOT_SUPPORTED
exporting class = 'CL_SALV_FUNCTIONS'
method = 'ENABLE_FUNCTION'
object = l_name
key = text.
endif.
从这段代码中,我们可以假设可以使用 add_function
方法为对象 IF_SALV_C_TABLE_OBJECTS=>TREE
添加一个新函数。
到目前为止,我使用了以下解决方法。
REPORT zzy.
CLASS lcl_controller DEFINITION FINAL.
PUBLIC SECTION.
INTERFACES:
if_salv_csqt_content_manager.
METHODS:
constructor.
DATA:
mo_salv_tree TYPE REF TO cl_salv_tree,
mt_table TYPE STANDARD TABLE OF t000.
ENDCLASS.
CLASS lcl_controller IMPLEMENTATION.
METHOD constructor.
CALL FUNCTION 'SALV_CSQT_CREATE_CONTAINER'
EXPORTING
r_content_manager = me
title = 'Workaround'.
ENDMETHOD.
METHOD if_salv_csqt_content_manager~fill_container_content.
TRY .
cl_salv_tree=>factory(
EXPORTING
r_container = r_container
IMPORTING
r_salv_tree = DATA(mo_salv_tree)
CHANGING
t_table = mt_table
).
DATA(lo_tree_settings) = mo_salv_tree->get_tree_settings( ).
lo_tree_settings->set_hierarchy_header( `Hierarchy` ).
lo_tree_settings->set_hierarchy_size( 30 ).
lo_tree_settings->set_header( |{ sy-title }| ).
DATA(lo_salv_functions) = mo_salv_tree->get_functions( ).
lo_salv_functions->add_function(
name = 'EXPORT_TO_EXCEL'
icon = '@J2@'
tooltip = 'Export as Excel file'
position = if_salv_c_function_position=>right_of_salv_functions
).
lo_salv_functions->set_all( abap_true ).
DATA(lo_salv_nodes) = mo_salv_tree->get_nodes( ).
DATA(lo_root) = lo_salv_nodes->add_node(
related_node = space
relationship = if_salv_c_node_relation=>last_child
data_row = VALUE t000( mandt = '100' )
text = `Test`
).
lo_salv_nodes->add_node(
related_node = lo_root->get_key( )
relationship = cl_gui_column_tree=>relat_last_child
data_row = VALUE t000( mandt = '200' )
text = `Test2`
).
mo_salv_tree->display( ).
CATCH cx_salv_error.
ASSERT 0 = 1.
ENDTRY.
ENDMETHOD.
ENDCLASS.
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
main.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD main.
DATA(lo_controller) = NEW lcl_controller( ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_main=>main( ).
不幸的是,在这种情况下,按钮出现在不同的位置,直接在树之前,而不是在状态栏中。
最佳答案
简短的回答 - 不,你不能,你需要一个 GUI 状态 (CUAD
)。您可以在运行时隐藏函数,但不能在运行时添加新函数。
关于abap - 是否可以在不复制 GUI 状态的情况下向 CL_SALV_TREE 添加用户定义的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36893024/
我经常通过论坛、github 等分享 ABAP 代码,这些代码通常适用于任何 ABAP-based system .不幸的是,经常发生我使用的一些对象(数据库表、类型等)只存在于我正在使用的解决方案中
出于好奇,我尝试创建一个名称为 object 的 ABAP 接口(interface)。编译器给出错误消息 “OBJECT”是 protected 类型名称,因此不能用于用户自己的类型定义。 虽然此检
ABAP 是否有定义的评估顺序?例如,在表达式 foo( ) + bar( ) 中,是否可以保证方法 foo( ) 和 bar( )首先评估/执行?在 ABAP 关键字文档中找不到此类信息。 最佳答案
如何在 ABAP 中进行冒烟和猴子测试?有工具吗? 最佳答案 冒烟测试可以通过使用 eCATT 实现自动化.请注意,创建 eCATT 测试非常耗时,因此您应该事先进行成本效益分析。 我不知道有任何用于
可以在 ABAP 中完成文件操作,例如创建文件吗? 最佳答案 是的,这是可以做到的。您可以使用“打开数据集”/“传输”/“关闭数据集”语句在 ABAP 中进行编码,以在应用程序服务器上创建文件。 您还
假设我有一个包含数据类型名称的变量 (char30),我想创建该数据类型的另一个变量。 例子: lv_type = 'BU_PARTNER' data: rt_value type range of
我有一个 UPDATE声明于 ABAP 看起来像: UPDATE zicstt099 FROM TABLE lt_zicstt099 每次更新都会失败 sy-subrc eq 4 . 数据库表ZICS
我正在寻找 ABAP 开发的标准时间估计表或列表,根据开发团队、项目的复杂性等在某些变量中可定制的东西...... 类似于: Simple Module Pool -> 10 hours Comple
多年来,我用各种语言和环境编写了代码,但有一个不变的似乎是关于断言使用的共识。据我了解,当您想要识别“不可能”的错误和其他情况时,它们就在开发过程中,您的第一 react 是“这不可能是正确的”并且无
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 1年前关闭。 Improve this
有人可以解释等号前的问号是什么意思吗? lo_obj ?= . 最佳答案 ?= 用于显式向下转换。虽然它不是字符类型所必需的,但建议用于其他数据类型以避免任何意外的短转储。 最好的方法是检查数据元素是
如何在不使用消息类的情况下在消息语句中显示变量? IF acct_bal ', acct_bal TYPE 'E'. ENDIF. 我的程序有语法错误,因为系统不允许 acct_bal 进入消息语句。
西北 ABAP 7.0在 SU01 中,您可以将用户日期格式设置为日语。示例格式 7 在代码中,这在用户运行时有效。 " user date format set to JAPANESE DATF
我在 SE24 中开发了一个 ABAP 类,它被锁定在已经传输到客户端的传输请求 TR1 中。 现在我在另一个request TR2中对这个类做一些修改,这个TR要9月份才能传给client。 但与此
在 ABAP 中,我有一个非常大的内部表,比如 31,000 行。将其拆分为固定大小的多个较小表(比如每个表 1,000 行)的最短且最有效的方法是什么? 天真的方式是: DATA lt_next_p
我有大约 10 个类要导出到另一个系统。传输不是一种选择,我想知道是否有更快的方法来复制类。手动创建和填充类将花费很长时间。 关于这个主题的大多数问题都来自 5 年多以前,我想知道最好的方法是什么。我
大型项目中的一些功能在开发系统上被破坏了。 很确定它在几个小时前就成功了。 我怎么知道最近更改了哪些 ABAP 对象?(如果有帮助,我想我可以猜出包含零钱的运输工具和包裹) 我找到的最接近的答案是表
为什么声明 BREAK-POINT 'my username'. 不仅影响我,也影响其他用户?我疯了吗?也许这是权限问题或任何其他原因?有人可以解释我吗? 该语句位于实现 BAdI 的类中的方法体中
如何阻止 ABAP 扩展程序检查 (SLIN) 报告我可能没有写入权限的包含库中的错误? 我喜欢留下尽可能少的错误和警告的扩展检查,通常当我故意以可能导致警告的方式使用某些东西时,我使用伪注释(“#E
我有一个内部表,它被写入文件,然后作为数据源拉入 BW。有时,不可打印的字符会使其进入文件输出并将导入过程中断到 BW。下面是我的代码示例。由于 itab 不是类型 c 或字符串,我无法在其上使用查找
我是一名优秀的程序员,十分优秀!