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

Page tree

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

Skip to end of metadata
Go to start of metadata

一、特殊名词介绍

WEB组件:本文中所指的组件是指一组用于解决特定业务或实现特定功能的,JS脚本和样式的集合。

二、背景、场景介绍

1.在帆软的决策系统和报表展现时,不同的客户往往对展现的样式和交互风格有自身的审美要求。当产品本身的配置功能不满足需要时,则可以使用该接口进行个性化的处理。

2.在帆软产品的使用过程中,如果客户需要对产品的前端功能进行扩充和变更,则可以使用该接口进行配合实现;(比如:平台功能修改、新增平台功能、新控件、新图表 的开发)

三、接口介绍

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

import com.fr.stable.fun.mark.WebCoalition;

/**
 * @author richie
 * @version 10.0
 * Created by richie on 2018-12-03
 * 单独给web组件增加子组件
 */
public interface WebResourceProvider extends WebCoalition {

    String MARK_STRING = "WebResourceProvider";

    int CURRENT_LEVEL = 1;
}

WebCoalition.java
package com.fr.stable.fun.mark;

import com.fr.web.struct.Atom;

/**
 * 带有web资源的扩展接口
 */
public interface WebCoalition extends Mutable {

    /**
     * 需要附加到的主组件
     * @return 主组件
     */
    Atom attach();

    /**
     * 客户端所需的组件
     *
     * @return 组件
     */
    @Deprecated
    Atom client();

    /**
     * 客户端所需的组件集合
     *
     * @return 组件集合
     */
    Atom[] clients();

}


关联接口:com.fr.web.struct.Atom


四、支持版本

产品线

版本

支持情况

备注

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

五、插件注册

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


六、原理说明

接口注册逻辑:插件实例经由 com.fr.web.struct.AtomActivator#prepare() 中调用的 addMutable 之后注册到com.fr.web.struct.Registry的children对象中。

接口的生效逻辑:从注册的逻辑可以判断出,通过Registry.getChildren( 主组件的class )可以获取到各组件的插件扩展组件。在Atom接口一文中介绍了,如果要允许组件自身再通过其他插件扩展组件需要实现AssembleComponent中的两个接口方法。通过children()方法中调用Registry.getChildren得到该组件的所有扩展子组件申明。

最终调用一个组件的完整依赖组件加载关系通过 AtomBuilder.create().buildAssembleFilePath(Browser.resolve(req),XXXComponent.KEY); 即可获得。


七、特殊限制说明

目前经过实际统计,在最新的版本中,以下组件支持使用插件进行子组件扩展。也就是接口的attach方法可以返回的key值如下:

假设 $HOST = http(s)://$IP:$PORT/webroot/decision

key被依赖组件——前端页面说明

CommonComponent.KEY

1.DeployComponent.KEY——服务器初始化,导致部署失败时,访问平台会出现此页面,插件中基本用不到

2.DirectoryComponent.KEY——$HOST/directory 单独集成平台报表目录的页面

3.EncryptionComponent.KEY——$HOST/v10/encryption/page 平台切换国密的时候才可能会用到,主要用于提示异常。绝大部分情况下应该是没啥用处的。

4.InitializationComponent.KEY——$HOST/login/initialization 如果系统没有设置超管和finedb数据源的情况下才会出现的页面,大部分时候也没啥用处

5.LoginComponent.KEY——$HOST/login 访问登录页时会加载

6.MainComponent.KEY——$HOST 访问决策平台主页时加载

7.MapEditComponent.KEY——$HOST#management/map 访问决策平台地图配置功能时加载

8.MigrationComponent.KEY——$HOST/v10/migration/page FineDb迁移数据时的进度页面,在插件中用处不大

9.PrivilegeComponent.KEY——$HOST/privilege 单独访问权限管理页面时生效

10.UserComponent.KEY——$HOST/user 单独访问用户管理页面时生效

11.ScheduleComponent.KEY——$HOST/timer  单独访问定时调度页面时生效

12.WorkflowComponent.KEY——$HOST/workflow/authority 单独访问多级上报权限控制页面时生效

Common组件,顾名思义是常用的基础组件,在生效的这些页面中属于非常靠前加载的,优先于被依赖的组件资源加载。这些页面也基本都是跟决策平台相关的页面。所以,开发者想把插件的影响范围扩大到被依赖的多个组件中同时生效的话,可以直接把插件组件作为Common组件的子组件引入即可

ConnectionComponent.KEY

Connection组件在访问决策平台主页时加载,数据源管理组件的资源,但是感觉产品加载的时机过于提前了。

DataSetComponent.KEY

DataSet组件在访问决策平台主页时加载,服务器数据集管理组件的资源,但是感觉产品加载的时机过于提前了。

MainComponent.KEY

【常用】Main组件在访问决策平台主页的时候加载,是整个决策平台的主体资源入口。

DeployComponent.KEY

/服务器初始化,导致部署失败时,访问平台会出现此页面,插件中基本用不到

DirectoryComponent.KEY

$HOST/directory 单独集成平台报表目录的页面

EncryptionComponent.KEY

$HOST/v10/encryption/page 平台切换国密的时候才可能会用到,主要用于提示异常。绝大部分情况下应该是没啥用处的。

FormMainComponent.KEY

【常用】访问决策报表时页面主体JS的入口。
InitializationComponent.KEY$HOST/login/initialization 如果系统没有设置超管和finedb数据源的情况下才会出现的页面,大部分时候也没啥用处
LoginComponent.KEY【常用】$HOST/login 访问登录页时会加载
MapEditComponent.KEY$HOST#management/map 访问决策平台地图配置功能时加载
MigrationComponent.KEY$HOST/v10/migration/page FineDb迁移数据时的进度页面,在插件中用处不大
PrivilegeComponent.KEY$HOST/privilege 单独访问权限管理页面时生效

ReportMainComponent.KEY

【常用】访问一般报表时页面主体JS的入口
ScheduleComponent.KEY$HOST/timer  单独访问定时调度页面时生效
UserComponent.KEY$HOST/user 单独访问用户管理页面时生效
WorkflowComponent.KEY$HOST/workflow/authority 单独访问多级上报权限控制页面时生效

废弃的Atom client()接口方法仅作为兼容保留。新插件中全部使用Atom[] clients();实现即可。

八、常用链接

入门demo地址:demo-web-resource-simple

全功能测试demo地址(包含该接口的所有使用场景):demo-web-resource

三组常见引入JS和CSS的插件接口对比

九、开源案例

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

open-JSD-8173

open-JSD-8016

open-JSD-7930

open-JSD-7747

plugin-repository-hdfs

plugin-repository-s3


  • No labels

3 Comments

  1. 请问在哪个版本中WebResourceProvider 开始支持报表注入,请问是否有好的方案引入第三方js,css。(有些特定的js必须要放在第三方)谢谢

    1. 2019年11月8号及之后的发布版本中就支持ReportMainComponent和FormMainComponent了~

      第三方引入~如果是统一引入的就使用com.fr.stable.fun.JavaScriptPlaceHolder即可~

      如果是只有使用了某特定功能才引入的建议使用 com.fr.stable.fun.JavaScriptFileHandler 借用一个JS文件引入

      FR/BI.$import("https://sss.eee.xxx/ddd.js", "js", must,  isAsync,  callback ) 引入第三方JS即可

  2. ShowComponent.KEY

    说明:访问仪表板预览页面时加载

    ReportComponent.KEY

    说明:访问仪表板编辑页面时加载