【发布时间】:2019-07-07 10:37:12
【问题描述】:
我有一个程序,它显示一个包含两列的拆分容器:
左侧显示一棵控制树(可以)
右侧应显示自定义 TCode(不知道如何执行此位)
双击树节点时,它会调用一个打开屏幕的事务,但它会在新窗口中打开。
如何在右侧窗口中打开屏幕?
最小的可重现示例:
- 通过
SE93创建事务代码ZCALL_ZPRG1,使其调用程序ZPRG1 - 创建程序ZPRG1(极简画面):
REPORT zprg1.
PARAMETERS test AS CHECKBOX.
- 创建程序ZPRG2(拆分器和树):
REPORT zprg2.
CLASS lcl_app DEFINITION.
PUBLIC SECTION.
METHODS:
pbo,
on_node_double_click FOR EVENT node_double_click OF cl_gui_simple_tree.
DATA:
tree TYPE REF TO cl_gui_simple_tree,
itab TYPE TABLE OF mtreesnode,
splitter TYPE REF TO cl_gui_splitter_container.
ENDCLASS.
CLASS lcl_app IMPLEMENTATION.
METHOD pbo.
CHECK tree IS NOT BOUND.
CREATE OBJECT splitter
EXPORTING
parent = cl_gui_container=>screen0
rows = 1
columns = 2.
itab = VALUE #(
( node_key = '1'
text = 'Double-click me' ) ).
CREATE OBJECT tree
EXPORTING
parent = splitter->get_container( row = 1 column = 1 )
node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single.
tree->add_nodes(
table_structure_name = 'MTREESNODE'
node_table = itab ).
SET HANDLER on_node_double_click FOR tree.
DATA events TYPE cntl_simple_events.
CALL METHOD tree->set_registered_events
EXPORTING
events = VALUE #( ( eventid = tree->eventid_node_double_click ) )
EXCEPTIONS
OTHERS = 4.
ENDMETHOD.
METHOD on_node_double_click.
CALL TRANSACTION 'ZCALL_ZPRG1'.
ENDMETHOD.
ENDCLASS.
DATA: app TYPE REF TO lcl_app.
PARAMETERS dummy.
INITIALIZATION.
CREATE OBJECT app.
AT SELECTION-SCREEN OUTPUT.
app->pbo( ).
AT SELECTION-SCREEN ON EXIT-COMMAND.
app->splitter->free( ).
- 运行 ZPRG2
- 双击树节点
【问题讨论】:
-
我已经改写了这个问题,使其符合更多的stackoverflow原则(特别是添加Minimal Reproducible Example)。请确认它是否适合您的问题,或进行编辑。谢谢。 PS:重要的是ask good questions 即符合stackoverflow原则的,我下次不做。
-
我是博客新手,因此学习如何构建问题和答案。希望尽快上车。非常感谢 Sandra 的帮助和耐心。 !!您的代码确实有帮助并且可以正常工作,但是单击节点时,事务应该在同一窗口的右侧面板中打开,而不是在新窗口中打开。感谢您的宝贵意见/建议。