一、返回成功

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项目学习——阶段性小结——服务返回结果的更多相关文章

  1. Ofbiz项目学习——阶段性小结——视图

    一.简要介绍 1.按照SQL的视图概念:在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表.视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 2. ...

  2. Ofbiz项目学习——阶段性小结——查询

    一.组装参数的学习 首先是查询条件,对于查询条件,需要判断是否从前端传递空值?——怎么处理查询空值? 当然可以一个一个进行判断,但是这样代码会导致很多,可以统一处理,形成一个公共方法. 1. 单个处理 ...

  3. Ofbiz项目学习——阶段性小结——删除数据

    一.根据主键进行删除 /** * 按主键进行删除 * @param dctx * @param context * @return */ public static Map<String,Obj ...

  4. Ofbiz项目学习——阶段性小结——更新数据

    一.根据一个字段进行修改 /** * 根据一个字段进行修改(这个条件字段可以是主键, 也可以不是主键) * @param dctx * @param context * @return */ publ ...

  5. Ofbiz项目学习——阶段性小结——插入数据

    一.通用插入操作 /** * * 编写一个服务createUomOneDemo, * 该服务的作用是在表Uom中增加一条记录,其中: * 字段uomId的值为“BaseLineProduct”. * ...

  6. Apache OFBiz 学习笔记 之 服务引擎 二

    加载服务定义文件   ofbiz-component.xml:所有的服务定义文件在每个组件的ofbi-component.xml文件中   加载服务定义 例:framework/common/ofbi ...

  7. 中小研发团队架构实践之生产环境诊断工具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如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

  8. Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档

    0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...

  9. Spring Boot 项目学习 (一) 项目搭建

    0 引言 本文主要记录借用Idea 开发环境下,搭建 Spring Boot 项目框架的过程. 1 系列文档目录 Spring Boot 项目学习 (一) 项目搭建 Spring Boot 项目学习 ...

随机推荐

  1. Promise实现子组件的多表单校验并反馈结果给父组件

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/11529207.html,多谢,=.=~ 本文中多表单验证主要用到Promise.all()实现多 ...

  2. [Atcoder AGC032C]Three Circuits

    题目大意:有一张$n$个点$m$条边的无向连通图,判断是否可以从中分出$3$个环,满足三个环覆盖整张图并且没有重复的边.$n,m\leqslant10^5$ 题解:分类讨论.有度数为奇肯定不行,因为连 ...

  3. Java的常用API之Date类简介

    Data类 java.util.Date:表示日期和时间的类类Date 表示特定的瞬间,精确到毫秒.毫秒:千分之一秒 1000毫秒=1秒 把日期转换成毫秒: 当前的日期:2019-07-18 时间原点 ...

  4. 什么是SQL ?

    SQL 1.什么是SQL ? Structured Query Languange:结构化查询语言 其实就是定义了操作所有关系型数据库的规则.每一种数据库操作的方式存在不一样的地方,称为“方言”. 2 ...

  5. 用友U9 UFSoft.UBF.Business.Session

    Session的概念 在现在UBF中,Session的本意是work unit,即持久层的一个边界,非常轻,主要用作批量提交,并标识这次批量提交的边界,不涉及到事务等概念. 当前ISession可以通 ...

  6. Phenix.NET for CSLA & WF4,企业级、分布式、符合领域建模的OOP软件快速开发平台

    2014-5-20版本: Phenix.NET for CSLA & WF 开发平台: http://download.csdn.net/download/phenixiii/7390405 ...

  7. winform datagridview控件使用

    最近做项目时,显示查询结果总需要绑定到datagridview控件上显示,总结了给datagridview绑定数据的方式,以及导出datagridview数据到excel表格,如有错误请多指教 1.直 ...

  8. Java之路---Day18(List集合)

    2019-11-05-23:03:28 List集合: java.util.List 接口继承自 Collection 接口,是单列集合的一个重要分支,习惯性地会将实现了List 接口的对象称为Lis ...

  9. Vue相关知识点记录

    1.安装 vue不支持ie8以下版本(无法模拟ECMAScript5特性),支持所有兼容ECMAScript5的浏览器. 浏览器安装Vue Devtools, 可以在更友好的界面中审查和调试Vue应用 ...

  10. 【转载】C#通过Remove方法移除DataTable中的某一列数据

    在C#中的Datatable数据变量的操作过程中,有时候我们需要移除当前DataTable变量中的某一列的数据,此时我们就需要使用到DataTable变量内部的Columns属性变量的Remove方法 ...