Skip to Content
Author's profile photo Corrine Guan

Use debugger scripts to list component/view enhancement information


As mentioned in my wiki ‘How to check and identify whether an issue on CRM WebUI is caused by enhancement of some component or view ‘, with method CL_BSP_WD_COMPONENT_DESCRIPTOR->CONSTRUCOR, enhancement information will be retrieved from database table BSPWD_COMP_EXT and BSPWD_CMP_C_REPL when the page is accessed for the first time.

Inside that wiki, a way is introduced on how to by-pass enhancement of some specific component or view.

Here, I will introduce a way to list all the enhancement information for some specific operation. For example, I display a service request. In service request screen, there are several assignment blocks, like ‘Details’, ‘Notes’, ‘Attachments’, ‘Status’, ‘Transaction history’, ‘business context’, etc. I want to know which components are being used inside this service request page, and also want to know if any one of them has been enhanced.

Of course, we can set breakpoint in method CL_BSP_WD_COMPONENT_DESCRIPTOR->CONSTRUCOR. When we click on the service request from the result list to display it, breakpoint will stop every time when a component is processed. For example, it will stop when IV_COMPONENT_NAME = ‘SRQM_INCIDENT_H’, or ‘BTCATEGORIES’, or ‘BTDOCFLOW’, etc. Then we will know them and know if they have been enhanced. But the problem is the breakpoint will stop many times.

If we use debugger script feature in debugging, we are able to make the breakpoint stop less. In this document, firstly, I will introduce how to create the script. After that, I will give a step by step explanation of how to use it.

Understanding of related knowledge

Debugger scripting is a new debugging feature available as of SAP NetWeaver 7.0 Ehp2. It may be used to automate many actions.

We will write our own debugger script. Make it possible to stop at ‘select’ statement for the specific database tables BSPWD_COMP_EXT and BSPWD_CMP_C_REPL. If the ‘select’ statement is for database table BSPWD_COMP_EXT, we will write into trace file that if this component is enhanced or not. If the select statement is for database table BSPWD_CMP_C_REPL, and there are entries returned from this table, we will write into trace file all these entries one by one.


Authorization to create, edit debugger script.


Make a search in INBOX with object id = ‘8000000364’ and display it. I will list all components used in the display screen into a trace file, together with enhancement information.

Detailed Steps

Step 1: Create a script and input source codes

Executing T-code SAS, navigate to ‘Script Editor’ tab. Default script ‘RSTPDA_SCRIPT_TEMPLATE’ is displayed:

1 default script.PNG

We can see two parts: class definition part, class implementation part. We also see four methods: prologue, init, script and end. For our purpose, we only need to add source codes in method script. In order to do this, remove the default codes inside method ‘script’, then input following source codes:

METHOD script.

* define trace structure
DATA: ls_trace TYPE tpda_trace_custom.
*–select from db BSPWD_COMP_EXT– begin
DATAlv_db_stop_1 TYPE abap_bool,
TYPE abap_bool.

    DATAl_db_tables_it TYPE         cl_tpda_script_scan_sql_sel=>ty_it_db_tables,
LIKE LINE OF l_db_tables_it,
TYPE REF TO  cl_tpda_script_scan_sql_sel,
TYPE         string.
        l_scan_object ?= cl_tpda_script_scan
= abap_source->program( )
= abap_source->include( )
= abap_source->line( )


        l_db_tables_it = l_scan_object->db_tables( ).

        LOOP AT l_db_tables_it INTO l_dbtab.

          IF l_dbtabdynamic = abap_true.
= cl_tpda_script_data_descr=>get_simple_value( p_var_name = l_dbtabname  ).
= l_dbtabname.

          IF l_curr_dbtab = ‘BSPWD_COMP_EXT’.
= abap_true.
ELSEIF l_curr_dbtab = ‘BSPWD_CMP_C_REPL’.
= abap_true.

          IF lv_db_stop_1 = abap_true OR lv_db_stop_2 = abap_true.
*   if it is the select one of the two tables, one step over so that the select statement is executed
CALL METHOD debugger_controller->debug_step
= cl_tpda_script_debugger_ctrl=>debug_step_over.


      CATCH cx_sy_move_cast_error.
*        ME->BREAK( ).
CATCH cx_tpda_script_scan_macro.
*        ME->BREAK( ).
CATCH cx_tpda_script_scan.
*        ME->BREAK( ).
CATCH cx_tpda_varname .
*        ME->BREAK( ).
CATCH cx_tpda_script_no_simple_type .
*        ME->BREAK( ).
CATCH cx_root.
*        ME->BREAK( ).

* scripts when select on db table BSPWD_COMP_EXT
IF lv_db_stop_1 = abap_true.
*–to read sy_subrc
DATA: lv_sy_subrc LIKE sysubrc.
DATA: lv_component_name TYPE bsp_wd_component_name.

      CALL METHOD cl_tpda_script_data_descr=>get_simple_value
= lv_sy_subrc.

*–to read iv_component_name
CALL METHOD cl_tpda_script_data_descr=>get_simple_value
= lv_component_name.

      IF lv_sy_subrc = 0.
*–trace information when this component is enhanced
value = ‘component: ‘ && lv_component_name && ‘ has been enhanced ‘.
*–trace information when this component is not enhanced
value = ‘component: ‘ && lv_component_name && ‘ is not enhanced ‘.
*–write the trace information into trace file
CALL METHOD trace->add_custom_info
= ls_trace.

* scripts when select on db table BSPWD_CMP_C_REPL
IF lv_db_stop_2 = abap_true.

      DATA: lv_ehn_set TYPE bsp_wd_enhancement_set,
