When I am working together with local partner to resolve one issue caused by incorrect enhancement set configuration for new custom Product set type, I have realized that if the UI exception is raised and caught by framework, there would be no entry in ST22, which causes the difficulties for later trouble shooting.
When I am debugging the code how the framework handles with the exception, I found there is the possibility to let the framework call the error handler defined by ourselves being registered in table bsperrhandler.
So I think it is worthy to create a simple error handler class to persist the exception information into a new transparent table for later checking.
(1) create a class ZCL_ERROR_HANDLER with a static public method STORE_ERROR_INFO, signature as below:
Source code as below. Just extract error message text and the exact position which line of source code has raised the exception:
METHOD store_error_info.
DATA: lv_header_text TYPE string,
l_einternal TYPE REF TO cx_bsp_einternal,
l_exception TYPE REF TO cx_root,
l_program_name TYPE syrepid,
l_include_name TYPE syrepid,
l_source_line TYPE i,
lv_log_text TYPE string,
ls_log TYPE zbsplog.
l_exception = exception.
CHECK server IS NOT INITIAL AND exception IS NOT INITIAL.
lv_header_text = exception->get_text( ).
TRY.
l_einternal ?= exception.
CATCH cx_root.
ENDTRY.
IF l_einternal IS BOUND.
CALL METHOD l_einternal->get_source_position
IMPORTING
program_name = l_program_name
include_name = l_include_name
source_line = l_source_line.
ELSE.
WHILE l_exception->previous IS BOUND.
l_exception = l_exception->previous.
ENDWHILE.
CALL METHOD l_exception->get_source_position
IMPORTING
program_name = l_program_name
include_name = l_include_name
source_line = l_source_line.
ENDIF.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_16 = ls_log-uuid.
ls_log-error_date = sy-datlo.
ls_log-error_time = sy-timlo.
ls_log-error_string = |<head><h1>{ lv_header_text }</h1><h2>Error Date:{ sy-datlo }</h2><h2>Error Time:{ sy-timlo }</h2>| &&
|<h3>Error program:{ l_program_name }</h3><h3>Error include:{ l_include_name }</h3><h3>Source code line number:{ l_source_line }</h3>|
&& |</head>|.
INSERT zbsplog FROM ls_log.
COMMIT WORK AND WAIT.
ENDMETHOD.
(2) Create a new transparent table to store the exception detail:
(3) Register the new error handler into table bsperrhandler:
(4) Write a simple report to list the exception information. Of course more elegant UI like ALV could be used:
data: lt_table type STANDARD TABLE OF zbsplog,
lv_error TYPE zbsplog-error_string.
FIELD-SYMBOLS:<item> TYPE zbsplog.
START-OF-SELECTION.
SELECT * INTO TABLE lt_table FROM zbsplog.
LOOP AT lt_table ASSIGNING <item>.
WRITE:/ 'guid: ', <item>-uuid,'date: ', <item>-error_date, <item>-error_time.
lv_error = <item>-error_string.
HIDE lv_error.
ENDLOOP.
AT LINE-SELECTION.
cl_demo_output=>display_html( lv_error ).
execute the report and double click one line item, the detail information would be displayed via the handy class cl_demo_output. With the include name and source code line number available, you could implement further handling like automatically navigation to the source code in ABAP editor by calling function module RS_TOOL_ACCESS with include name and source code number passed in.
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
在SAP CRM 7.0版本中,WebClient UI配置是一项关键任务,它涉及到了用户界面的定制和优化,以提升用户体验和业务效率。WebClient UI是SAP CRM的一个核心组件,提供了一个基于Web的交互界面,使得用户能够访问和操作...
在SAP CRM WebUI中创建下拉列表是一个关键任务,特别是在设计用户界面以提供更高效、用户友好的交互时。本教程将引导你通过一系列步骤来实现这一目标,特别是针对SEX(性别)属性创建一个下拉框。 首先,你需要获取...
SAP CRM的基础知识通常包括对于其核心组件的理解,包括主数据(如账户、组织模型、产品等),交易处理、定价、开票、CRM中间件以及CRM WebClient UI。CRM中间件主要负责不同系统组件之间的信息交换,而CRM WebClient...
Sent: Thursday, April 18, 2013 3:59 PM Subject: 为什么design time时候看到的是ICQR,点了service之后看到02QR的代码被call到 这是cross component navigation在起作用。 Result list是model在ICQR里面,如果点...
《SAP CRM基础培训教材详解》 ...总结来说,SAP CRM的基础培训涵盖了WebClient UI的演变及其丰富元素,以及CRM与ERP的集成策略。了解这些知识,有助于更好地理解和使用SAP CRM系统,提升企业的运营效率和服务质量。
Sent: Thursday, May 9, 2013 6:30 PM Subject: ON_NEW_FOCUS的用途 ROOT ———————————— Product ID PRODshortText ———————————— Product Description Genil Model hierarchy
UI Guidelines for CRM WebClient User Interface
在SAP CRM基础培训中,WebClient UI(Web客户端用户界面)是一个重要的学习焦点,它是用户与系统交互的主要界面。下面我们将深入探讨WebClient UI的相关知识点。 WebClient UI的发展历程是从GUI(图形用户界面)...
产品建议不仅能在标准订单等销售事务中应用,还能在CRM WebClient UI(交互中心)和Web渠道中实时呈现,帮助销售人员在与客户的互动中快速响应并提供个性化建议。 通过灵活地配置产品联想规则,企业可以设定复杂的...
请注意,实际应用中可能需要处理错误和异常,以及考虑线程同步问题,确保UI线程安全地更新进度条。此外,如果要实现更复杂的功能,比如暂停和恢复下载,可能需要使用更高级的类如System.Net.Http.HttpClient,配合...
首先,`DownloadManager.cs`可能是整个下载过程的管理者,它可能负责初始化`WebClient`实例,启动和暂停下载任务,以及管理多个下载任务。`DownloadProcessForm.Designer.cs`和`DownloadProcessForm.cs`组合起来构成...
在C#编程中,WebClient类提供了一种简单的方式来实现文件下载。WebClient是一个高度封装的网络通信类,主要用于HTTP协议交互,包括...在实际应用中,还要考虑错误处理和异常恢复机制,以提高程序的稳定性和用户体验。
### C# WebClient 上传文件知识点解析 #### 一、引言 在开发过程中,经常会遇到需要将客户端的文件上传到服务器的需求。C#语言提供了多种方法来实现这一功能,其中`WebClient`类就是一种非常简便的方式。本文将详细...
这在UI应用程序中尤为重要,因为阻塞主线程会导致用户界面无响应。C# 引入了`async`和`await`关键字,使得异步编程变得更加简洁和易于理解。 2. **WebClient类** `System.Net.WebClient`是.NET Framework中一个...
- **错误处理**:`WebClient`的下载方法可能会抛出异常,如`WebException`,因此在实际应用中,应添加适当的异常处理代码。 - **取消下载**:可以通过调用`WebClient`的`CancelAsync()`方法取消正在进行的下载任务...
WebClient安装文件。 在Java世界中,有许多用于发送HTTP请求的库。比较三种流行的HTTP客户端:WebClient,HttpClient和OkHttp。WebClient是Spring 5中引入的非阻塞,反应式的Web客户端。它是在Project Reactor和...
在使用`WebClient`进行网络请求时,可能会遇到各种异常,如网络连接问题、认证失败等。建议使用`try-catch`块来捕获并处理这些异常。 ```csharp try { // 发送请求 } catch (Exception ex) { Console.WriteLine(...
在实际开发中,你可能需要根据自己的需求调整这些步骤,比如添加身份验证、使用异步上传以避免阻塞UI线程等。 总之,利用C#的WebClient类上传文件到IIS是一项常见的任务,通过理解HTTP协议和WebClient类的工作原理...
WebClient jar包
如果网页源文件包含非标准的UTF-8序列,解码时可能会出现异常,这时需要适当地处理这些异常。 在项目实践中,我们通常会把这段代码封装到一个方法里,以便在多个地方重用。比如,我们可以创建一个名为`...