Purpose
When using CRM WebUI, we may encounter kinds of problems. For example, JS errors, BSP Exceptions, strange behaviors, etc.
Usually, when analyzing the issue, the first thing to do is to set user parameter WCF_IGNORE_ENHANCEMT = A which means standard mode. In this way, we can check whether the problem is caused by customer enhancement or not.
When we use this parameter, we may get one of the following 3 results:
- the same problem still happens.
- the problem does not occur any more.
- the CRM WebUI pages cannot be loaded at all when launching into the business role.
With different results, different ways must be used to analyze the issue:
- In the first situation, we might wondering whether it is a bug, whether there is some note/correction for it, or whether some customizations are missed. The main work to do next will be looking for notes, or documents in SAP portals to get a resolution.
- If the problem does not occur under standard mode, there is a high possibility that the issue is caused by some customer enhancement on some component or view. Then we need to know which component/view enhancements are responsible.
- If we are facing the third situation, we maybe want to check whether it is caused by customer enhancement or not first, and then decide what to do next.
In this article, we will introduce a way to by-pass the enhancement of some specified components or views as well as how to locate the cause to a specified view/controller/window enhancement for trouble shooting, which is especially helpful under the 2nd and 3rd situations.
This article assumes that you have basic knowledge about ABAP development, DEBUGGING.
**Notice, the way introduced in this article helps in many cases, but not 100% as the problems might be more complex.
Understanding of related knowledge
There are two database tables which contain the enhancement information for the enhanced components and views: BSPWD_COMP_EXT and BSPWD_CMP_C_REPL.
For example, If componenet ICCMP_INBOX is enhanced with enhancement set ZCORRINE_ENHANCEMENT_SET, its views InboxItems, InboxResultView, InboxSearch and its window InboxWindow are enhanced, there will be one entry in database table BSPWD_COMP_EXT and 4 entries in database table BSPWD_CMP_C_REPL:
On CRM WebUI, when navigating to a page for the first time, system reads these two tables to get the enhancement information for the current components.
If there is no entry returned, it means the component/view is not enhanced and thus standard component/view will be used.
This logic is implemented in method CL_BSP_WD_COMPONENT_DESCRIPTOR-> CONSTRUCOR.
In debugging mode, we can use 'Debugging->Go to statement' and 'Change field contents' functions to make the standard component/view used, instead of the enhanced ones.
In this way, we can check whether the issue is caused by enhancement, and locate to a specified view or window or controller, or even into a method.
Sample
In INBOX, the search result is not refreshed when searching again with a different search scenario. It always displays the entries of the first search.
Following is the steps to reproduce the issue:
- search with 'status' = Open and 'assigned to' = My group, there are 5 entries returned in the result list.
- search again with 'status' = Open and 'assigned to' = Org 1, there should be 3 entries returned, the title in the result also shows that 3 entries are found. But in the result list, the previous 5 entries are still displayed, instead of the new 3 entries.
The issue doesn’t exist if WCF_IGNORE_ENHANCEMT = A.
Now we need to check whether the issue is caused by the enhancement of component ICCMP_INBOX. If yes, which enhancement causes the issue: InboxSearch? InboxItems? InboxResultView? Or InboxWindow?
Detailed Steps
Before debugging, we must keep in mind that, only when navigating to a page for the FIRST time, CL_BSP_WD_COMPONENT_DESCRIPTOR-> CONSTRUCOR will be executed for the components in this page. Thus it is necessary to refresh the CRM WebUI page if you want to debug for the same component again.
Also, as this method will be called for every component, it's better to set breakpoint right before the page is navigated. Or else, the breakpoint will stop many times unnecessarily.
Finally, if there are too many assignment blocks contained in a page, for example, in the sales order detail page, it's better to hide all relevant ABs in personalize to prevent too many stops.
For the current sample, set wcf_ignore_enhancemt to blank, and then do the following steps:
- Log on the WebUI page.
- Before navigate to INBOX, set breakpoint in line 10 and line 54 in method CL_BSP_WD_COMPONENT_DESCRIPTOR-> CONSTRUCOR.
- Click on INBOX menu, the breakpoint will stop at line 10. sy-subrc = 0 means enhancement for ICCMP_INBOX is found. We change sy-subrc = 4, means the enhancement of ICCMP_INBOX will be by-passed.
- After changing sy-subrc to 4, press F8, the breakpoint will stop at line 54. We can see LT_REPLACEMENTS contains 4 entries. Now put cursor to line 62, and click menu 'Debugger->Goto Statement'. This means the codes between line 54 and line 62 will be ignored. In this way, the standard InboxItems, InboxResultView, InboxSearch and InboxWindow will be used, instead of the enhanced ones.
- After above 4 steps, the result list are ok: 3 expected entries are displayed. This approves that the issue is caused by the enhancement of ICCMP_INBOX.
- In order to locate further into the specified view, we refresh the page (by clicking F5 for IE). Set breakpoint on line 54 only and then click on INBOX menu. It will stop at line 54 directly. Double click on LT_REPLACEMENTS.
- Select the suspected entry in order to remove it from the lt_replacements. Double click on the marked icon on the right side.
- From the pop up dialog, click on delete icon, then select Ok button.
- Click on 'Yes' from the next dialog.
- Now only 3 entires left for lt_replacements, click on 'Back' button.
- Click on F8 to finish all the executions until the INBOX page displays. In this way, the standard view ICCMP_INBOX/InboxItems will be used, its enhancement is by-passed. But for the others (InboxResultView, InboxSearch, InboxWindow), enhancement are still being used.
If the issue doesn't happen now, it means the issue is caused by the enhancement of ICCMP_INBOX/InboxItems.
If the issue still happens, then you have to refresh the page, and repeat step 6 to 11 for other 3 entries one by one.
In this case, actually, the issue doesn't happen when removing the entry for InboxItems from LT_REPLACEMENTS. Then we go to T-code bsp_wd_cmpwb, display the view InboxItems, and check whether there are any customer redefined methods. And then set breakpoints at these redefined methods. Finally we find out the lines which cause the issue by using debug functions like ‘go to statements’, etc.
This is the simplest sample. Actually, there are cases that we must remove 2 entries from LT_REPLACEMENTS and then the issue will not happen anymore -- the issue always happens if only single one entry is removed.
others
- Using the debugging way, debug skill is required, but the changes are only seen during the debugging. Nothing will be changed after that.
- Actually, without debugging, there is also another simpler way to remove the enhancement information of an object(component, window, controller, view, etc). This is to make use of the view BSPWDVC_CMP_EXT via T-code SM34. BSPWDVC_CMP_EXT is formed from database table BSPWD_COMP_EXT and BSPWD_CMP_C_REPL. But please be aware, when using this way, the created Z* applications, Z* classes, etc, won't be deleted. Only the enhancement information will be removed from view BSPWDVC_CMP_EXT. Maybe you want to restore this information after the testing. Thus please note down all the information or make a backup in advance.
1 Comment
Former Member
Good one . Thanks for sharing.