【仅供内部供应商使用,不提供对外解答和培训】
【仅供内部供应商使用,不提供对外解答和培训】
WEB组件:本文中所指的组件是指一组用于解决特定业务或实现特定功能的,JS脚本和样式的集合。
1.在帆软的决策系统和报表展现时,不同的客户往往对展现的样式和交互风格有自身的审美要求。当产品本身的配置功能不满足需要时,则可以使用该接口进行个性化的处理。
2.在帆软产品的使用过程中,如果客户需要对产品的前端功能进行扩充和变更,则可以使用该接口进行配合实现;(比如:平台功能修改、新增平台功能、新控件、新图表 的开发)
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; }
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(); }
产品线 | 版本 | 支持情况 | 备注 |
---|---|---|---|
FR | 10.0 | 支持 | |
BI | 5.1 | 支持 | |
BI | 5.1.2 | 支持 | |
BI | 5.1.3 | 支持 |
<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
免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。禁止用于任何商业用途,若作为商用一切后果责任由使用者自行承担。
3 Comments
onlyxx
请问在哪个版本中WebResourceProvider 开始支持报表注入,请问是否有好的方案引入第三方js,css。(有些特定的js必须要放在第三方)谢谢
hugh-甘超
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即可
Valley
ShowComponent.KEY
说明:访问仪表板预览页面时加载
ReportComponent.KEY
说明:访问仪表板编辑页面时加载