首页 > 其他分享 >为什么 cl_gui_dialogbox_container 只能在 at selection output 事件中使用

为什么 cl_gui_dialogbox_container 只能在 at selection output 事件中使用

时间:2023-08-17 19:34:15浏览次数:57  
标签:selection container 对话框 lo gui cl dialogbox

首先,我们来了解一下 cl_gui_dialogbox_container 类。这是 SAP 的一个类,用于创建一个对话框容器,通常用于在对话框中显示一些 GUI 控件,例如:图形、控件等。cl_gui_dialogbox_container 对象主要用于在模态对话框中创建自定义容器,它允许我们将 GUI 控件(如 ALV GRID,HTML Viewer 等)嵌入到模态对话框中。

为什么 cl_gui_dialogbox_container 类只能在 at selection output 事件中使用,原因在于 SAP 的设计理念和事件处理机制。在 SAP 的编程模型中,大部分的界面交互都是在 PAI(Process After Input)阶段进行的,也就是在用户输入后的处理阶段。在这个阶段,系统会处理用户的输入,执行相应的代码,并更新屏幕。然而,cl_gui_dialogbox_container 作为一个 GUI 控件,它的呈现和操作是在 PBO(Process Before Output)阶段,也就是在输出到屏幕之前的处理阶段。

这里涉及到一个概念,叫做 "模态" 和 "非模态"。模态对话框是阻塞的,一旦打开,用户必须首先处理它才能返回到主程序;而非模态对话框则是非阻塞的,用户可以在处理对话框的同时,还可以处理其他的程序。cl_gui_dialogbox_container 是用于创建模态对话框的,因此,它需要在所有的输入都已经处理完毕,且在输出到屏幕之前,即在 at selection output 事件中使用。

现在,我们来举个例子。假设我们需要在用户点击一个按钮后,弹出一个包含 ALV GRID 的模态对话框。这个模态对话框用于显示一些详细信息。在这个场景中,我们可以在 at selection output 事件中使用 cl_gui_dialogbox_container

先声明一些必要的数据:

DATA: go_grid        TYPE REF TO cl_gui_alv_grid,
      go_custom_cont TYPE REF TO cl_gui_custom_container,
      go_dialog_cont TYPE REF TO cl_gui_dialogbox_container.

然后,在 at selection output 事件中创建我们的对话框和 ALV GRID:

AT SELECTION-SCREEN OUTPUT.
  IF go_dialog_cont IS INITIAL.
    CREATE OBJECT go_dialog_cont
      EXPORTING
        container_name = 'MY_DIALOG_CONTAINER'.

    CREATE OBJECT go_custom_cont
      EXPORTING
        container = go_dialog_cont.

    CREATE OBJECT go_grid
      EXPORTING
        i_parent = go_custom_cont.
  ENDIF.

在上面的代码中,我们首先创建了一个 cl_gui_dialogbox_container 对象,然后创建了一个 cl_gui_custom_container 对象,将其父容器设置为我们创建的对话框容器。最后,我们创建了一个 cl_gui_alv_grid 对象,将其父容器设置为我们创建的自定义容器。

cl_gui_dialogbox_container 是 SAP ABAP 中的一个类,用于创建和管理对话框的容器。在 ABAP 中,事件是程序中发生的特定动作或状态变化,而事件处理程序是在特定事件发生时执行的代码块。at selection output 是 ABAP 中的一个事件,表示在输出选择屏幕(交互式选择屏幕)之前触发的事件。在这个事件中,可以进行屏幕输出的准备工作,包括对话框的创建和管理。

为了满足你的要求,我将详细解释为什么 cl_gui_dialogbox_container 类通常在 at selection output 事件中使用,并提供一个示例来说明它的用法。

为什么 cl_gui_dialogbox_containerat selection output 事件中使用?

cl_gui_dialogbox_container 用于创建对话框容器,可以在其中添加不同的 UI 元素,如文本、输入字段、按钮等。然而,对话框通常是一种模态(阻塞式)操作,它需要等待用户的交互响应。由于在 at selection output 事件中,屏幕已经呈现给用户,程序需要等待用户的响应,因此这是一个适合创建对话框的时机。

