【仅供内部供应商使用,不提供对外解答和培训】
...
无
与内部JS扩展这样引入插件内部的js资源相对应,JavaScriptPlaceHolder接口主要用于引入一些第三方的js资源,常见于第三方系统集成、第三方图表集成、第三方UI库引入等场景。这样引入插件内部的js资源相对应,JavaScriptPlaceHolder接口主要用于引入一些第三方的js资源,常见于第三方图表集成、第三方UI库引入等场景。
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
package com.fr.stable.fun; import com.fr.stable.StringUtils; import com.fr.stable.fun.mark.Mutable; /** * Created by richie on 16/4/26. * 脚本占位,用于在page.html或者form.html中引入脚本 */ public interface JavaScriptPlaceHolder extends Mutable { String MARK_STRING = "JavaScriptPlaceHolder"; int CURRENT_LEVEL = 2; /** * 占位的内容 * @return 内容 */ String placeHolderContent(); /** * 脚本内容 * @return 脚本描述对象 */ ScriptTag[] holderScripts(); class ScriptTag { private String type; private String src; private String text; public static ScriptTag build() { return new ScriptTag(); } private ScriptTag() { } public ScriptTag type(String type) { this.type = type; return this; } public ScriptTag src(String src) { this.src = src; return this; } public ScriptTag text(String text) { this.text = text; return this; } public String toTag() { StringBuilder sb = new StringBuilder(); sb.append("<script"); if (StringUtils.isNotEmpty(type)) { sb.append(" "); sb.append("type="); sb.append("\""); sb.append(type); sb.append("\""); } if (StringUtils.isNotEmpty(src)) { sb.append(" "); sb.append("src="); sb.append("\""); sb.append(src); sb.append("\""); } sb.append(">"); if (StringUtils.isNotEmpty(text)) { sb.append(text); } sb.append("</script>"); return sb.toString(); } } } |
...
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
package com.fr.stable.fun.impl; import com.fr.stable.fun.JavaScriptPlaceHolder; import com.fr.stable.fun.mark.MutableAPI; /** * @authorCreated by richie * @date 2015-02-26on 16/4/26. */ @API(level @since= 8.0 */ public interface WebFileHandler extends Mutable { String ENCODE_SEPARATOR = "?encode="; /** * 返回Web端需要的文件的相对路径JavaScriptPlaceHolder.CURRENT_LEVEL) public abstract class AbstractJavaScriptPlaceHolder extends AbstractProvider implements JavaScriptPlaceHolder { public int currentAPILevel() { return CURRENT_LEVEL; } public String mark4Provider() { return this.getClass().getName(); } public String placeHolderContent() { StringBuilder sb = new StringBuilder(); ScriptTag[] scripts = holderScripts(); if (scripts != null) { for (ScriptTag script : scripts) { sb.append(script.toTag()); * * @return 文件的路径组成的集合} */ } String[] pathsForFilesreturn sb.toString(); } public StringScriptTag[] encodeholderScripts() { return new ScriptTag[0]; } } |
产品线 | 版本 | 支持情况 | 备注 |
---|---|---|---|
FR | 8.0 | 支持 | |
FR | 9.0 | 支持 | |
FR | 10.0 | 支持 |
BI | 3.6 | 支持 | |
BI | 4.0 | 支持 | |
BI | 5.1 | 支持 |
BI | 5.1.2 | 支持 |
BI | 5.1.3 | 支持 |
在10.0版本中以下3种注册方式都只对报表预览生效,生效优先级 form>report>core。
...
language | xml |
---|---|
theme | Eclipse |
firstline | 1 |
title | plugin.xml |
linenumbers | true |
...
注册cpt报表预览引入外部JS
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<extra-report> <CssFileHandler<JavaScriptPlaceHolder class="your class name"/> </extra-report> |
注册决策报表预览引入外部JS
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<extra-form> <CssFileHandler<JavaScriptPlaceHolder class="your class name"/> </extra-form> |
接口注册逻辑:在产品的服务器/报表/决策报表模块(cpt报表:当ReportletDealWith#dealWithHtml 生成html页面内容的时候,会直接从插件引擎中读取相关注册的接口进行生效ReportletDealWith#createScriptPlaceHolderString。
决策报表:AbstractFormActor#initMap4Form 初始化html内容是,会直接从插件引擎中读取相关注册的接口进行生效AbstractFormActor#createScriptPlaceHolderString。
接口的加载落后于com.fr.modulestable.ServerModule、com.fr.report.module.EngineModule、fun.JavaScriptFileHandler,但优先于com.fr.formdecision.module.FormModule)启动的时候(module.start();)会从插件中分类读取相应申明的css资源。
接口的生效逻辑:com.fr.web.ResourceHelper#forceInitStyleCache方法执行时会把插件接口指向的css文件中的内容读取进来注入到报表预览的主体CSS中(区别于web组件接口:组件接口是独立的css文件加载)
String encode(); 接口方法默认已实现,表示的是引入的资源的编码方式,默认值是UTF-8
String[] pathsForFiles(); 中的css脚本文件path,指的是css文件在插件jar中的相对位置(如:com/demo/css/main.css)
demo地址:demo-cssjava-filescript-handlerplace
com.fr.stable.fun.JavaScriptFileHandlerStylePlaceHolder
免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。若作为商用一切后果责任由使用者自行承担。
...