CL_SALV_TREE
のインスタンスにユーザ定義関数を追加することはできますか?このインスタンスが使用されているレポートにGUIステータスをコピーする必要はありませんか?GUIステータスをコピーせずにCL_SALV_TREEにユーザ定義関数を追加することはできますか?
私がしようとしているのは、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 = '@[email protected]'
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 = '@[email protected]'
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標準コードで参照することは、1つは、オブジェクトIF_SALV_C_TABLE_OBJECTS=>TREE
ためadd_function
方法で新しい機能を追加することが可能であると仮定でき、コードのこの部分から
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.
です。
これまでのところ、次の回避策を使用しました。
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 = '@[email protected]'
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().
残念ながら、ボタンは直接、ツリーの前ではなく、ステータスバーに、別の場所でそのような場合に表示されます。