at selection output 事件中使用 cl_gui_dialogbox_container 的主要原因是,它可以让程序在等待用户响应的同时,通过对话框向用户提供更多的信息、选项和功能,从而增强用户体验。

举例说明

假设我们有一个需求:用户需要输入两个数字,然后选择执行加法或乘法运算。我们希望通过一个对话框来实现这个功能。下面是一个示例代码,演示了如何在 at selection output 事件中使用 cl_gui_dialogbox_container

REPORT demo_dialogbox_container.

DATA: lv_num1 TYPE i,
      lv_num2 TYPE i,
      lv_result TYPE i.

AT SELECTION-SCREEN OUTPUT.
  DATA: lo_dialog_container TYPE REF TO cl_gui_dialogbox_container,
        lo_input_num1 TYPE REF TO cl_gui_simple_element,
        lo_input_num2 TYPE REF TO cl_gui_simple_element,
        lo_button_add TYPE REF TO cl_gui_button,
        lo_button_multiply TYPE REF TO cl_gui_button.

  CREATE OBJECT lo_dialog_container
    EXPORTING
      container_name = 'DialogContainer'
    EXCEPTIONS
      OTHERS = 1.

  IF sy-subrc <> 0.
    MESSAGE 'Error creating dialog container' TYPE 'E'.
  ELSE.
    CREATE OBJECT lo_input_num1
      EXPORTING
        parent = lo_dialog_container
        text   = 'Enter Number 1:'
        x      = 10
        y      = 10
        width  = 120
        height = 25
      EXCEPTIONS
        OTHERS = 2.

    CREATE OBJECT lo_input_num2
      EXPORTING
        parent = lo_dialog_container
        text   = 'Enter Number 2:'
        x      = 10
        y      = 40
        width  = 120
        height = 25
      EXCEPTIONS
        OTHERS = 3.

    CREATE OBJECT lo_button_add
      EXPORTING
        parent = lo_dialog_container
        text   = 'Add'
        x      = 10
        y      = 80
        width  = 60
        height = 25
      EXCEPTIONS
        OTHERS = 4.

    CREATE OBJECT lo_button_multiply
      EXPORTING
        parent = lo_dialog_container
        text   = 'Multiply'
        x      = 80
        y      = 80
        width  = 60
        height = 25
      EXCEPTIONS
        OTHERS = 5.
  ENDIF.

AT SELECTION-SCREEN.

START-OF-SELECTION.
  IF lo_button_add IS NOT BOUND OR lo_button_multiply IS NOT BOUND.
    MESSAGE 'Error creating UI elements' TYPE 'E'.
  ELSE.
    CALL METHOD lo_dialog_container->run_dialog.

    IF lo_dialog_container->result = lo_button_add.
      lv_result = lv_num1 + lv_num2.
      WRITE: / 'Addition Result:', lv_result.
    ELSEIF lo_dialog_container->result = lo_button_multiply.
      lv_result = lv_num1 * lv_num2.
      WRITE: / 'Multiplication Result:', lv_result.
    ENDIF.
  ENDIF.

在这个示例中,我们首先在 at selection output 事件中创建了一个对话框容器 lo_dialog_container,然后在其中添加了两个文本输入字段和两个按钮,分别用于输入数字和选择操作。然后,在 at selection-screen 事件中,我们等待用户输入,然后在 start-of-selection 事件中根据用户的选择进行相应的运算,并将结果输出到屏幕。

这个示例说明了在 at selection output 事件中使用 cl_gui_dialogbox_container 的情况。由于在这个事件中,屏幕已经显示给用户,程序需要等待用户的响应,因此这是一个合适的时机来创建对话框并与用户进行交互。

总结

cl_gui_dialogbox_containerat selection output 事件中使用,主要是为了在程序等待用户响应的同时,通过对话框提供更多的交互选项和功能,从而增强用户体验。这种方式可以有效地集成用户输入和操作,并在等待用户响应时提供更多的界面元素。

