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

Page tree

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

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

xml的扩展

  • env-version:含义有扩展,变成了一个区间
  • lifecycle-monitor:整体入口和出口
  • function-recorder(9.0必须包含):指向功能点记录类
  • main-package:指定当前插件主要的包名,在之后打包预处理、加密、运行时扩展中都有重要作用,xml中描述的类都要在这个包里面,默认fr-core
  • attributes:自定义属性,内部格式随意,用于实现插件内部简单的可配置(目前是只读的)

功能点记录

  • 提供注解的形式,在运行前自动解析
  • 9.0必须提供功能记录点,否则不能运行
  • xml中必须提供function-recorder标签,否则不能运行

调试

  • 文件目录和ClassLoader结构的变化影响:将插件的classes编译到plugin.xml旁边的classes文件夹下

 插件打包预处理

  • 加密
  • 自动添加currentAPILevel方法

ClassLoader结构影响

  • 加载插件中的资源不能用报表的ClassLoader--上下文对象加载资源
  • 除了依赖的插件,通常是访问不到其他插件的类的

热部署影响

  • 释放资源的问题--插件监听、上下文对象

对照表:

根据插件需要支持的报表版本,参考下列写法编写或升级插件

插件要在9.0中运行,必须保证红色功能使用兼容或者9.0独占的写法

实现功能9.0独占兼容8.0、9.08.0独占
资源加载PluginContexts.currentContext().getResource(name);

this.getClass().getResource(name);

this.getClass().getClassLoader().getResource(name);

IOUtils.getResource(name)等方法

GeneralContext.class.getResource(name);

GeneralContext.class.getClassLoader().getResource(name);

访问没有依赖关系的插件不支持不支持

if (Class.forName(pluginBClassName) != null){...}

建议不要用

资源和对象释放方案<lifecycle-monitor>

PluginContexts.currentContext().executeRecoverable(task);

PluginContexts.currentContext().newTimer();

不释放
env-version写法

<env-version>9.0<env-version>

<env-version>9.0~<env-version>

<env-version>8.0<env-version><env-version>~8.0<env-version>
功能记录点<function-recorder> + @FunctionRecorder + @ExecuteFunctionRecord注解默认写法
自动打印日志

独占

@Log注解

不支持不支持
访问licensePluginContexts.currentContext().isAvailable();PluginLicenseManager.getInstance().getPluginLicenseByID(pluginID).isAvailable();
加密

独占

不支持不支持
自动添加currentAPILevel方法独占不支持不支持
自定义标签独占不支持不支持
main-package标签支持支持可写,不解析
OEM开发暂不支持暂不支持独占
  • No labels