• SAP Context menu(菜单)



    *
    &---------------------------------------------------------------------* *& Report RSDEMO_CONTEXT_MENU_LIST * *& * *&---------------------------------------------------------------------* *& * *& * *&---------------------------------------------------------------------* REPORT RSDEMO_CONTEXT_MENU_LIST . tables spfli. *set pf-status 'LIST'. select * from spfli. WRITE: / spfli-carrid, spfli-connid, spfli-cityfrom, spfli-airpfrom, spfli-cityto, spfli-airpto, spfli-fltime, spfli-deptime, spfli-arrtime. endselect. form on_ctmenu_request using p_menu type ref to cl_Ctmenu. call method p_menu->LOAD_GUI_STATUS exporting program = 'RSDEMO_CONTEXT_MENU_LIST' STATUS = 'CONTEXT' MENU = p_menu exceptions READ_ERROR = 1. endform.

    on screen

    *&---------------------------------------------------------------------*
    *& Report  RSDEMO_CONTEXT_MENU_DYNPR                                   *
    *&                                                                     *
    *&---------------------------------------------------------------------*
    *&                                                                     *
    *&                                                                     *
    *&---------------------------------------------------------------------*
    
    REPORT  rsdemo_context_menu_dynpr     .
    DATA  ok_code LIKE sy-ucomm.
    CONTROLS table_control TYPE TABLEVIEW USING SCREEN 100.
    tables spfli.
    data spfli_wa like spfli.
    DATA spfli_itab LIKE STANDARD TABLE OF spfli.
    DATA init.
    DATA mark.
    
    CALL SCREEN 100.
    
    *&---------------------------------------------------------------------*
    *&      Module  STATUS_0100  OUTPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE status_0100 OUTPUT.
      SET PF-STATUS 'STATUS_100'.
      SET TITLEBAR '100'.
    
    ENDMODULE.                             " STATUS_0100  OUTPUT
    
    *&---------------------------------------------------------------------*
    *&      Module  USER_COMMAND_0100  INPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE user_command_0100 INPUT.
      CASE ok_code.
        WHEN 'CARRID'.
          MESSAGE i300(eu) WITH 'CARRID'.  "#EC NOTEXT
        WHEN 'BOX_1'.
          MESSAGE i300(eu) WITH 'BOX_1'.  "#EC NOTEXT
        WHEN 'TABLE_CONTROL'.
          MESSAGE i300(eu) WITH 'TABLE CONTROL'.  "#EC NOTEXT
        WHEN 'TABLE_TITLE'.
          MESSAGE i300(eu) WITH 'TABLE CONTROL TITLE'.  "#EC NOTEXT
        WHEN 'EXIT'.
          LEAVE PROGRAM.
      ENDCASE.
    ENDMODULE.                             " USER_COMMAND_0100  INPUT
    
    
    *&---------------------------------------------------------------------
    *&       Form Routine: setting context menu for CARRID
    *----------------------------------------------------------------------
    FORM on_ctmenu_carrid USING p_menu TYPE REF TO cl_ctmenu.
      CALL METHOD p_menu->load_gui_status
                  EXPORTING program = 'RSDEMO_CONTEXT_MENU_DYNPR'
                            status  = 'CONTEXT'
                            menu    = p_menu.
    ENDFORM.
    
    *&---------------------------------------------------------------------
    *&       Form Routine: setting context menu for BOX_1
    *----------------------------------------------------------------------
    FORM on_ctmenu_box_1 USING p_menu TYPE REF TO cl_ctmenu.
      CALL METHOD p_menu->add_function
           EXPORTING fcode = 'BOX_1'
                     text  = TExt-001
                     icon  = ' '
                     ftype = ' '
                     disabled = ' '
                     hidden   = ' '
                     checked  = ' '.
      CALL METHOD p_menu->add_function
           EXPORTING fcode = 'BOX_2'
                     text  = TExt-001
                     icon  = ' '
                     ftype = ' '
                     disabled = ' '
                     hidden   = ' '
                     checked  = ' '.
      call method p_menu->set_default_function exporting fcode = 'BOX_1'.
    ENDFORM.
    
    *&---------------------------------------------------------------------
    *&       Form Routine: setting context menu for TABLE
    *----------------------------------------------------------------------
    FORM on_ctmenu_table USING p_menu TYPE REF TO cl_ctmenu.
      CALL METHOD p_menu->add_function
           EXPORTING fcode = 'TABLE_CONTROL'
                     text  = text-002
                     icon  = ' '
                     ftype = ' '
                     disabled = ' '
                     hidden   = ' '
                     checked  = ' '.
    
    ENDFORM.
    
    *&---------------------------------------------------------------------
    *&       Form Routine: setting context menu for TITLE
    *----------------------------------------------------------------------
    FORM on_ctmenu_title USING p_menu TYPE REF TO cl_ctmenu.
      CALL METHOD p_menu->add_function
           EXPORTING fcode = 'TABLE_TITLE'
                     text  = text-003
                     icon  = ' '
                     ftype = ' '
                     disabled = ' '
                     hidden   = ' '
                     checked  = ' '.
    
    ENDFORM.

    in control

    *&---------------------------------------------------------------------*
    *& Include SIMPLE_TREE_CONTEXT_MEN_DEMTOP                              *
    *&                                                                     *
    *&---------------------------------------------------------------------*
    
    REPORT sapsimple_tree_context_men_dem MESSAGE-ID tree_control_msg.
    
    CLASS lcl_application DEFINITION DEFERRED.
    CLASS cl_gui_cfw DEFINITION LOAD.
    
    TYPES: node_table_type LIKE STANDARD TABLE OF mtreesnode
             WITH DEFAULT KEY.
    * CAUTION: MTREESNODE is the name of the node structure which must
    * be defined by the programmer. DO NOT USE MTREESNODE!
    
    DATA: g_application TYPE REF TO lcl_application,
          g_custom_container TYPE REF TO cl_gui_custom_container,
          g_tree TYPE REF TO cl_gui_simple_tree,
          g_ok_code TYPE sy-ucomm,
          g_ctx_fcode TYPE sy-ucomm.
    
    
    *** INCLUDE SIMPLE_TREE_CONTEXT_MEN_DEMTOP
    *----------------------------------------------------------------------*
    *   INCLUDE SIMPLE_TREE_CONTROL_DEMOCL1                                *
    *----------------------------------------------------------------------*
    
    CLASS lcl_application DEFINITION.
      PUBLIC SECTION.
        METHODS:
          handle_node_context_menu_req
            FOR EVENT node_context_menu_request
            OF cl_gui_simple_tree
            IMPORTING node_key menu,
          handle_node_context_menu_sel
            FOR EVENT node_context_menu_select
            OF cl_gui_simple_tree
            IMPORTING node_key fcode.
    ENDCLASS.
    
    *---------------------------------------------------------------------*
    *       CLASS LCL_APPLICATION IMPLEMENTATION
    *---------------------------------------------------------------------*
    *       ........                                                      *
    *---------------------------------------------------------------------*
    CLASS lcl_application IMPLEMENTATION.
    
      METHOD  handle_node_context_menu_req.
        " this method handles the node context menu request event of the
        " tree control instance
        data: text type gui_text.
        " first entry in context menu
        text = 'Node with key'. "#EC NOTEXT
        concatenate text node_key into text SEPARATED by ' '.
        call method menu->add_function
          exporting text = text fcode = 'Entry1'. "#EC NOTEXT
        " second entry in context menu
         call method menu->add_function
           exporting
             text = 'Second Entry' "#EC NOTEXT
             fcode = 'Entry2'.     "#EC NOTEXT
      ENDMETHOD.
    
      METHOD  handle_node_context_menu_sel.
        " this method handles the node context select event of the tree
        " control instance
        " write chosen FCODE in dynpro field
        g_ctx_fcode = fcode.
      ENDMETHOD.
    
    ENDCLASS.
    *-------------------------------------------------------------------
    ***INCLUDE simple_tree_control_demoO01 .
    *-------------------------------------------------------------------
    *&---------------------------------------------------------------------*
    *&      Module  PBO_0400  OUTPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE PBO_100 OUTPUT.
      SET PF-STATUS 'MAIN'.
      IF G_TREE IS INITIAL.
        " The Tree Control has not been created yet.
        " Create a Tree Control and insert nodes into it.
        PERFORM CREATE_AND_INIT_TREE.
      ENDIF.
    ENDMODULE.                 " PBO_0100  OUTPUT
    *** INCLUDE simple_tree_context_men_demO01
    *-------------------------------------------------------------------
    ***INCLUDE simple_tree_control_demoI01 .
    *-------------------------------------------------------------------
    *&---------------------------------------------------------------------*
    *&      Module  PAI_0400  INPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE PAI_100 INPUT.
      data: return_code type i.
    * CL_GUI_CFW=>DISPATCH must be called if events are registered
    * that trigger PAI
    * this method calls the event handler method of an event
      CALL METHOD CL_GUI_CFW=>DISPATCH
        importing return_code = return_code.
      if return_code <> cl_gui_cfw=>rc_noevent.
        " a control event occured => exit PAI
        clear g_ok_code.
        exit.
      endif.
    
      CASE G_OK_CODE.
        WHEN 'BACK'. " Finish program
          IF NOT G_CUSTOM_CONTAINER IS INITIAL.
            " destroy tree container (detroys contained tree control, too)
            CALL METHOD G_CUSTOM_CONTAINER->FREE
              EXCEPTIONS
                CNTL_SYSTEM_ERROR = 1
                CNTL_ERROR        = 2.
            IF SY-SUBRC <> 0.
              MESSAGE A000.
            ENDIF.
            CLEAR G_CUSTOM_CONTAINER.
            CLEAR G_TREE.
          ENDIF.
          LEAVE PROGRAM.
      ENDCASE.
    
    * CAUTION: clear ok code!
      CLEAR G_OK_CODE.
    ENDMODULE.                 " PAI_0100  INPUT
    *** INCLUDE simple_tree_context_men_demI01
    *-------------------------------------------------------------------
    ***INCLUDE simple_tree_context_men_demF01 .
    *-------------------------------------------------------------------
    
    *&---------------------------------------------------------------------*
    *&      Form  CREATE_AND_INIT_TREE
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM create_and_init_tree.
      DATA: node_table TYPE node_table_type,
            events TYPE cntl_simple_events,
            event TYPE cntl_simple_event.
    
    * create a container for the tree control
      CREATE OBJECT g_custom_container
        EXPORTING
          " the container is linked to the custom control with the
          " name 'TREE_CONTAINER' on the dynpro
          container_name = 'TREE_CONTAINER'
        EXCEPTIONS
          cntl_error = 1
          cntl_system_error = 2
          create_error = 3
          lifetime_error = 4
          lifetime_dynpro_dynpro_link = 5.
      IF sy-subrc <> 0.
        MESSAGE a000.
      ENDIF.
    
    
    * create a tree control
      CREATE OBJECT g_tree
        EXPORTING
          parent              = g_custom_container
          node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single
        EXCEPTIONS
          lifetime_error              = 1
          cntl_system_error           = 2
          create_error                = 3
          failed                      = 4
          illegal_node_selection_mode = 5.
      IF sy-subrc <> 0.
        MESSAGE a000.
      ENDIF.
    
    * define the events which will be passed to the backend
      " node context menu request
      event-eventid = cl_gui_simple_tree=>eventid_node_context_menu_req.
      event-appl_event = ' '. " no PAI if event occurs
      APPEND event TO events.
    
      " process PAI if context menu select event occurs
      call method g_tree->SET_CTX_MENU_SELECT_EVENT_APPL
        exporting appl_event = 'X'.
    
      CALL METHOD g_tree->set_registered_events
        EXPORTING
          events = events
        EXCEPTIONS
          cntl_error                = 1
          cntl_system_error         = 2
          illegal_event_combination = 3.
      IF sy-subrc <> 0.
        MESSAGE a000.
      ENDIF.
    
    * assign event handlers in the application class to each desired event
      SET HANDLER g_application->handle_node_context_menu_req FOR g_tree.
      SET HANDLER g_application->handle_node_context_menu_sel FOR g_tree.
    
    
    * add some nodes to the tree control
    * NOTE: the tree control does not store data at the backend. If an
    * application wants to access tree data later, it must store the
    * tree data itself.
    
      PERFORM build_node_table USING node_table.
    
    * node_table_structure_name     = 'MTREESNODE'
    *   A programmer using the tree control must create a structure in the
    *   dictionary. This structure must include the structure TREEV_NODE
    *   and must contain a character field with the name 'TEXT'.
    
      CALL METHOD g_tree->add_nodes
        EXPORTING
          table_structure_name = 'MTREESNODE'
          node_table           = node_table
        EXCEPTIONS
          failed                         = 1
          error_in_node_table            = 2
          dp_error                       = 3
          table_structure_name_not_found = 4
          OTHERS                         = 5.
      IF sy-subrc <> 0.
        MESSAGE a000.
      ENDIF.
    
    * expand the root node
      call method g_tree->expand_node
        exporting
          node_key = 'Root' "#EC NOTEXT
        exceptions
          FAILED              = 1
          ILLEGAL_LEVEL_COUNT = 2
          CNTL_SYSTEM_ERROR   = 3
          NODE_NOT_FOUND      = 4
          CANNOT_EXPAND_LEAF  = 5.
      IF SY-SUBRC <> 0.
        MESSAGE A000.
      ENDIF.
    
    ENDFORM.                               " CREATE_AND_INIT_TREE
    *&---------------------------------------------------------------------*
    *&      Form  build_node_table
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    
    FORM build_node_table
      USING
        node_table TYPE node_table_type.
    
      DATA: node LIKE mtreesnode.
    
    
    * Node with key 'Root'
      node-node_key = 'Root'. "#EC NOTEXT
      node-isfolder = 'X'.
      node-text = 'Root'.
      APPEND node TO node_table.
    
    * Node with key 'Child1'
      clear node.
      node-node_key = 'Child1'. "#EC NOTEXT
      node-relatkey = 'Root'.
      node-relatship = cl_gui_simple_tree=>relat_last_child.
      node-text = 'Child1'.
      APPEND node TO node_table.
    
    ENDFORM.                               " build_node_table
    
    
    *** INCLUDE simple_tree_context_men_demF01

  • 相关阅读:
    数据库同步软件介绍以及使用说明(SyncNavigator多元异构数据实时同步工具)
    关于异构数据库的不同表之间数据同步的操作细节---syncnavigator同步工具实操
    ASP.NET Core 配置文件(无处不在的依赖注入)
    ASP.NET Core 开源项目整理
    性能差异 ASP.NET WebForm与ASP.NET MVC
    MySQL 分区知识点(三)
    Docker 资料
    MySQL 基础知识(基本架构、存储引擎差异)
    MySQL InnoDB与MyISAM存储引擎差异
    MySQL 索引知识整理(创建高性能的索引)
  • 原文地址:https://www.cnblogs.com/JackeyLove/p/13650449.html
Copyright © 2020-2023  润新知