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

Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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) { } } }
Code Block
languagejava
themeEclipse
firstline1
titleOperate.java
linenumberstrue
collapsetrue
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
languagejava
themeEclipse
firstline1
titleExportCollection.java
linenumberstrue
collapsetrue

ExportCollection介绍

四、支持版本

产品线

版本

支持情况

备注

FR8.0支持
FR9.0支持
FR10.0支持
BI3.6支持
BI4.0支持
BI5.1支持
BI5.1.2支持
BI5.1.3支持

五、插件注册

Code Block
languagexml
themeEclipse
firstline1
titleplugin.xml
linenumberstrue
<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

...