标签:selection,container,对话框,lo,gui,cl,dialogbox
From: https://www.cnblogs.com/sap-jerry/p/17638649.html

相关文章

  • [kubernetes]二进制部署k8s集群-基于containerd
    0.前言k8s从1.24版本开始不再直接支持docker,但可以自行调整相关配置,实现1.24版本后的k8s还能调用docker。其实docker自身也是调用containerd,与其k8s通过docker再调用containerd,不如k8s直接调用containerd,以减少性能损耗。除了containerd,比较流行的容器运行时还有podman,但是podm......
  • python-GUI之tkinter
    常用的tkinter控件的列表:Label(标签):用于显示文本或图像。Button(按钮):用于触发操作,比如点击按钮执行某个功能。Entry(输入框):用于接收用户输入的文本。Text(文本框):用于显示和编辑多行文本。Checkbutton(复选框):允许用户从多个选项中选择一个或多个选项。Radiobutton(单选按钮):允许用......
  • Flink and Kafka Streams: a Comparison and Guideline for Users
    ThisblogpostiswrittenjointlybyStephanEwen,CTOofdataArtisans,andNehaNarkhede,CTOofConfluent. StephanEwenisPMCmemberofApacheFlinkandco-founderandCTOofdataArtisans.BeforefoundingdataArtisans,Stephanwasleadingthedevelo......
  • Unity UGUI的InputField(输入框)组件的介绍及使用
    UGUI的InputField(输入框)组件的介绍及使用1.什么是UGUI的InputField组件?UGUI的InputField组件是Unity中的一个用户界面组件,用于接收用户的输入。它可以用于创建文本输入框、密码输入框等功能。2.UGUI的InputField组件的工作原理UGUI的InputField组件通过监听用户的输入事件,用......
  • Penguin(南极原住民)的由来
    初一的一节晚自习,很热,我正在埋头做着作业。突然,一只手从后面拍了拍我的肩膀。而我又正好坐在后门旁边,我正心想是谁,回头一看,竟然是年级组长。这是,她冷不防地说了一句:“你是南极来的吧,不热吗?”声音不大,但在安静的教室中显得格外清晰。我只好尴尬地回了一句我不热。这时,我才发......
  • 使用C++界面框架ImGUI开发一个简单程序
    目录简介使用示例下载示例main文件设置ImGui风格设置字体主循环添加Application类中文编码问题界面设计关于imgui_demo.cpp创建停靠空间创建页面隐藏窗口标签栏创建导航页面创建内容页面隐藏控制台窗口打包程序总结待解决问题开发优势附件简介ImGui是一个用于C++的用户界面库,跨......
  • GUI编程
    typora-root-url:./GUI编程告诉大家该怎么学?这是什么它怎么玩?该如何去在我们平时运用?class--可阅读组件窗口弹窗面板文本框列表框按钮图片监听事件鼠标键盘时间破解工具1、简介Gui的核心技术:SwingAWT因为界面不美观需要jre环境为什么我们还......
  • Paper Reading: A pareto-based ensemble of feature selection algorithms
    目录研究动机文章贡献相关概念集成特征选择帕累托最优非支配排序拥挤距离本文方法实验结果数据集和实验设置与FS方法比较与集成FS方法比较优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具体的细节还需要......
  • VScode 远程连接服务器 GUI 显示
    VScode远程连接服务器的指导就不详述了注意以下几点在本地ssh配置文件config中加上如下配置ForwardAgentyesForwardX11yesForwardX11Trustedyes正文如下:安装插件vscode上安装RemoteX11(SSH)和RemoteX11插件:安装xserver服务微软官方推荐安装VcXsrv理......
  • jmeter详解(2)-GUI图形页面
    菜单栏 对应中文 运行里面有和远程执行相关的 选项包括外观语言、里面有日志查看的功能,SSL管理与https协议的测试相关 工具里面有函数助手及报告相关的东西,以及其他 快捷工具栏 从左到右依次为:新建、模版、打开、保存、剪切、粘贴、全部展开、全部折叠、切......