本文档主要介绍如何通过乐创者报表/单元格表单中通过”扩展控件”进行自定义控件开发的实现原理及基本过程。
适合于有一定Web前端技术开发人员,如果还没有掌握前端技术,可参考以下资料:
javascript教程:https://www.w3school.com.cn/js/index.asp
css教程:https://www.w3school.com.cn/css/index.asp

1、配置过程

1.1、准备工作

  • 如果待开发的扩展组件依赖第三方包,可以通过引入js、css文件方式在表单加载前载入:

    支持将第三方的js文件放在lczServer/user目录下直接访问,使用相对路径即可;也支持直接访问其他服务器上的js、css文件。

  • 如果扩展组件的业务比较复杂,实现代码比较多,可以将业务实现的代码编写在js文件中,通过上面加入js文件的方式载入,然后在表单中调用文件中的方法即可。

1.2、单元格设置扩展控件

普通报表

单元格表单

2、扩展控件开发说明

ER.widget.extend(this, {
    type: 'custom',
    init: function(datas, element, settings) {
      //根据datas,element构建组件
      var _thatComponent = this; //记住扩展控件对象,以便后续其他方法中可用

    },
    resize: function() {
    },
    destroy: function() {
    }
})

1.1、参数说明

  • type String 【必选】
    扩展的单元格类型,值:custom

1.2、待扩展组件实现方法说明

  • init Function 【必选】
    控件初始化入口函数。

    /**
    * 扩展控件初始化入口函数(作为用户构建控件实例的入口)
    * @param datas 扩展控件数据集(来源于扩展单元格上设置的模板数据和选择的字段),格式:{'列名1':[列数据],'列名2':[列数据]}
    * @param element 扩展控件所属的element对象
    * @param settings 报表对象
    */
    init: function(datas, element, settings) {
    }
  • resize Function 【可选】

    /**
    * 响应容器高度,宽度自适应;如果单元格的行高、列宽都是固定的,此函数可以不实现
    */
    resize: function() {
    }
  • destroy Function 【可选】

    /**
    * 控件销毁事件,如果控件中没有特殊对象,可以不实现销毁代码。有些特殊对象,如果不销毁可能导致浏览器内存不断占用,最终导致溢出。
    * 触发时机:单元格重新渲染或销毁时。
    */
    destroy: function() {
    }
  • reloadData Function 【可选】

    /**
    * 重新加载数据
    * @param datas 新的数据
    */
    reloadData: function(datas) {
     //数据刷新后,可以在这里重新渲染控件
    }
  • beforeLinkage Function 【可选】

    /**
    * 联动触发前事件,返回false将不触发后续联动渲染
    */
    beforeLinkage: function() {
    }
  • verifyCell Function 【可选】
    单元格表单“保存”触发完成校验时,对于扩展组件会调用此方法进行自定义校验。

    /**
    * 保存前校验单元格值
    * @return { status?: boolean, errorMsg?: string },status=false代表检验失败,其它情况均代表检验成功
    */
    verifyCell: function() {
      //扩展控件中自行实现
    }
  • dataSave Function 【可选】
    单元格表单,“保存”成功后,对于扩展组件会调用此方法进行自定义数据递交。

    /**
    * @description 扩展组件自定义数据保存的方法
    * @param params 报表日志列表等
    */
    dataSave: function(params) {
      //处理控件数据回写
      //添加日志,params.logs:表单提交数据日志列表,可在后面追加日志信息进行展示
      if (params.logs) {
        params.logs.push({"":""})
      }
    }

    logs日志对象结构:

    [
      {
          "detail" : "详情",
          "level" : "INFO",
          "summary" : "保存扩展控件数据",
          "time" : "13:46:12.637"
      }
    ]

    level:INFO、ERROR、WARN、DEBUG

1.3、内置方法

以下为系统提供的扩展控件的内容方法,可以直接调用。

  • handleLinkage(params)
    触发联动事件.
    params : 数据变更后,回传相关的数据,格式:[{‘name’: ‘变量名称’,’value’: ‘变量值’,’dispValue’:’变量显示值’}]

  • handleLink(linkName, params) Function 【可选】
    触发链接事件.
    linkName: 待执行的超链接名称,为空时自动按第一个超链接执行。
    params : 点击或数据变更后,回传相关的数据,格式:[{‘name’: ‘变量名称’,’value’: ‘变量值’,’dispValue’:’变量显示值’}]

    应按照超链接参数中值表达式中使用的参数名一致。如:超链接值表单式中使用“@控件编码”,那么这里的name应设置为”控件编码”。

  • getServerInfo()
    返回服务器信息

    var log(serverInfo) = _thatComponent.getServerInfo();
    console.log(serverInfo)

    打印内容格式为:

    {
      contextPath: "HappyServer",
      ip: "144.20.80.211",
      pagePath: "",
      port: 9014,
      scheme: "http"
    }

1.4、暂不支持的功能

  • 被联动

    暂不支持扩展控件响应参数热点联动。

  • 快照预览

    报表生成的快照中,暂不支持扩展控件。

  • 智能报告中的表格指标

    智能报告中链接的表格指标中,暂不支持扩展控件。

  • 导出
    扩展控件不支持导出。

  • 导入
    扩展控件不支持导入数据;

  • 打印
    扩展控件不支持打印

作者:柳杨  创建时间:2023-08-31 10:06
最后编辑:柳杨  更新时间:2025-04-22 15:31