【仅供内部供应商使用,不提供对外解答和培训】
...
可以用于导出的接口比较多,而ExportOperateProvider则主要用于新文件类型的导出使用。使用也跟一般的产品导出一致,通过URL中指定format参数调用。
该接口用于单一类型导出的处理场景,对于多种导出类型需要同时处理的可参见ExportExtensionProcessor接口
| Code Block | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
package com.fr.report.fun;
import com.fr.stable.fun.mark.Mutable;
import com.fr.web.core.reserve.Operate;
/**
* Created by richie on 16/1/19.
* 自定义导出方式接口,推荐使用format=xxx的方式(xxx表示唯一的导出方式)
*/
public interface ExportOperateProvider extends Mutable {
int CURRENT_LEVEL = 1;
String MARK_STRING = "ExportOperateProvider";
/**
* 导出准备操作
*
* @return 操作对象
*/
Operate operate();
/**
* 导出类型
*
* @return 类型
*/
String markType();
}
|
...
| Code Block | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
package com.fanruan.api.report.export;
import com.fr.io.collection.ExportCollection;
import com.fr.stable.web.SessionProvider;
import com.fr.web.core.reserve.Operate;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author richie
* @version 10.0
* Created by richie on 2019/9/26
* 导出接口的抽象类
*/
public abstract class BaseOperate implements Operate {
@Override
public void setContent(HttpServletRequest req, HttpServletResponse res, String fileName, boolean isEmbed) {
}
@Override
public void setContent(HttpServletRequest req, HttpServletResponse res, SessionProvider sessionProvider, String fileName, boolean isEmbed) {
this.setContent(req, res, fileName, isEmbed);
}
/**
* 导出的实体操作
*
* @param req http请求
* @param res http响应
* @param sessionProvider 模板访问会话信息
* @param fileName 文件名
* @return 导出实体操作对象
*/
@Override
public abstract ExportCollection newExportCollection(HttpServletRequest req, HttpServletResponse res, SessionProvider sessionProvider, String fileName);
}
|
...
| Code Block | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
package com.fr.web.core.reserve;
import com.fr.io.collection.ExportCollection;
import com.fr.stable.web.SessionProvider;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by richie on 16/1/19.
*/
public interface Operate {
void setContent(HttpServletRequest req, HttpServletResponse res, String fileName, boolean isEmbed);
void setContent(HttpServletRequest req, HttpServletResponse res, SessionProvider sessionIDInfor, String fileName, boolean isEmbed);
ExportCollection newExportCollection(HttpServletRequest req, HttpServletResponse res, SessionProvider sessionIDInfor, String fileName);
}
| ||||||||||||
| Code Block | ||||||||||||
|
产品线 | 版本 | 支持情况 | 备注 |
|---|---|---|---|
| FR | 8.0 | 支持 | |
| FR | 9.0 | 支持 | |
| FR | 10.0 | 支持 | |
| BI | 3.6 | 支持 | |
| BI | 4.0 | 支持 | |
| BI | 5.1 | 支持 | |
| BI | 5.1.2 | 支持 | |
| BI | 5.1.3 | 支持 |
| Code Block | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<extra-report>
<ExportOperateProvider class="your class name"/>
</extra-report> |
...
BaseOperate#setContent接口主要用于实现在响应头中声明文件类型、编码等信息。【点击看例子】在实现ExportCollection时,首先需要声明一个实际的导出对象AppExporter,真正的把报表转换成对应的文件流就在AppExporter对象中进行。【点击看例子】
同时在实现ExportCollection时,需要额外声明一个该导出操作行为的埋点类型RecordType,如果开发者开发的导出是全新的类型,则可以自己实现该接口。如果只是对产品本身的某种导出进行覆盖,则可以引用DeclareRecordType中的相关类型。
注:RecordType中的getTypeMark接口返回值,只能使用20000以后的值,以避免跟产品本身的埋点产生冲突。getTypeString接口返回值必须使用 plugin_ 开头。getProductType接口默认返回空即可。【点击看例子】
demo地址:demo-export-operate-provider
com.fr.report.fun.ExportExtensionProcessor
com.fr.stable.fun.ExcelExportCellValueProvider
com.fr.form.stable.FormExportProcessor
com.fr.report.fun.ExcelExportAppProvider
com.fr.report.fun.CommentExcelProcessor
com.fr.io.exporter.PDFExporterCreator
com.fr.report.fun.FormatActionProvider
免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。若作为商用一切后果责任由使用者自行承担。
...