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

Page tree

Versions Compared

Key

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

...

一、特殊名词介绍

二、背景、场景介绍

内部JS扩展这样引入插件内部的js资源相对应,JavaScriptPlaceHolder接口主要用于引入一些第三方的js资源,常见于第三方系统集成、第三方图表集成、第三方UI库引入等场景。这样引入插件内部的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
titleWebCoalitionAbstractJavaScriptPlaceHolder.java
linenumberstrue
package com.fr.stable.fun.impl;

import com.fr.stable.fun.JavaScriptPlaceHolder;
import com.fr.stable.fun.mark.MutableAPI;

/**
 * Created @authorby richie
 * @date 2015-02-26on 16/4/26.
 */
@API(level @since= 8.0
 */
public interface WebFileHandler extends Mutable {
JavaScriptPlaceHolder.CURRENT_LEVEL)
public abstract class AbstractJavaScriptPlaceHolder extends AbstractProvider implements JavaScriptPlaceHolder {

    public int currentAPILevel() {
        return CURRENT_LEVEL;
    }

    public String mark4Provider() {
        return this.getClass().getName();
    String ENCODE_SEPARATOR = "?encode=";

    /**
}

    public String placeHolderContent() {
        StringBuilder sb = new StringBuilder();
        ScriptTag[] scripts = holderScripts();
        if (scripts != null) {
            for (ScriptTag script : scripts) {
               * 返回Web端需要的文件的相对路径 sb.append(script.toTag());
     *
     * @return 文件的路径组成的集合}
      */
  }
        String[] pathsForFilesreturn sb.toString();
    }

    public StringScriptTag[] encodeholderScripts() {
        return new ScriptTag[0];
    }
}


四、支持版本

产品线

版本

支持情况

备注

FR8.0支持
FR9.0支持
FR10.0支持
仅做兼容使用,新插件请勿使用!

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

BI5.1.2支持
仅做兼容使用,新插件请勿使用!

BI5.1.3支持
仅做兼容使用,新插件请勿使用!

五、插件注册

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

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<JavaScriptPlaceHolder class="your class name"/>
</extra-report>

注册决策报表预览引入外部JS

Code Block
languagexml
themeEclipse
firstline1
titleplugin.xml
linenumberstrue
<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)fun.WebResourceProvider

八、常用链接

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

demo地址:demo-cssjava-filescript-handlerplace

com.fr.stable.fun.JavaScriptFileHandlerStylePlaceHolder

九、开源案例

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

...