我有一个非常简单的 ABAP 程序,演示如何显示文本编辑器字段 (
cl_gui_textedit
),我想通过互联网、电子邮件、论坛、博客文章或其他方式分享它。
我希望人们能够立即复制、粘贴并运行这个非常简单的演示,但是这个程序包含一个 GUI 状态和一个 Dynpro 屏幕,这些很难共享,因为它不是代码(请参阅程序后面的详细信息)代码)。
我知道共享 ABAP 和非 ABAP 对象的这些方法,但我认为对于这样一个简单的演示来说,它太复杂了:SAP Transport Request、Git 存储库和 abapGit。
请注意,我还有其他 Dynpro SAP Control Framework 演示(
cl_gui_alv_grid
、cl_gui_html_viewer
等),因此我想将问题推广到所有类型的控件。
有没有办法轻松共享、复制、粘贴和运行此演示(可能通过重构代码),无论它是什么
cl_gui_textedit
或任何其他 Dynpro 控件?
演示的 3 个要素:
REPORT zdemo_cl_gui_textedit.
DATA go_custom_container TYPE REF TO cl_gui_custom_container.
DATA go_textedit TYPE REF TO cl_gui_textedit.
START-OF-SELECTION.
CALL SCREEN 100.
MODULE _0100_pbo OUTPUT.
SET PF-STATUS '0100'.
IF go_textedit IS NOT BOUND.
CREATE OBJECT go_custom_container
EXPORTING
container_name = 'CUSTOM_CONTAINER'.
CREATE OBJECT go_textedit
EXPORTING
parent = go_custom_container.
ENDIF.
ENDMODULE.
MODULE _0100_pai INPUT.
IF sy-ucomm = 'EXIT'.
SET SCREEN 0.
ENDIF.
ENDMODULE.
CUSTOM_CONTAINER
字段。PROCESS BEFORE OUTPUT.
MODULE _0100_PBO.
PROCESS AFTER INPUT.
MODULE _0100_PAI AT EXIT-COMMAND.
EXIT
,类型为“E”(退出命令)。我提出最小可重现示例 (MRE) 的首选方法是使用
cl_gui_container=>screen0
,它是 Dynpro 屏幕上显示的容器,它可能包含任何类型的 Dynpro 控件(不限于 cl_gui_textedit
)。
因此,必须首先显示 Dynpro 屏幕。可以使用由 ABAP 语句
PARAMETERS
或 SELECT-OPTIONS
构建的选择屏幕,而不是一般的 Dynpro 屏幕。
在选择屏中,“输出前处理”逻辑对应事件“AT SELECTION-SCREEN OUTPUT”,默认管理退出按钮(如果需要其他按钮,可以使用控件
CL_GUI_TOOLBAR
,多个控件)可以使用控件 cl_gui_container=>screen0
)在 CL_GUI_SPLITTER_CONTAINER
内显示。
警告:使用
cl_gui_container=>screen0
的解决方案对于演示程序来说很好,但我不建议将它用于生产程序,因为它是一个非官方的技巧。相反,请在普通 Dynpro 屏幕 (cl_gui_custom_container
) 内、周围 (cl_gui_docking_container
) 或在其上方使用容器作为对话框屏幕 (cl_gui_dialogbox_container
)。
因此,整个示例可以简化为以下几行代码,不需要 Dynpro 屏幕和 GUI 状态对象。
REPORT zdemo_cl_gui_textedit.
DATA go_textedit TYPE REF TO cl_gui_textedit.
PARAMETERS dummy.
AT SELECTION-SCREEN OUTPUT.
IF go_textedit IS NOT BOUND.
go_textedit = NEW #( parent = cl_gui_container=>screen0 ).
ENDIF.
注意:Stack Overflow 中基于相同概念的其他 MRE:
cl_salv_table
cl_gui_alv_grid
cl_gui_html_viewer
cl_gui_toolbar
cl_salv_tree
请注意,如果用户界面演示包含丰富且有意义的数据,您可以从数据库表
SFLIGHT
、SBOOK
等中获取这些数据。例如,该数据可用于 ALV 网格。这些表应该存在于所有 ABAP 系统中,但可能会为空。要生成内容,请运行以下任意程序:
SCARR
、SPFLI
、SFLIGHT
、SBOOK
...:运行程序 SAPBC_DATA_GENERATOR
。ALV_
开头的表(例如 ALV_CHCK
、ALV_T_T2) used by a few SAP demo programs: run the program
BCALV_GENERATE_ALV_T_T2`。