Friendlier SAP: Configuration Tree Path
Introduction
Imagine a situation where you’re creating a training material and need to provide a configuration path. Or, from the other side, you’re reading a manual and want to find the tree path yourself. Standard SAP requires you to do it manually – node by node. This enhancement is meant to make these tasks easier – concatenating the full path to a selected node or finding the node from the copied path.
The basics
As the configuration tree is a standard functionality contained in a standard report, you want to make as few modifications as possible. You can achieve this by enhancing the context menu of the tree and adding two new items to it:
- Paste Node Path – this item will be responsible for finding the configuration node from the configuration path stored in the clipboard,
- Copy Node’s Path – this item will be responsible for creating a full path to the first selected node and copying it into the clipboard.
To add new context menu items, you need to create an implicit enhancement (or code modification) at the end of the SPROJECT_CONTEXT_MENU function. In this enhancement, call the MODIFY_CONTEXT_MENU method of the custom class with the enhancement logic.
Context menu implicit enhancement
To handle the new context menu items, you need to create an implicit enhancement (or code modification) at the end of the S_IMG_USER_EXIT_1 function. In this enhancement, call the HANDLE_COMMAND method of the custom class.
Handle command implicit enhancement
This is all that you need to modify in the standard code. The rest of the logic is contained in a custom class.
The enhancement logic
As mentioned before, the whole logic of the enhancement is contained in one custom class. The class is available for download from the link presented at the bottom of this article.
For the ease of use, all of the methods of the class are marked as static. These could be instance methods as well. Below you will find a short description of what each of the methods does.
Method HANDLE_COMMAND
The HANDLE_COMMAND method is used to execute the action after the user picks an item from the context menu. The method itself does not contain any action-related logic, it reroutes the processing to other appropriate methods.
METHOD handle_command. CASE iv_command. WHEN ac_command_copy. CALL METHOD handle_command_copy EXPORTING iv_command = iv_command iv_language = iv_language it_nodes = it_nodes it_all_nodes = it_all_nodes it_all_texts = it_all_texts. cv_execute_command = abap_false. WHEN ac_command_paste. CALL METHOD handle_command_paste EXPORTING iv_command = iv_command iv_language = iv_language it_nodes = it_nodes it_all_nodes = it_all_nodes it_all_texts = it_all_texts CHANGING cv_update_actual_node = cv_update_actual_node cs_actual_node = cs_actual_node. cv_execute_command = abap_false. ENDCASE. ENDMETHOD.
Method MODIFY_CONTEXT_MENU
The MODIFY_CONTEXT_MENU method contains the code responsible for appending custom items to the context menu of the configuration tree. The logic is very simple, although there are two things worth mentioning:
- The empty item appended in the first line of the method is later converted by the system to a separator.
- Custom commands assigned to the context menu items are taken from constants defined in the class, thus making it possible to reuse the same values in other methods of the class.
METHOD modify_context_menu. APPEND INITIAL LINE TO ct_menu REFERENCE INTO DATA(ld_menu). APPEND INITIAL LINE TO ct_menu REFERENCE INTO ld_menu. ld_menu->menu_fcode = ac_command_paste. ld_menu->menu_text = 'Paste Node Path'(m01). ld_menu->is_no_ref = abap_true. APPEND INITIAL LINE TO ct_menu REFERENCE INTO ld_menu. ld_menu->menu_fcode = ac_command_copy. ld_menu->menu_text = 'Copy Node''s Path'(m02). ld_menu->is_no_ref = abap_true. ENDMETHOD.
Method GET_DEFAULT_SEPARATOR
To concatenate the whole path of the first selected configuration tree node, a separator is needed. The GET_DEFAULT_SEPARATOR method is responsible for providing it. It first checks user parameters to look for a user-defined separator and, if none is found, the first from the list of possible separators is used. The name of the user parameter is defined in the AC_USER_PARAMETER_SEPARATOR constant.
METHOD get_default_separator. DATA: lt_parameters TYPE ustyp_t_parameters. CALL FUNCTION 'SUSR_USER_PARAMETERS_GET' EXPORTING user_name = sy-uname TABLES user_parameters = lt_parameters EXCEPTIONS user_name_not_exist = 1 OTHERS = 2. IF sy-subrc = 0. READ TABLE lt_parameters REFERENCE INTO DATA(ld_parameter) WITH KEY parid = ac_user_parameter_separator. IF sy-subrc = 0 AND ld_parameter->parva IS NOT INITIAL. rv_separator = ld_parameter->parva. RETURN. ENDIF. ENDIF. DATA(lt_separators) = get_possible_separators( ). READ TABLE lt_separators INTO rv_separator INDEX 1. ENDMETHOD.
Method GET_POSSIBLE_SEPARATORS
When parsing a copied path, the class first tries to split it with the use of different separators. These possible separators are defined in method GET_POSSIBLE SEPARATORS. The parsing is done using the same sequence that separators are added to the list.
METHOD get_possible_separators. APPEND |>| TO rt_separators. APPEND |?| TO rt_separators. APPEND |?| TO rt_separators. APPEND |->| TO rt_separators. ENDMETHOD.
Method HANDLE_COMMAND_COPY
The HANDLE_COMMAND_COPY method is responsible for concatenating the whole path of the first selected configuration tree node. A separator obtained from the GET_DEFAULT_SEPARATOR method is used to separate the path elements. After the concatenation is complete, the result is copied to clipboard for easy use in other applications.
The method tries to obtain the nodes description in four different languages:
- The language of the configuration tree,
- The language of the system for the current user,
- English,
- German.
If the description is not found in any of the languages, a hard-coded text “NODE {node_id} DESCRIPTION MISSING” is used instead.
The maximum length of the path is defined as 4096 characters.
Method HANDLE_COMMAND_PASTE
The HANDLE_COMMAND_PASTE method is responsible for parsing a pasted configuration tree path. Separators listed in the GET_POSSIBLE_SEPARATORS method are used to split the path into separate elements. The separators are used in the sequence defined in the GET_POSSIBLE_SEPARATORS method and splitting is stopped after the first success.
Because not all nodes of the configuration tree are available after the tree is presented, the method loads missing nodes if required. For better performance, only the children of the parsed path elements are loaded.
Similar as in the HANDLE_COMMAND_COPY method, the logic responsible for finding configuration tree nodes uses four different languages. This is to maximize the chance of finding the node.
When parsing is finished, a success message is presented to the user at the bottom of the screen.
Summary
A custom class and two implicit enhancements is all you need to simplify the configuration tree navigation. Now you’re able to easily create and parse a configuration tree path.
Read also:
1. IDoc modification made easy with ABAP Object Oriented Programming
Popular tags
ABAP int4 INT4 IFTT Int4Interview S/4HANA SAP AIF SAP CPI sap integration