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

Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

一、特殊名词介绍

二、背景、场景介绍

内部JS扩展这样引入插件内部的js资源相对应,JavaScriptPlaceHolder接口主要用于引入一些第三方的js资源,常见于第三方系统集成、第三方图表集成、第三方UI库引入等场景。

三、接口介绍

Code Block
languagejava
themeEclipse
firstline1
titleJavaScriptFileHandler .java
linenumberstrue
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
languagejava
themeEclipse
firstline1
titleWebCoalition.java
linenumberstrue
package com.fr.stable.fun;

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

/**
 * @author richie
 * @date 2015-02-26
 * @since 8.0
 */
public interface WebFileHandler extends Mutable {

    String ENCODE_SEPARATOR = "?encode=";

    /**
     * 返回Web端需要的文件的相对路径
     *
     * @return 文件的路径组成的集合
     */
    String[] pathsForFiles();

    String encode();

}


四、支持版本

产品线

版本

支持情况

备注

FR8.0支持
FR9.0支持
FR10.0支持仅做兼容使用,新插件请勿使用!
BI3.6支持
BI4.0支持
BI5.1支持仅做兼容使用,新插件请勿使用!
BI5.1.2支持仅做兼容使用,新插件请勿使用!
BI5.1.3支持仅做兼容使用,新插件请勿使用!

五、插件注册

在10.0版本中以下3种注册方式都只对报表预览生效,生效优先级 form>report>core。

Code Block
languagexml
themeEclipse
firstline1
titleplugin.xml
linenumberstrue
<extra-core>
        <CssFileHandler class="your class name"/>
</extra-core>


Code Block
languagexml
themeEclipse
firstline1
titleplugin.xml
linenumberstrue
<extra-report>
        <CssFileHandler class="your class name"/>
</extra-report>


Code Block
languagexml
themeEclipse
firstline1
titleplugin.xml
linenumberstrue
<extra-form>
        <CssFileHandler class="your class name"/>
</extra-form>

六、原理说明

接口注册逻辑:在产品的服务器/报表/决策报表模块(com.fr.module.ServerModule、com.fr.report.module.EngineModule、com.fr.form.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)

八、常用链接

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

demo地址:demo-css-file-handler

com.fr.stable.fun.JavaScriptFileHandler

九、开源案例

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