TYPE bsp_wd_component_name.

      DATA: lt_replacements TYPE STANDARD TABLE OF bspwd_cmp_c_repl.
DATA: ls_entry TYPE bsp_wd_contr_replacement.

      FIELD-SYMBOLS: <entry> TYPE bspwd_cmp_c_repl.
*–get enhancement set value
CALL METHOD cl_tpda_script_data_descr=>get_simple_value
= lv_ehn_set.
*–get component name
CALL METHOD cl_tpda_script_data_descr=>get_simple_value
= lv_com.
*–select detailed enhancement information of all views under this component
SELECT * FROM bspwd_cmp_c_repl INTO TABLE lt_replacements
WHERE enhancement_set = lv_ehn_set AND
= lv_com.

      LOOP AT lt_replacements ASSIGNING <entry> .
*–write trace information for every enhanced entry
CONCATENATE <entry>replaced_c_appl <entry>replaced_contr INTO ls_entryreplaced SEPARATED BY ‘/’.
TRANSLATE ls_entryreplaced TO LOWER CASE.
CONCATENATE <entry>replacing_c_appl <entry>replacing_contr INTO ls_entryreplacing SEPARATED BY ‘/’.
TRANSLATE ls_entryreplacing TO LOWER CASE.

        ls_tracevalue = ‘…. ‘ && ls_entryreplaced && ‘ is replaced by ‘ && ‘..’ && ls_entryreplacing .

        CALL METHOD trace->add_custom_info
= ls_trace.

ENDMETHOD.                    “script

After that, it will look like this:

2 after adding source codes into script method.PNG

Click ‘save as’ button, give a name and description:

3 save the script.PNG

Step 2: Add conditions

We need to make the script work on elect statement. So we check the checkbox ‘Breakpoint Reached’, and then click the ‘pen’ icon. In the pop up dialog, set ABAP command at ‘select’.

4 select debugger events.PNG

Then we click on ‘save’ button.

5 bk set.PNG

Step 3: Use the debugger script

  1. Logon the CRM WebUI, navigate to INBOX and make the search.

    7 search a result.PNG

  2. Go to SAPGUI, display method CL_BSP_WD_VIEW_MANAGER->DO_REQUEST in T-code SE24, set two breakpoints in line 13 and line 296.

    6-1 bk in line 13.PNG

    6-2 bk in line 296.PNG

  3. Now back to the CRM webui, click the ‘service request’ hyperlink to display the service request. The breakpoint will stop at line 13 of method CL_BSP_WD_VIEW_MANAGER->DO_REQUEST.

    1 stop at line 13 in view cls.PNG

  4. Click ‘Script’ tab. Click ‘Load Script’ button, select the script from ‘Database’ and click ‘ok’.
    2 select the ZSCRIPT_ENH_LIST.PNG
  5. The script will be loaded. Click ‘Start Script’ button.
    3 after loading the script.PNG
  6. The script will run until it reaches breakpoint in line 296 in method CL_BSP_WD_VIEW_MANAGER->DO_REQUEST.
    4 after script execution.PNG
  7. In the ‘User Defined Trace’ part, we can see all traces if we scroll up. Of course, we can also see it later again from trace file using T-Code SAS.
    4-2 scroll up the trace part.PNG
  8. Click ‘Exit Script’ button, the script will be stopped. Please be aware, the trace will only be written and saved into trace file when ‘Exit script’ button is clicked. After clicking ‘Exit Script’ button, it will go back to ‘Script’ edit mode.
    5 after click the 'exit script' button.PNG
  9. Now, if we go to ‘Standard’ tab, we can see that currently the breakpoint is at line 296. Click F8 or ‘Continue’ button to let the program run until the end.
    6 go to standard tab.PNG
  10. Now the service request is displayed.

    7 service request is displayed.PNG

  11. In SAPGUI, execute T-code SAS. We can see a new entry is generated. Double click the entry.
    8 sas trace list.PNG
  12. Click ‘Custom’ button, the trace details will be displayed. From these entries, we can see the components used in the display screen. And the enhancement information. Here, only component ICCMP_SSC_LL has been enhanced.
    9 trace details.PNG
  13. Component ICCMP_SSC_LL is ‘Business Context’.

    9-2 Business context is enhanced.PNG

  14. This is the technical Data information.

    9-3 Business context is enhanced.PNG


Above steps can be used in several situations to get the enhancement information list. For example, when navigating to menus like ‘Sales cycles’, ‘servcie operations’, ‘Inbox’, ‘Knowledge Search’ … from navigation bars, when going to the document details from result lists, etc.

There is also some special situations. For example, when we click a business role to access the CRM WebUI, we want to know what components are processed and which ones are enhanced. In this case, it is not enough to set breakpoint only in method CL_BSP_WD_VIEW_MANAGER->DO_REQUEST. Method CL_BSP_WD_APPL_CONTROLLER->DO_INIT is also involved.  And also, when business role is initially accessed, there will be two debug session. What we need to do extrally are:

  1. We need to set breakpoints in both method CL_BSP_WD_APPL_CONTROLLER->DO_INIT and CL_BSP_WD_VIEW_MANAGER->DO_REQUEST.
  2. We need to ‘Start script’ and ‘Exit script’ for both of the debug session seperatedly.

In case it is too long, I give an example in another article ‘Use debugger scripts to list component/view enhancement information 2 – used in business role initial loading’ seperatedly.

Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo Julin Xin
      Julin Xin

      Amazing! Powerful feature.

      Thanks Corrine.

      Author's profile photo Naveen M
      Naveen M

      Thank you for sharing such a useful post.