如何共享控制框架演示,使其可以通过简单的复制/粘贴来运行?

问题描述 投票:0回答:1

我有一个非常简单的 ABAP 程序,演示如何显示文本编辑器字段 (

cl_gui_textedit
),我想通过互联网、电子邮件、论坛、博客文章或其他方式分享它。

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.
      
  • GUI状态:
    • 按钮
      EXIT
      ,类型为“E”(退出命令)。
controls abap text-editor dynpro
1个回答
1
投票

我提出最小可重现示例 (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.

CL_GUI_TEXTEDIT

注意:Stack Overflow 中基于相同概念的其他 MRE:

请注意,如果用户界面演示包含丰富且有意义的数据,您可以从数据库表

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`。
© www.soinside.com 2019 - 2024. All rights reserved.