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

Page tree

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

Skip to end of metadata
Go to start of metadata

一、特殊名词介绍

二、背景、场景介绍

数据源是相对于数据集而言的。主要是在功能的设计上的一个划分。就技术实现本身而言,数据集接口其实本身是可以覆盖到几乎所有场景的。数据源的代码抽象上实质就是把一组具有部分相同配置的数据集的配置整合在一起作为一个统一的配置供数据集引用。而这些相同配置的生效过程也就是数据源的“连接”、“验证”过程。比如:我们可以写一个程序数据集,里面自己实现JDBC连接池调用JDBC的所有配置连接数据库执行SQL,从实现上来说是完全可以的。但我们把JDBC连接池和JDBC的连接配置统一抽取出来做成一个数据源配置,对于用户的使用和维护来说会更方便(如果分开每个数据集都要单独配置JDBC链接,那一旦链接信息便跟,这个维护量是相当大的)。

三、接口介绍

UniversalConnectionProvider.java
package com.fr.decision.fun;

import com.fr.data.impl.Connection;
import com.fr.json.JSONObject;
import com.fr.stable.fun.mark.Mutable;
import com.fr.stable.fun.mark.WebCoalition;

/**
 * @Author: Elijah
 * @Create: 2019-07-30
 * @Desciption: 平台数据连接接口(一般直接使用AbstractDecisionConnectionProvider)
 */
public interface UniversalConnectionProvider<T extends Connection> extends Mutable, WebCoalition {

    String MARK_STRING = "UniversalConnectionProvider";

    int CURRENT_LEVEL = 1;

    /**
     * 数据连接名字
     *
     * @return 名字
     */
    String nameForConnection();

    /**
     * 数据连接的图标
     *
     * @return 图标路径
     */
    String iconPathForConnection();

    /**
     * 数据连接的类型
     *
     * @return 连接类型
     */
    Class<T> classForConnection();

    /**
     * 用于将connection转换成前台面板需要的数据格式
     */
    JSONObject serialize(T t);

    /**
     * 将前台数据转换成数据连接
     * @param oldConnection 可能存在的旧connection,如果是新增数据连接,此属性为null
     * @param object        前台数据
     */
    T deserialize(T oldConnection, JSONObject object);
}

Connection介绍

WebCoalition介绍

前端接口
BI.config('dec.connection.provider.datebase', function(provider){
	provider.registerDatabaseType({
		text: 该连接类型的名称,
		databaseType: 连接类型,
		iconUrl: 该连接类型的图标路径,比如com/tptj/demo/hg/connection/images/demo.jpg,
		edit: 自定义的编辑连接配置时的组件类型,比如dec.dcm.connection.plugin.demo.edit,
		show: 自定义的展示连接配置时的组件类型,比如dec.dcm.connection.plugin.demo.show,
	});
});

四、支持版本

产品线

版本

支持情况

备注

FR10.0支持
BI5.1支持
BI5.1.2支持
BI5.1.3支持

五、插件注册

plugin.xml
<extra-decision>
        <UniversalConnectionProvider class="your class name"/>
</extra-decision>

六、原理说明

ConnectionPluginProcessor在初始化的时候,会将插件中声明的所有web数据源接口实例注册到map对象中;而ConnectionsResource提供了web端的数据源信息的操作接口。web接口经由ConnectionService调用ControllerFactory对持久层进行操作,然后具体的读写信息来源由ConnectionProcessorFactory调用ConnectionPluginProcessor提供。

七、特殊限制说明

在实现deserialize接口时,入参中的DemoConnection只是用来参考的旧连接信息。返回的时候一定要重新new一个,否则底层修改的时候可能会报错【点我看实现】。

nameForConnection接口的返回值必须要与dec.connection.provider.datebase接口中的databaseType一致。

另外截止目前【2021-04-02】前端编辑接口尚不支持直接修改或定义数据源连接名称,目前demo中使用的方法虽然能实现效果!但是存在极大的升级兼容风险(产品迭代时上层的组件结构变化的可能性是很大的)。接口的优化已经提交pr待正式发布后,会再变更这部分的说明

八、常用链接

demo地址:demo-connection-provider


ConnectionProvider

九、开源案例

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

demo-tabledata-redis


  • No labels