一、特殊名词介绍

二、背景、场景介绍

数据集开发一文中有提到,数据集开发中有一个过程是数据的二次加工。对开发者自己添加的数据集可以在数据集接口中直接实现需要的二次加工。而对于产品标准的数据集或者其他开发者封装好的插件数据集如果有二次加工的需求,则可以使用本文将要介绍的接口。

该接口对所有的数据集类型均可生效,作用于数据集取数完成之后。一般用于数据的拆分(比如数据中包含JSON/XML字段的希望细分的)、去敏(对于某些敏感数据完全不希望开发者或者用户看到的)、简单汇总(在数据集中做基础的汇总,增大数据的颗粒度,能有效的提供报表的计算性能)。

当然对于一些特殊场景下,开发者甚至可以使用这个接口对数据集的执行进行监控(比如记录,哪些用户什么时候查看了什么数据等等的)

三、接口介绍

package com.fr.stable.fun;

import com.fr.base.TableData;
import com.fr.general.data.DataModel;
import com.fr.script.Calculator;
import com.fr.stable.fun.mark.Mutable;

/**
 * Created by XiaXiang on 2018/12/11.
 */
public interface DSModifyProvider extends Mutable {

    String MARK_STRING = "DSModifyProvider";

    /**
     * 数据集格式校验
     * 根据数据集特征判断是否需要通过接口实现二次处理
     * 该接口可以有多个实现
     *
     * @param ds 数据集
     * @param cal
     * @param old 上一次生成的数据集结果
     * @return
     */
    boolean accept(TableData ds, Calculator cal, DataModel old);


    /**
     * 数据集二次处理
     * old表示第一次生成的数据集结果,需要进行二次处理,并返回新的数据集结果
     *
     * @param ds 数据集
     * @param cal
     * @param old 上一次生成的数据集结果
     * @return
     */
    DataModel modify(TableData ds, Calculator cal, DataModel old);
}


四、支持版本

产品线

版本

支持情况

备注

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

五、插件注册

<extra-core>
        <DSModifyProvider class="your class name"/>
</extra-core>


六、原理说明

所有的数据集计算最终都会经由两个方法得到数据的结果

1.EmbeddedTableData#createDataModel,用于设计器预览数据集时生成内置结果即

2.SynchronizedLiveDataModelUtils.getLiveDataModel,所有服务器的计算数据集时会统一调用此方法获取数据结果

在这两个方法中,将会通过PluginModule.getAgent(PluginModule.ExtraCore).getArray(DSModifyProvider.MARK_STRING);读取到所有插件中声明的修改数据集的适配器实例。

七、特殊限制说明

多个实例是可以先后对一个数据集结果进行修改的。具体那些接口实例会执行修改取决于accept接口方法的判断。

该接口在部分版本中API等级已经升级过,所以开发时需要注意所使用的产品版本中的API等级,可以通过查看抽象类(Abstract)上的@API注解,如果与默认currentAPILevel方法返回值不一致的,则开发者需要在接口中单独实现这个接口方法【点击看例子

八、常用链接

demo地址:demo-ds-modify-provider

九、开源案例

免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。若作为商用一切后果责任由使用者自行承担。

demo-tabledata-modify