ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SAP Context menu

2020-09-11 11:01:46  阅读:282  来源: 互联网

标签:node Context menu tree context text SAP &-----------------------------------


*&---------------------------------------------------------------------*
*& 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

 

标签:node,Context,menu,tree,context,text,SAP,&-----------------------------------
来源: https://www.cnblogs.com/JackeyLove/p/13650449.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有