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

Page tree

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

Skip to end of metadata
Go to start of metadata

一、特殊名词介绍

二、背景、场景介绍

帆软设计器中存在很多交互扩展的接口(工具栏/菜单/单元格右键菜单/各种属性、事件配置页面),这些接口有的可直接包含readXML和writeXML这样的序列化和反序列化的接口方法,有的则没有。这时候如果需要对报表的相关配置做扩展读写,则可以通过IOFileAttrMark接口实现

该接口绝大部分时候,不作为独立接口使用。而是配合设计器的相关交互接口一同使用。

三、接口介绍

IOFileAttrMark.java
package com.fr.stable.fun;

import com.fr.json.JSONException;
import com.fr.json.JSONObject;
import com.fr.stable.fun.mark.Mutable;
import com.fr.stable.xml.XMLable;

/**
 * Created by richie on 16/4/19.
 * 给IOFile对象提供的额外属性
 */
public interface IOFileAttrMark extends Mutable, XMLable {

    String MARK_STRING = "IOFileAttrMark";

    int CURRENT_LEVEL = 1;

    /**
     * 该属性的XML标记标签,具有唯一性
     * @return XML标签
     */
    String xmlTag();

    /**
     * 属性转为json
     * @return json格式的属性
     */
    JSONObject createJSONConfig() throws JSONException;

    /**
     * 克隆当前对象
     * @return 克隆出来的对象
     */
    IOFileAttrMark clone();
}


四、支持版本

产品线

版本

支持情况

备注

FR8.0支持
FR9.0支持
FR10.0支持

五、插件注册

plugin.xml
<extra-core>
        <IOFileAttrMark class="your class name"/>
</extra-core>


六、原理说明

该接口在需要调用的地方通过:Set<IOFileAttrMark> attrs = PluginModule.getAgent(PluginModule.ExtraCore).getArray(IOFileAttrMark.MARK_STRING);获取到插件中所有申明的报表属性扩展实现。

在产品中主要通过以下方式使用:在模板文件加载反序列化(xml转换成内部的模板对象)时,通过IOFileAttrMarkReader.read方法对扩展属性进行加载。在此方法中会先读取插件中和产品中内置申明的所有属性map,遍历尝试读取生效

IOFileAttrMarkManager.getAllAsMap获取所有属性列表时,会先通过getExtraMarks方法把插件中申明的所有属性实列加载进来

七、特殊限制说明

该接口的使用非常灵活,在整个报表中非常多的地方都可以使用这个接口引入扩展属性。报表对象(包括本身)中所有继承AttrMark和RichStyleWidgetProvider接口的类都可以使用这个接口进行属性的扩展(主要扩展来源,不排除有极个别类没有按照规范,直接调用接口的,这种不规范的情况可以忽略不记)。

因为该接口的使用非常灵活,所以很难用一段代码把接口的大部分使用场景展示出来,demo示例只是用来参考的。更多还是要理解接口的使用条件后,酌情使用。不要被demo限制了想象力。

八、常用链接

demo地址:demo-menu-handler【attr-mark】

九、开源案例

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

暂无

  • No labels