页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

« 前一个 版本 4 下一个 »

1.1. 背景说明

1.1.1. 背景

导出资源到简道云,需要支持文件在【文件导出到服务器】系统选项中新增自定义的文件服务器类型。

1.2. 文件管理中心接口

1.2.1. 接口类定义

位置:smartbi.module.export.store.IFileManagerStore

名称:IFileManagerStore

继承自

smartbi.module.export.offline.storer.IOfflineFileStorer

smartbi.module.export.offline.downloader.IOfflineDownloader

1.2.2. 容器类定义

位置:smartbi.module.export.store.IFileManagerStore

名称:IFileManagerFactory

继承情况:无继承、final修饰

功能描述:用于注册IFileManagerStore的实现类

成员变量:Map<String, IFileManagerStore> handlers ,IFileManagerStore实际存储的容器

成员方法说明:

IFileManagerFactory  getInstance();

返回IFileManagerFactory单例

void registerFileManagerStoreHandlerIfNotExist(String handlerName, IFileManagerStore handler):注册一个文件系统,handlerName为这IFileManagerStore 对应服务器类型的键名。如果注册时已经存在同名对象,则不进行注册。

void   registerEncryptHandlerForce(String handlerName, IFileManagerStore handler):注册一个文件系统,handlerName为这IFileManagerStore 对应服务器类型的键名。如果注册时已经存在同名对象,会覆盖式注册。

IFileManagerStore  getEncryptHandler(String handlerName):根据handlerName从handlers 中获取一个对应的文件服务器对象。不存在时返回空。

IFileManagerStore getEncryptHandlerWithError(String handlerName):根据handlerName从handlers 中获取一个对应的文件服务器对象。不存在时抛运行时异常。

public Set<String> getRegistedServerKeys():获取所有注册的键名。

1.2.3. 前端JS改造

在src/web/vision/js/smartbi/spreadsheetreport/ftpsetting/SpreadsheetReportWriteBackFileSettingDialog.js中新增handleBeforeShowUp方法,在“文件存储位置设置”中,在每一条服务器记录被渲染到前端之前,执行此方法可以进行一些前置操作。新增handleBeforeWriteBack方法,在点击保存之后,数据传入后端进行保存之前,执行此方法可以进行一些前置操作。

handleBeforeShowUp(obj,tline)

入参:obj:最终渲染到前端的某一行数据(数组形式);tline:当前这一行的原始数据(数组形式)

返回值:无

handleBeforeWriteBack(obj,ctl)

入参:obj:最终写入知识库的某一行数据(对象形式);ctl:当前这一行的原始数据(数组形式)

返回值:无


src/web/vision/js/smartbi/spreadsheetreport/ftpsetting/FTPRemovableGrid.js中新增

handleBeforeTestConnection方法,测试连接前执行的操作,用于复制服务器配置信息。

handleBeforeTestConnection(configObj,currentTableLine)

入参:configObj:服务器配置信息(对象形式);currentTableLine:当前行的原始数据(数组形式)


1.2.4. 接口说明

1.2.4.1. 新增的接口方法

InputStream download(String filename)

功能:处理电子表格单元格格式为“文件”时,点击后触发的下载文件功能

输入:文件名(含后缀)

输出:文件输出流

异常处理:无,实现类内部处理

void initServer(JSONObject serverConfig) throws Exception

功能:初始化服务器相关成员变量

输入:JSONObject对象

备注:调用者会获取系统选项【SPREAD_SHEET_REPORT_WRITEBACK_FILE】中的单个json对象,然后往这个json对象中添加一个“offlineDirectory”键用于记录当前导出的目录,需要注意两个场景:

      场景一:在执行产品内置的在线导出、离线导出情况下,这个offlineDirectory为系统选项【OFFLINE_FILE_DIRECTORY】中的值;

      场景二:因电子表格单元格回写和单元格格式设置为“文件”格式触发的下载时,这个offlineDirectory为配置“填报属性”时设置的“相对路径”:

         

        以产品内置的“服务器”类型为例,则这个serverConfig的内容示例如下:

  {

    "name": "111",

    "addressType": "fileSystem",

    "address": "E:/temp_csv_xml_files",

    "account": "server-account",

    "id": "dialogCB2CE5E473D00001C6CD1E80E7B01FBD",

"password": "server-password",

"offlineDirectory": "/test",

  }

异常:可直接抛异常

boolean testConnection(String address, String account, String password) throws Exception

功能:“文件存储位置设置”中点击“测试连接”时,最终执行的方法

输入: address 服务器地址; account 用户名 ;password 密码(前端输入的明文)

输出:连接成功:true;连接失败:false

异常:可直接抛异常

boolean existFile(String subDirectory, String fileName) throws Exception

功能:使用于电子表格回写上传文件的场景,用于判断文件是否存在

输入:subDirectory:“填报属性”中设置的“相对路径”;fileName:文件名(含后缀)

输出:文件存在:true;文件不存在:false

异常:可直接抛异常

1.2.4.2. 继承而来的接口方法

void download(HttpServletRequest request, HttpServletResponse response, String filename) throws Exception;

功能:在线导出和离线导出时调用,从当前服务器中下载filename文件到HttpServletResponse的输出流

输入:request:请求;response:响应;filename:文件名(含后缀)

继承自:smartbi.module.export.offline.downloader.IOfflineDownloader

异常:可直接抛异常


