Ofbiz项目学习——阶段性小结——服务返回结果

Posted gzhcsu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 服务引擎

MYSQL 中query_cache_size小结

JS阶段学习----问题小结

OFBiz 初步 之 权限设计

Vue学习小结安装依赖与数据来源

使用OFBIZ的理由和不使用OFBIZ的理由