【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

一、特殊名词介绍

二、背景、场景介绍

该接口在8.0/9.0版本的产品中,作为服务扩展的主要接口。10.0发布以后逐渐被新接口取代。

10.0中这个接口的主要使用场景就是提供符合报表请求风格的web接口了。

三、接口介绍

Service.java
package com.fr.stable.fun;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * FineReport对于HTTP请求做处理的服务
 */
public interface Service {

	String XML_TAG = "WebService";

	/**
	 * 返回该服务所附带的OP参数
	 *
	 * @return op参数
	 */
	String actionOP();

	/**
	 * 处理HTTP请求
	 *
	 * @param req       HTTP请求
	 * @param res       HTTP响应
	 * @param op        op参数值
	 * @param sessionID 当前广义报表对象的会话ID
	 * @throws Exception
	 */
	void process(HttpServletRequest req, HttpServletResponse res, String op, String sessionID) throws Exception;

}
NoSessionIDService.java
package com.fr.stable.fun.impl;

import com.fr.stable.fun.Service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public abstract class NoSessionIDService implements Service{
	public void process(HttpServletRequest req, HttpServletResponse res, String op, String sessionID) throws Exception {
		process(req, res, op);
	}
	
	public abstract void process(HttpServletRequest req, HttpServletResponse res, String op) throws Exception;
}


四、支持版本

产品线

版本

支持情况

备注

FR8.0支持
FR9.0支持
FR10.0支持只能用于报表场景的web服务提供
BI3.6支持
BI4.0支持
BI5.1支持不推荐使用
BI5.1.2支持不推荐使用
BI5.1.3支持不推荐使用

五、插件注册

plugin.xml
<extra-core>
        <WebService class="your class name"/>
</extra-core>

六、原理说明

接口注册逻辑:在WebActionsDispatcher中,注入了插件的运行后和结束前事件。当插件被插件引擎识别并加载时,会通过ReportDispatcher.addExtraServices注入到报表请求的分发器中生效。

接口的生效逻辑:当报表请求(view/report 或 view/form)进入分发器时,会根据对应的op参数把请求分发给对应的服务处理。

七、特殊限制说明

WebService接口虽然可以单独使用,但是一般情况下为了实现的规范,要求开发者都要配合CMD请求分发器使用。当且仅当需求场景只需要一个请求服务且不存在根据某参数进行分支处理的情况下,可以不使用分发器。

WebService接口也是为数不多的可以直接继承接口类而不用继承Abstract抽象类开发插件的接口。

而NoSessionIDService这个抽象接口主要用途在8.0和9.0中。这个抽象接口仅仅是去掉了报表的sessionID而已。10.0中使用场景就非常少了。

服务调用示例:
//10.0调用示例
FR.ajax({
	url:FR.servletURL,
	data:{
		op:"demo",
		cmd:"test1"
	},
	headers:{
		sessionID: _g().currentSessionID || _g().sessionID
	},
	success:function(res){
		console.info(res);
	}
});
//8.0、9.0调用示例
FR.ajax({
	url:FR.servletURL,
	data:{
		op:"demo",
		cmd:"test1",
        sessionID: _g().currentSessionID || _g().sessionID
	},
	success:function(res){
		console.info(res);
	}
});


八、常用链接

demo地址:demo-web-service

com.fr.stable.web.RequestCMDReceiver

com.fr.web.core.ActionNoSessionCMD

com.fr.web.core.WebActionsDispatcher

(1)、三组开放web服务接口的插件接口对比

九、开源案例

免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。禁止用于任何商业用途,若作为商用一切后果责任由使用者自行承担。

open-JSD-8035

open-JSD-7866


  • No labels