void download(HttpServletRequest request, HttpServletResponse response, String filename, String downloadName) throws Exception;

功能:在线导出和离线导出时调用,从当前服务器中下载filename文件到HttpServletResonse的输出流并指定文件名为downloadName

输入:request:请求;response:响应;filename:文件名(含后缀);downloadName:下载后的文件名(含后缀)

继承自:smartbi.module.export.offline.downloader.IOfflineDownloader


double getProcess()

功能:获取下载进度,一般在实现时直接返回0.01即可

继承自:smartbi.module.export.offline.downloader.IOfflineDownloader


String getId()

功能:获取文件存储位置id,也就是serverConfig中“id”字段对应的值

继承自:smartbi.module.export.offline.downloader.IOfflineFileStorer


String getDirectory()

功能:获取文件存储目录

返回:文件存储目录

继承自:smartbi.module.export.offline.downloader.IOfflineFileStorer


boolean store(File tempFile)

功能:电子表格回写、离线导出时,上传(保存)文件到服务器中

输入:tempFile:临时文件

输出:上传成功:true;上传失败:false

继承自:smartbi.module.export.offline.downloader.IOfflineFileStorer


boolean unstore(String name)

功能:删除服务器中的文件

输入:name:文件名(含后缀)

输出:删除成功:true;删除失败:false

继承自:smartbi.module.export.offline.downloader.IOfflineFileStorer


void init()

功能:上传文件前调用者会执行的服务器初始化动作,一般用于创建目录

继承自:smartbi.module.export.offline.downloader.IOfflineFileStorer


1.2.4.3. 调用流程

假设现有一个IFileManagerStore iFileManagerStore

1.2.4.3.1. 在线导出、离线导出后的下载

iFileManagerStore.initServer(config);

iFileManagerStore.download(request, response, fileName, downloadName);


1.2.4.3.2. 离线导出导致的上传

iFileManagerStore.initServer(config);

// 存储前,会调用init方法

iFileManagerStore.init();

iFileManagerStore.store(request, response, fileName, downloadName);


1.2.4.3.3. 电子表格单元格格式设置为“文件”时导致的下载

iFileManagerStore.initServer(config);

iFileManagerStore.download(filename);


1.2.4.3.4. 电子表格单元格回写导致的上传

iFileManagerStore.initServer(config);

//existFile返回结果仅用于处理最终上传的文件名,不影响后续的下载动作

iFileManagerStore.existFile(subdirectory, fileName);

// 存储前,会调用init方法

iFileManagerStore.init();

iFileManagerStore.store(tempFile)


1.2.4.3.5. 文件删除

iFileManagerStore.initServer(config);

// 删除前,需要调用init方法

iFileManagerStore.unstore(filename);


1.3. 扩展包使用步骤

  1. 创建类实现IFileManagerStore接口

public class CustomManagerStore implements IFileManagerStore{

}


  1. 在Module的activate()方法中注册上述接口实现类,并指定一个String的类型名

IFileManagerFactory.getInstance().registerFileManagerStoreHandlerIfNotExist("MyFileSystem",new JDYFileManagerStore());


  1. 创建

js/smartbi/spreadsheetreport/ftpsetting/SpreadsheetReportWriteBackFileSettingDialog.js.patch处理国际化

SpreadsheetReportWriteBackFileSettingDialog.prototype.getType_SMS_61642 = SpreadsheetReportWriteBackFileSettingDialog.prototype.getType;

SpreadsheetReportWriteBackFileSettingDialog.prototype.getType = function(options){

    this.getType_SMS_61642(options);

    //遍历options,将指定键名国际化处理

    for(var i=0;i<options.length;i++){

        if(options[i].value === "MyFileSystem"){

            options[i].text = "自定义文件系统";

            options[i].value = "自定义文件系统";

            break;

        }

    }

}

SpreadsheetReportWriteBackFileSettingDialog.prototype.handleBeforeWriteBack_SMS_61642 = SpreadsheetReportWriteBackFileSettingDialog.prototype.handleBeforeWriteBack

SpreadsheetReportWriteBackFileSettingDialog.prototype.handleBeforeWriteBack = function (obj,ctl) {

    this.handleBeforeWriteBack_SMS_61642(obj,ctl)

    if(obj.addressType ==="自定义文件系统"){

        obj.addressType ="MyFileSystem";

    }

}

SpreadsheetReportWriteBackFileSettingDialog.prototype.handleBeforeShowUp_SMS_61642 = SpreadsheetReportWriteBackFileSettingDialog.prototype.handleBeforeShowUp

SpreadsheetReportWriteBackFileSettingDialog.prototype.handleBeforeShowUp = function (array,tline){

    this.handleBeforeShowUp_SMS_61642(array,tline);

    if(array[1]==="MyFileSystem"){

            array[1]="自定义文件系统";

    }

}


  1. 创建js/smartbi/spreadsheetreport/ftpsetting/FTPRemovableGrid.js.patch处理国际化

FTPRemovableGrid.prototype.handleBeforeTestConnection_SMS_61642 = FTPRemovableGrid.prototype.handleBeforeTestConnection

FTPRemovableGrid.prototype.handleBeforeTestConnection = function(configObj,currentTableLine){

    this.handleBeforeTestConnection_SMS_61642(configObj,currentTableLine);

    if("自定义文件系统" === configObj.serverType){

        configObj.serverType = "MyFileSystem";

    }

}

扩展包示例:CustomFileSystemTestExt.zip

  • 无标签