...
Code Block |
---|
language | java |
---|
theme | Eclipse |
---|
firstline | 1 |
---|
title | Operate.java |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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 |
---|
language | java |
---|
theme | Eclipse |
---|
firstline | 1 |
---|
title | ExportCollection.java |
---|
linenumbers | true |
---|
collapse | true |
---|
|
package com.fr.io.collection;
import com.fr.common.annotations.Open;
import com.fr.general.DeclareRecordType;
import com.fr.general.RecordType;
import com.fr.io.exporter.AppExporter;
import com.fr.log.FineLoggerFactory;
import com.fr.log.LogUtils;
import com.fr.web.core.ErrorHandlerHelper;
import com.fr.web.core.ReportRepositoryDeal;
import com.fr.web.core.ReportSessionIDInfor;
import com.fr.web.core.utils.ExportUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
/**
* Created by richie on 15/11/30.
* 导出操作器的一个封装
*/
@Open
public class ExportCollection {
private AppExporter exporter;
private RecordType recordType;
public static ExportCollection create() {
return new ExportCollection();
}
private ExportCollection() {
}
public AppExporter getExporter() {
return exporter;
}
public void setExporter(AppExporter exporter) {
this.exporter = exporter;
}
public RecordType getRecordType() {
return recordType;
}
public void setRecordType(RecordType recordType) {
this.recordType = recordType;
}
/**
* 兼容方法
* 可用同名方法。
*/
@Deprecated
public void setRecordType(DeclareRecordType recordType) {
this.recordType = recordType;
}
public void doExport(HttpServletRequest req, HttpServletResponse res, ReportSessionIDInfor sessionIDInfor, String format)
throws Exception {
if (getRecordType() == null) {
ErrorHandlerHelper.getErrorHandler().error(req, res,
"Cannot recognize the specifed export format:" + format +
",\nThe correct format can be PDF,Excel,Word,SVG,CSV,Text or Image.");
return;
}
OutputStream outputStream = res.getOutputStream();
try {
// 导出并且记录下来
LogUtils.exportAndLogRecordType(exporter, outputStream, new ReportRepositoryDeal(req, sessionIDInfor), recordType);
} catch (Exception e) {
ExportUtils.resetContent(res);
ErrorHandlerHelper.getErrorHandler().error(req, res, e);
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
try {
outputStream.flush();
outputStream.close();
} catch (IOException ignored) {
}
}
}
ExportCollection介绍
四、支持版本
产品线 | 版本 | 支持情况 | 备注 |
---|
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 |
---|
language | xml |
---|
theme | Eclipse |
---|
firstline | 1 |
---|
title | plugin.xml |
---|
linenumbers | true |
---|
|
<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
...