多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 前言 TC 的开发分为CF 端开发和Web 端开发。 CF端和Web 端各自有自己的错误信息提示方式。 两种方式是否可以有一些整合? 整合的好处即统一了显示, 又减少了重复 ### CF 端错误信息 CF 端错误一般是给OMF 端来使用的。 OMF是一个富客户端的程序。 错误方式就是弹出一个窗口。 代码开发方式如下: ~~~ CheckDstat(uiShowText("errText001", NULL, UI_ATTENTION_TEXT, *mfail, WHERE)); *mfail = 11001; goto CLEANUP; ~~~ errText001 是定义在met  中的错误信息 11001 是给这个错误一个编号, 方便错误定位。 ### Web 端错误信息 Web 端错误信息提示方式一般是转到一个错误页面, 显示错误的信息: 代码方式: ~~~ ActionComponentUtil.createErrorBean(arguments, errMsg); return options.getOption("failure"); ~~~ 这里的errMsg 就是定义的一个错误信息的字符串。 ### 两者的整合 其实默认OOTB 的状况下, 这两者已经进行了一定的整合,就是但出现一些错误信息的时候, 跳转到的错误信息的页面就是CF端的错误信息。 对于开发者来说, 就要知道这两者是如何整合的了。 先说一个可能出现的误区: 就是在java 端通过try catch MfailException 是否就可以取到错误信息了呢? 答案是不可以, 这个异常里只有 mfail 1001 这样的代表服务端出错的信息, 具体的错误信息并没有。 它们之间是通过StatusReporter 这个类进行衔接的, 这个类的实例可从session 中取得, 具体的获取代码如下: ~~~ StatusReporter sr = null; try { sr = session.getStatusReporter(); } catch (AuthorizationException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } catch (AuthenticationException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } Status[] status_msg = null;; String msg = ""; try { status_msg = sr.getStatus(1); if (status_msg != null) { for (int len = 0; len < status_msg.length; ++len) { msg = status_msg[len].text; msg = msg.replace('\n', ' '); System.out.println("message=" + msg); } } } catch (Exception e1) { msg = e1.getMessage(); } ~~~ 实际web 端使用类似: ~~~ String errMsg = swcomProcessor.getCFErrMsg(); ActionComponentUtil.createErrorBean(action_context, arguments, new EnterpriseException(errMsg)); return options.getOption("failure"); ~~~ 或 ~~~ ActionComponentUtil.createErrorBean(arguments,errMsg); ~~~ 至于StausReporter 是如何构建出来的, 还有待继续研究了。