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

Page tree

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

Skip to end of metadata
Go to start of metadata

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