【仅供内部供应商使用,不提供对外解答和培训】
Table of Contents |
---|
无
对于单个类型的导出处理,通常我们都选择了ExportOperateProvider接口实现。但是如果我们需要对所有的报表导出都做某些特殊的操作,诸如对所有的导出信息推送、对导出的文件进行加密、备份等等操作时。我们需要一个更为统一的接口。那么在早期的帆软报表中就提供了ExportExtensionProcessor接口。该接口可以对所有的cpt类型的报表导出场景进行统一的拦截和处理。因为接口开得比较早,早期的决策报表是不支持导出的,所以这个接口也只能处理cpt报表的导出。随着决策报表在实际项目中的运用越来越多,但是决策报表一直都不支持导出。一部分用户对于导出需要把决策报表的内容重新用cpt报表制作一遍觉得太浪费时间了,对于决策报表支持导出的呼声也越来越多。标准的产品只支持决策报表的报表块内容导出。为了提供更丰富的扩展,官方开放了FormExportProcessor接口用于处理决策报表的导出需要。不过目前这个接口尚不完全成熟,存在的限制颇多,也不够稳定,现阶段更多的是用于简单决策报表的导出处理场景。
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
package com.fr.form.stable; import com.fr.stable.fun.mark.Immutable; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 表单导出接口, 通过传不同的format来导出Excel, pdf等等 * * Created by Administrator on 2015/12/18 0018. */ public interface FormExportProcessor extends Immutable { String MARK_STRING = "FormExportProcessor"; int CURRENT_LEVEL = 3; /** * 进行导出 * * @param req http请求 * @param res http应答 * @param sessionID 会话ID * @throws Exception */ void dealWithExport(HttpServletRequest req, HttpServletResponse res, String sessionID); } |
...
决策报表预览时,后台通过Formlet#dealWeblet调用了FormletDealWith#dealWithFormlet方法进行计算响应。在这个dealWithFormlet中,如果请求中包含了format参数,则会单独走导出处理,获取到插件中定义的决策报表导出类申明并执行响应。
该接口是Immutable的,也就是是独占的,如果多个插件都有使用到,那么只会生效其中的一个。如果没有插件使用这个接口,标准产品的决策报表默认是不支持任何导出的该接口是Immutable的,也就是是独占的,如果多个插件都有使用到,那么只会生效其中的一个。如果没有插件使用这个接口,标准产品的决策报表默认是不支持任何导出的。
因为接口开在了整个导出的入口,所以会影响到所有其他的报表导出相关的接口,使用的时候需要非常谨慎。除特殊情况开发者尽量不要选择这个接口,容易跟其他插件产生冲突。【注:该接口仅用于一般定制,新商城插件严禁使用这个接口,避免造成大面积冲突在实现导出功能时,开发者可以通过sessionID这个入参获取到决策报表的结果对象,并读取布局和组件信息生成自己想要的导出效果。【点击看例子】
该接口仅对cpt报表有效。接口仅对决策报表有效。
注:该接口适用面小,开发成熟导出的功能难度较大,产品耦合高,稳定性一般。一般不建议开发者使用!导出场景尽可能都在cpt报表上去实现。否则随着开发的细节深入,开发者会发现很多很难处理的点(适应,兼容,布局,窗口切割等等的)。
demo地址:demo-form-export-extension-processor
com.fr.report.fun.ExportOperateProvider
com.fr.report.fun.ExportExtensionProcessor
免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。若作为商用一切后果责任由使用者自行承担。
...