zoukankan      html  css  js  c++  java
  • SAP 实例 5 CFW Events

    REPORT demo_custom_control .
    
    * Declarations *****************************************************
    
    CLASS event_handler DEFINITION.
      PUBLIC SECTION.
        METHODS: handle_f1 FOR EVENT f1 OF cl_gui_textedit
                 IMPORTING sender,
                 handle_f4 FOR EVENT f4 OF cl_gui_textedit
                 IMPORTING sender.
    ENDCLASS.
    
    DATA: ok_code LIKE sy-ucomm,
          save_ok LIKE sy-ucomm.
    
    DATA: init,
          container TYPE REF TO cl_gui_custom_container,
          editor    TYPE REF TO cl_gui_textedit.
    
    DATA: event_tab TYPE cntl_simple_events,
          event     TYPE cntl_simple_event.
    
    DATA: line(256) TYPE c,
          text_tab LIKE STANDARD TABLE OF line,
          field LIKE line.
    
    DATA handle TYPE REF TO event_handler.
    
    
    * Reporting Events ***************************************************
    
    START-OF-SELECTION.
    
      line = 'First line in TextEditControl'.
      APPEND line TO text_tab.
      line = '--------------------------------------------------'.
      APPEND line TO text_tab.
      line = '...'.
      APPEND line TO text_tab.
    
      CALL SCREEN 100.
    
    * Dialog Modules *****************************************************
    
    MODULE status_0100 OUTPUT.
      SET PF-STATUS 'SCREEN_100'.
      IF init is initial.
        init = 'X'.
        CREATE OBJECT: container EXPORTING container_name = 'TEXTEDIT',
                       editor    EXPORTING parent = container,
                       handle.
        event-eventid = cl_gui_textedit=>event_f1.
        event-appl_event = ' '.                     "system event
        APPEND event TO event_tab.
        event-eventid = cl_gui_textedit=>event_f4.
        event-appl_event = 'X'.                     "application event
        APPEND event TO event_tab.
        editor->set_registered_events(
                     EXPORTING events = event_tab ).
        SET HANDLER handle->handle_f1
                    handle->handle_f4 FOR editor.
      ENDIF.
      editor->set_text_as_stream( EXPORTING text = text_tab ).
    ENDMODULE.
    
    MODULE cancel INPUT.
      LEAVE PROGRAM.
    ENDMODULE.
    
    MODULE user_command_0100 INPUT.
      save_ok = ok_code.
      CLEAR ok_code.
      CASE save_ok.
        WHEN 'INSERT'.
          editor->get_text_as_stream( IMPORTING text = text_tab ).
        WHEN 'F1'.
          MESSAGE i888(sabapdemos) WITH text-001.
        WHEN OTHERS.
          MESSAGE i888(sabapdemos) WITH text-002.
          cl_gui_cfw=>dispatch( ).                "for application events
          MESSAGE i888(sabapdemos) WITH text-003.
      ENDCASE.
      SET SCREEN 100.
    ENDMODULE.
    
    * Class Implementations **********************************************
    
    CLASS event_handler IMPLEMENTATION.
      METHOD handle_f1.
        DATA row TYPE i.
        MESSAGE i888(sabapdemos) WITH text-004.
        sender->get_selection_pos(
             IMPORTING from_line = row ).
        sender->get_line_text(
             EXPORTING line_number = row
             IMPORTING text = field ).
        cl_gui_cfw=>set_new_ok_code(                "raise PAI for
             EXPORTING new_code = 'F1' ).           "system events
        cl_gui_cfw=>flush( ).
      ENDMETHOD.
      METHOD handle_f4.
        DATA row TYPE i.
        MESSAGE i888(sabapdemos) WITH text-005.
        sender->get_selection_pos(
             IMPORTING from_line = row ).
        sender->get_line_text(
             EXPORTING line_number = row
             IMPORTING text = field ).
        cl_gui_cfw=>flush( ).
      ENDMETHOD.
    ENDCLASS.

    Description

    Screen 100 contains an output field field and a custom control called textedit. The flow logic of screen 100 is as follows:

    PROCESS BEFORE OUTPUT.
      MODULE status_0100.
    PROCESS AFTER INPUT.
      MODULE cancel AT EXIT-COMMAND.
      MODULE user_command_0100.

    In the GUI status SCREEN_100, the function codes BACK, EXIT, and CANCEL have been created with type E and the function code INSERT has been created without any specific type.

    The program contains a local class called event_handler with event handlers for the events F1 and F4 of global class CL_GUI_TEXTEDIT. When the program is executed, screen 100 instantiates objects of the classes CL_GUI_CUSTOM_CONTAINER, CL_GUI_TEXTEDIT, and event_handler at the PBO event.

    The container control is linked to the custom control on the screen, and the instance of the textedit control is linked to this container. Since the events F1 and F4 of the textedit control are to be passed to the application server, the SET_REGISTERED_EVENTS method is used to register them, defining F1 as a system event and F4 as an application event. The event handling methods of the instance handle of the class event_handler are registered as handlers for the events.

    Before the screen is sent, the textedit control is filled with the contents of table text_tab. As long as the screen is displyed, the user is allowed to edit the text. When INSERT is chosen, the PAI event is triggered, and the current text from the textedit control is copied into table text_tab.

    If the user chooses the F1 key on the textedit control, the system immediately executes the handle_f1 method, assigning the row contents to the field field. Calling the SET_NEW_OK_CODE method triggers the PAI event. This is the only way to ensure that the PBO event is also processed and the contents of field are passed to the screen.

    If the user chooses the F4 key on the textedit control, PAI is triggered. By calling the DISPATCH method, the system executes the handle_f4 method, assigning the row contents to the field field. Since the system then automatically returns to PAI processing, PBO is also processed and the field contents are transported.

    In either case, regardless of whether the user chooses F1 or F4, the contents of the textedit control are not passed to the internal table text_tab. Consequently, the textedit control is overwritten with the previous contents of text_tab at the PBO event

  • 相关阅读:
    来自ebay内部的「软件测试」学习资料,覆盖GUI、API自动化、代码级测试及性能测试等,Python等,拿走不谢!...
    2000字谏言,给那些想学Python的人,建议收藏后细看!
    月薪20k+的测试工程师都会这项技能!
    Umbraco中的Member登录时的Lock out功能
    ASP.NET MVC中Session以及处理方式
    ASP.NET MVC 前端(View)向后端(Controller)中传值
    ASP.NET MVC程序传值方式:ViewData,ViewBag,TempData和Session
    Google中rel="canonical"的相关解释和用法
    虚拟攻防系统 HoneyPot
    JS一定要放在Body的最底部么? 聊聊浏览器的渲染机制
  • 原文地址:https://www.cnblogs.com/JackeyLove/p/13489401.html
Copyright © 2011-2022 走看看