Let’s dive into OOPs Report Using Splitter and ALV Tree Combination. For one client necessity, we needed to construct a report with splitter compartments alongside tree structure. The mix of these two could sound troublesome however, these are very simple to deal with. Quickly, we constructed a model and it worked impeccably.
Albeit the plan of the underneath made sense of model can be improved in various folds, essential skeleton for programming ought to continue as before. As we were obliging our advancement we discovered a few very much examined subjects over the web which I have attempted to tweak and address through this article.
Objective: OOPs Report Using Splitter and ALV Tree Combination
The goal of this article is to clear up how for utilize SPLITTER Compartment and TREE MODEL (TREE_STRUCTURE) in Uh oh ABAP report age coordinating standard occasions.
Also, the second and more significant goal is to destroy our apprehension about utilizing Tree Models and Splitter Compartments, for the last time.
Scope
This article covers the arrangements of the accompanying normal issues experienced by designers
- Full screen use of custom holder when it is splitted into additional sub-compartments.
- Enlisting custom occasions with standard occasions of tree model
- Width customization of splitter compartments.
Overview
The accompanying code has been composed to show a report which has 2 compartments in the rundown screen. The left board compartment has been intended to hold the tree model and the right compartment is to show the subtleties of the left board record upon an occasion of double tapping. In this model a tree structure has been made with deals orders which have deal as a first record. These business orders can be chosen by giving specific determination screen models. After tapping on the leaf hub framework will show subtleties of the deals request in the right holder as an ALV design (if it’s not too much trouble, allude fig. 1).
fig. – 1
Program Construct
Step – I: Declare all required structures and tables
Step –II: Declare reference of various classes
Step – III: Definition of event class
Step – IV: Implementation of Event Class
Step – V: Selection Screen
Step – VI: Subroutine to fetch basic data for tree model
Step – VII: Screen Design
Step – VIII: Module for object creation of various classes. (In PBO of output screen)
Step – IX: Module for event registration. (In PBO of output Screen)
Step – X: Module for output processing. (In PBO of output Screen)
Step-I: Declare all required structures and tables
Tables: vbak,vbap,vbfa. *&---------------------------------------------------------------------* *& Structures and Table Declarations *&---------------------------------------------------------------------* Data: ls_vbak type vbak, lt_vbak type table of vbak, ls_vbap type vbap, lt_vbap type table of vbap. Types: begin of ty_vbfa, vbelv type vbfa-vbelv, "Preceding SD Document posnv type vbfa-posnv, "Preceding SD Document Item Number vbeln type vbfa-vbeln, "Subsequent SD Document posnn type vbfa-posnn, "Subsequent SD Document Item Number vbtyp_n type vbfa-vbtyp_n, "Subsequent Document Category vbtyp_v type vbfa-vbtyp_v, "Preceding Document Category end of ty_vbfa. Data: ls_vbfa type ty_vbfa, lt_vbfa type table of ty_vbfa. Data: ls_vbfa_copy type ty_vbfa, lt_vbfa_copy type table of ty_vbfa. Types: begin of ty_vbak, vbeln type vbak-vbeln, "Contract Number audat type vbak-audat, "Document Date ernam type vbak-ernam, "Name of Person who Created the Object auart type vbak-auart, "Sales Document Type end of ty_vbak. Data: ls_vbak_cont type ty_vbak, lt_vbak_cont type table of ty_vbak.
Step –II: Declare reference of various classes
*&---------------------------------------------------------------------* *& Type Reference of Various Classes *&---------------------------------------------------------------------* Data: ref_split type ref to cl_gui_splitter_container, ref_cust type ref to cl_gui_custom_container, ref_alv1 type ref to cl_gui_alv_grid, ref_alv2 type ref to cl_gui_alv_grid, ref_cont1 type ref to cl_gui_container, ref_cont2 type ref to cl_gui_container. Data: ref_tree type ref to cl_simple_tree_model.
Step – III: Definition of event class
*&---------------------------------------------------------------------* *& Event Class *&---------------------------------------------------------------------* class lcl_event_handler definition. public section. methods: node_dc for event node_double_click of cl_simple_tree_model importing node_key sender. endclass.
Step – IV: Implementation of Event Class
class lcl_event_handler implementation. method: node_dc. Data: lt_children type tm_nodekey, v_so type vbeln, v_item type posnr. Data: ls_layout type lvc_s_layo. * 'sender' is an implicit event parameter that is provided by * ABAP Objects runtime system. It contains a reference to the * object that fired the event. You may directly use it to * call methods of this instance. CALL METHOD SENDER->NODE_GET_LAST_CHILD EXPORTING NODE_KEY = node_key IMPORTING CHILD_NODE_KEY = lt_children. * ‘Level_count’ in expand_node method determines in which level of the tree * we want the double_click method to be triggered. if lt_children is not initial. CALL METHOD SENDER->EXPAND_NODE EXPORTING NODE_KEY = node_key LEVEL_COUNT = 2. endif. split node_key at space into v_so v_item. refresh: lt_vbap. select * from vbap into table lt_vbap where vbeln = v_so. if sy-subrc = 0. ls_layout-grid_title = text-002. ls_layout-zebra = 'X'. ls_layout-smalltitle = ''. ls_layout-cwidth_opt = 'X'. CALL METHOD REF_ALV2->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING I_STRUCTURE_NAME = 'VBAP' IS_LAYOUT = ls_layout CHANGING IT_OUTTAB = lt_vbap. CALL METHOD REF_ALV2->REFRESH_TABLE_DISPLAY. endif. endmethod. endclass.
Step – V: Selection Screen
*&---------------------------------------------------------------------* *& Selection Screen *&---------------------------------------------------------------------* selection-screen: begin of block b1 with frame title text-001. select-options: s_vbeln for vbak-vbeln, "Document Number s_audat for vbak-audat, "Document Date s_ernam for vbak-ernam. "Name who Created the Object selection-screen: end of block b1.
Step – VI: Subroutine to fetch basic data for tree model
*&---------------------------------------------------------------------* *& Start Of Selection *&---------------------------------------------------------------------* start-of-selection. perform Get_Data. *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * Get All the display relevant Data for Tree Structure *----------------------------------------------------------------------* FORM GET_DATA . select vbeln audat ernam auart from vbak into table lt_vbak_cont where vbeln in s_vbeln and audat in s_audat and ernam in s_ernam. if sy-subrc <> 0. message E001(ZMSG) with 'No Record Found' display like 'I'. elseif sy-subrc = 0. select vbelv posnv vbeln posnn vbtyp_n vbtyp_v from vbfa into table lt_vbfa for all entries in lt_vbak_cont where vbelv = lt_vbak_cont-vbeln and vbtyp_n = 'C' and vbtyp_v = 'G'. if lt_vbfa is initial. message E002(ZMSG) with 'No Subsequent Record Found' display like 'I'. else. select * from vbak into table lt_vbak for all entries in lt_vbfa where vbeln = lt_vbfa-vbeln. select * from vbap into table lt_vbap for all entries in lt_vbak where vbeln = lt_vbak-vbeln. endif. endif. ENDFORM.
Step – VII: Screen Design
call screen 0100.
*The holder ought to be drawn as extensive as could be expected. Likewise, the Lines/segments in the qualities tab of the screen painter are to be loaded up with the worth 240 to get the full-screen splitter compartment.
Step – VIII: Module for object creation of various classes. (In PBO of output screen)
Create one module in the flow logic of the screen.
*&---------------------------------------------------------------------* *& Module OBJECT_CREATION OUTPUT *&---------------------------------------------------------------------* * Object Creation for Classes *----------------------------------------------------------------------* MODULE OBJECT_CREATION OUTPUT. CREATE OBJECT REF_CUST EXPORTING CONTAINER_NAME = 'SPLIT_CONT'. CREATE OBJECT REF_SPLIT EXPORTING PARENT = ref_cust ROWS = 1 COLUMNS = 2. CALL METHOD REF_SPLIT->GET_CONTAINER EXPORTING ROW = 1 COLUMN = 1 RECEIVING CONTAINER = ref_cont1.
* The width of the splitter container can be adjusted with the SET_COLUMN_WIDTH method. Pass the width as required.
CALL METHOD REF_SPLIT->SET_COLUMN_WIDTH EXPORTING ID = 1 WIDTH = 22. CALL METHOD REF_SPLIT->GET_CONTAINER EXPORTING ROW = 1 COLUMN = 2 RECEIVING CONTAINER = ref_cont2. CREATE OBJECT REF_TREE EXPORTING NODE_SELECTION_MODE = cl_simple_tree_model=>node_sel_mode_single. CALL METHOD REF_TREE->CREATE_TREE_CONTROL EXPORTING PARENT = ref_cont1. CREATE OBJECT REF_ALV2 EXPORTING I_PARENT = ref_cont2. ENDMODULE. " OBJECT_CREATION OUTPUT
Step – IX: Module for event registration. (In PBO of output Screen)
*&---------------------------------------------------------------------* *& Module EVENT_REGISTRATION OUTPUT *&---------------------------------------------------------------------* * Double Click Event Registration *§4a. Frontend registration(i): get already registered tree events. *................................................................ * The following four tree events registers ALV Tree in the constructor * method itself. * - cl_gui_column_tree=>eventid_expand_no_children * (needed to load data to frontend when a user expands a node) * - cl_gui_column_tree=>eventid_header_context_men_req * (needed for header context menu) * - cl_gui_column_tree=>eventid_header_click * (allows selection of columns (only when item selection activated)) * - cl_gui_column_tree=>eventid_item_keypress * (needed for F1-Help (only when item selection activated)) * * Nevertheless you have to provide their IDs again if you register * additional events with SET_REGISTERED_EVENTS (see below). * To do so, call first method GET_REGISTERED_EVENTS (this way, * all already registered events remain registered, even your own): * (If you do not these events will be deregistered!!!). * You do not have to register events of the toolbar again. *----------------------------------------------------------------------* MODULE EVENT_REGISTRATION OUTPUT. Data: lt_events type cntl_simple_events, ls_event type cntl_simple_event. Data: event_handler type ref to lcl_event_handler. CALL METHOD REF_TREE->GET_REGISTERED_EVENTS IMPORTING EVENTS = lt_events. ls_event-eventid = cl_simple_tree_model=>eventid_node_double_click. append ls_event to lt_events. CALL METHOD REF_TREE->SET_REGISTERED_EVENTS EXPORTING EVENTS = lt_events. create object event_handler. set handler event_handler->node_dc for ref_tree. ENDMODULE. " EVENT_REGISTRATION OUTPUT
Step – X: Module for output processing. (In PBO of output Screen)
*&---------------------------------------------------------------------* *& Module PROCESSING_OUTPUT OUTPUT *&---------------------------------------------------------------------* * Processing Output of the Table *----------------------------------------------------------------------* MODULE PROCESSING_OUTPUT OUTPUT. Data: ls_node type treemsnodt. CALL METHOD REF_TREE->ADD_NODE EXPORTING NODE_KEY = 'ROOT' ISFOLDER = 'X' TEXT = 'Orders' EXPANDER = 'X'. loop at lt_vbak into ls_vbak. ls_node-node_key = ls_vbak-vbeln. concatenate 'Sales Order#' ':' ls_vbak-vbeln into ls_node-text separated by space. CALL METHOD REF_TREE->ADD_NODE EXPORTING NODE_KEY = ls_node-node_key RELATIVE_NODE_KEY = 'ROOT' RELATIONSHIP = cl_simple_tree_model=>relat_last_child ISFOLDER = 'X' TEXT = ls_node-text EXPANDER = 'X'. endloop. loop at lt_vbap into ls_vbap. concatenate ls_vbap-vbeln ls_vbap-posnr into ls_node-node_key separated by space. ls_node-relatkey = ls_vbap-vbeln. concatenate ls_vbap-posnr ls_vbap-matnr into ls_node-text separated by space. CALL METHOD REF_TREE->ADD_NODE EXPORTING NODE_KEY = ls_node-node_key RELATIVE_NODE_KEY = ls_node-relatkey RELATIONSHIP = cl_simple_tree_model=>relat_last_child ISFOLDER = '' TEXT = ls_node-text EXPANDER = ''. endloop. ENDMODULE. " PROCESSING_OUTPUT OUTPUT
Duplicate or allude the inserted code however change the plan. I would prefer to propose foster the whole report with the assistance of nearby class or possibly apply some modularization ideas. I utilized different PBO modules which are a major ‘no’ for any continuous articles.
Tree designs should likewise be possible in numerous alternate ways. A lot of reports is accessible over the web. I picked the least difficult approach to doing that(ironically the class name is “cl_simple_tree_model”). Splitter holders are all around investigated yet barely utilized except if we have such unambiguous prerequisites. Nonetheless, this report is only “Old wine in another container”. Trust this annihilates our restraint of utilizing Splitter Compartments and Tree Models on a similar call and meet the second level headed of this instructional exercise.
At the point when you are done with your new development, the eventual outcome of your steady exertion should look something like underneath.
We put a great deal of exertion in conceptualizing, testing and composing every single article. In the event that you could pass this connect to no less than 5 partners/companions who you think would profit from our post, it would be an extraordinary blessing to our group. We believe our articles should reach to whatever number crowds as could be allowed so everybody would benefit and our group would stay spurred and our work doesn’t lose all sense of direction in this colossal expanse of the web.
YOU MAY LIKE THIS
Cracking the Code: Your Earning Potential as a SAP ABAP Developer with 5 Years of Experience