Ofbiz项目学习——阶段性小结——服务返回结果
一、返回成功
1、在.DispatcherReturnDemoService类中编写服务【returnSuccess】,内容如下:
/**
* 返回成功结果
* @param dctx
* @param context
* @return
*/
public static Map<String,Object> returnSuccess( DispatchContext dctx, Map<String,Object> context ){ //填写服务执行的代码
//.......
String message = "执行成功"; //当程序执行成功时, 返回成功结果集
Map<String,Object> result = ReturnMapUtil.getSuccessMap();
result.put("message", message);
return result;
}
2、在servicedef文件夹下的services_dispatcher_return_demo.xml中把这两个方法配制成服务
<service name="returnSuccess" engine="java"
location="DispatcherReturnDemoService" invoke="returnSuccess">
<attribute name="returnCode" type="Map" mode="OUT" optional="true" />
</service>
二、返回失败
1、返回失败结果
1.1 在DispatcherReturnDemoService类中编写服务【returnError】,内容如下:
/**
* 返回失败结果
* @param dctx
* @param context
* @return
*/
public static Map<String,Object> returnError( DispatchContext dctx, Map<String,Object> context ){ //填写服务执行的代码
//.......
String message = "执行失败";
boolean errorFlag = true; //返回结果
Map<String,Object> result = null;
if( errorFlag ){
//当程序执行失败时, 返回成功结果集
result = ReturnMapUtil.getErrorMap("errorCode"); //这里的errorCode需要用具体的错误编码来替换
result.put("message", message);
}else{
//当程序执行成功时, 返回成功结果集
result = ReturnMapUtil.getSuccessMap();
result.put("message", message);
}
return result; }
1.2 在servicedef文件夹下的services_dispatcher_return_demo.xml中把这两个方法配制成服务
<service name="returnError" engine="java"
location="DispatcherReturnDemoService" invoke="returnError">
<attribute name="returnCode" type="Map" mode="OUT" optional="true" />
</service>
2、在服务内部捕获异常后怎么转成失败结果返回
2.1 DispatcherReturnDemoService类中编写服务【catchError】,内容如下:
/**
* 捕获异常结果
* @param dctx
* @param context
* @return
*/
public static Map<String,Object> catchError( DispatchContext dctx, Map<String,Object> context ){ //填写服务执行的代码
try{
//假设执行的代码中有回抛出异常的情况, 我们需要捕获这个异常
int a = 8 ;
int b = 0 ;
int i = a / b; }catch(Exception e){
//则把错误信息以Error级别打印到日志文件中
Debug.logError(e, module);
//把指定的错误码对应的描述信息返回给服务调用者
return ReturnMapUtil.getErrorMap(DemoErrorMapping.BASE0000);
}
//当程序执行失败时, 返回成功结果集
return ReturnMapUtil.getSuccessMap(); }
2.2 在servicedef文件夹下的services_dispatcher_return_demo.xml中把这两个方法配制成服务
<service name="catchError" engine="java" location="DispatcherReturnDemoService" invoke="catchError">
<attribute name="returnCode" type="Map" mode="OUT" optional="true" />
</service>
3、调用一个服务后怎么判断该服务是否执行成功
3.1 在DispatcherReturnDemoService类中编写服务【checkResult】,内容如下:
/**
* 调用一个服务后怎么判断该服务是否执行成功
* @param dctx
* @param context
* @return
*/
public static Map<String,Object> checkResult( DispatchContext dctx, Map<String,Object> context ){ //获取服务引擎
LocalDispatcher dispatcher = dctx.getDispatcher(); //.....
//其它代码
//....... //调用服务
Map<String,Object> output = null;
try{
Map<String,Object> input = FastMap.newInstance();
output = dispatcher.runSync("returnSuccess", input);
}catch(Exception e){
//则把错误信息以Error级别打印到日志文件中
Debug.logError(e, module);
//把指定的错误码对应的描述信息返回给服务调用者
return ReturnMapUtil.getErrorMap(DemoErrorMapping.BASE0000);
}
//检查该服务是否已经执行成功, 如果没有执行成功,则把错误结果直接返回给上层调用者.
if( !ServiceUtil.isSuccess(output) ){
return output;
}
//.....
//其它代码
//....... //当程序执行成功时, 返回成功结果集
return ReturnMapUtil.getSuccessMap();
}
3.2 在servicedef文件夹下的services_dispatcher_return_demo.xml中把这两个方法配制成服务
<service name="returnError" engine="java" location="DispatcherReturnDemoService" invoke="returnError">
<attribute name="returnCode" type="Map" mode="OUT" optional="true" />
</service>
4、怎么把一个服务的失败返回结果转成业务异常类抛出
4.1 在DispatcherReturnDemoService类中编写一个方法【checkResult】,内容如下:
/**
* 怎么把一个服务的失败返回结果转成业务异常类抛出(这个仅仅是一个方法, 不是一个服务)
* @param dctx
* @param context
* @return
*/
public static void returnInMethod( LocalDispatcher dispatcher ) throws BusinessException{ //.....
//其它代码
//....... //调用服务
Map<String,Object> output = null;
try{
Map<String,Object> input = FastMap.newInstance();
output = dispatcher.runSync("returnSuccess", input);
}catch(Exception e){
//则把错误信息以Error级别打印到日志文件中
Debug.logError(e, module);
//把异常类型转成指定类型,并抛出
throw new BusinessException(e,DemoErrorMapping.BASE0000);
}
//检查该服务是否已经执行成功, 如果没有执行成功,把返回结果转成业务异常类抛出
if( !ServiceUtil.isSuccess(output) ){
throw new BusinessException(output);
} //.....
//其它代码
//.......
}
Ofbiz项目学习——阶段性小结——服务返回结果的更多相关文章
- Ofbiz项目学习——阶段性小结——视图
一.简要介绍 1.按照SQL的视图概念:在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表.视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 2. ...
- Ofbiz项目学习——阶段性小结——查询
一.组装参数的学习 首先是查询条件,对于查询条件,需要判断是否从前端传递空值?——怎么处理查询空值? 当然可以一个一个进行判断,但是这样代码会导致很多,可以统一处理,形成一个公共方法. 1. 单个处理 ...
- Ofbiz项目学习——阶段性小结——删除数据
一.根据主键进行删除 /** * 按主键进行删除 * @param dctx * @param context * @return */ public static Map<String,Obj ...
- Ofbiz项目学习——阶段性小结——更新数据
一.根据一个字段进行修改 /** * 根据一个字段进行修改(这个条件字段可以是主键, 也可以不是主键) * @param dctx * @param context * @return */ publ ...
- Ofbiz项目学习——阶段性小结——插入数据
一.通用插入操作 /** * * 编写一个服务createUomOneDemo, * 该服务的作用是在表Uom中增加一条记录,其中: * 字段uomId的值为“BaseLineProduct”. * ...
- Apache OFBiz 学习笔记 之 服务引擎 二
加载服务定义文件 ofbiz-component.xml:所有的服务定义文件在每个组件的ofbi-component.xml文件中 加载服务定义 例:framework/common/ofbi ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档
0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...
- Spring Boot 项目学习 (一) 项目搭建
0 引言 本文主要记录借用Idea 开发环境下,搭建 Spring Boot 项目框架的过程. 1 系列文档目录 Spring Boot 项目学习 (一) 项目搭建 Spring Boot 项目学习 ...
随机推荐
- Promise实现子组件的多表单校验并反馈结果给父组件
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/11529207.html,多谢,=.=~ 本文中多表单验证主要用到Promise.all()实现多 ...
- [Atcoder AGC032C]Three Circuits
题目大意:有一张$n$个点$m$条边的无向连通图,判断是否可以从中分出$3$个环,满足三个环覆盖整张图并且没有重复的边.$n,m\leqslant10^5$ 题解:分类讨论.有度数为奇肯定不行,因为连 ...
- Java的常用API之Date类简介
Data类 java.util.Date:表示日期和时间的类类Date 表示特定的瞬间,精确到毫秒.毫秒:千分之一秒 1000毫秒=1秒 把日期转换成毫秒: 当前的日期:2019-07-18 时间原点 ...
- 什么是SQL ?
SQL 1.什么是SQL ? Structured Query Languange:结构化查询语言 其实就是定义了操作所有关系型数据库的规则.每一种数据库操作的方式存在不一样的地方,称为“方言”. 2 ...
- 用友U9 UFSoft.UBF.Business.Session
Session的概念 在现在UBF中,Session的本意是work unit,即持久层的一个边界,非常轻,主要用作批量提交,并标识这次批量提交的边界,不涉及到事务等概念. 当前ISession可以通 ...
- Phenix.NET for CSLA & WF4,企业级、分布式、符合领域建模的OOP软件快速开发平台
2014-5-20版本: Phenix.NET for CSLA & WF 开发平台: http://download.csdn.net/download/phenixiii/7390405 ...
- winform datagridview控件使用
最近做项目时,显示查询结果总需要绑定到datagridview控件上显示,总结了给datagridview绑定数据的方式,以及导出datagridview数据到excel表格,如有错误请多指教 1.直 ...
- Java之路---Day18(List集合)
2019-11-05-23:03:28 List集合: java.util.List 接口继承自 Collection 接口,是单列集合的一个重要分支,习惯性地会将实现了List 接口的对象称为Lis ...
- Vue相关知识点记录
1.安装 vue不支持ie8以下版本(无法模拟ECMAScript5特性),支持所有兼容ECMAScript5的浏览器. 浏览器安装Vue Devtools, 可以在更友好的界面中审查和调试Vue应用 ...
- 【转载】C#通过Remove方法移除DataTable中的某一列数据
在C#中的Datatable数据变量的操作过程中,有时候我们需要移除当前DataTable变量中的某一列的数据,此时我们就需要使用到DataTable变量内部的Columns属性变量的Remove方法 ...