关于sap:为什么-clguidialogboxcontainer-只能在-at-selection-output-事件中使用

27次阅读

共计 3876 个字符,预计需要花费 10 分钟才能阅读完成。

首先,咱们来理解一下 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 事件中应用,次要是为了在程序期待用户响应的同时,通过对话框提供更多的交互选项和性能,从而加强用户体验。这种形式能够无效地集成用户输出和操作,并在期待用户响应时提供更多的界面元素。

正文完
 0