FineReport填报基础

功能简介

标题填报功能可以将页面数据写入到数据库,包括数据的增加、删除和修改操作。同时也支持对填写数据的自定义校验,excel导入数据,根据填写值智能联动等功能。

标准流程

填报报表制作流程:

  1. 报表设计
  2. 添加填报控件
  3. 设置填报属性
  4. 设置填报页面
  5. 填报预览

填报模板设计规范

1.尽量不做成类excel模板,此类模板在后期维护和预览性能方面会有比较大的隐患。

类Excel模板是指假设第一列每行都是一个分类名,第二列添加限制条件根据第一列内容筛选,这样在后续的修改中面临一个一个修改的情况,工程量巨大。而且丧失了扩展属性。

2.扩展行较多的情况下,不使用sql函数不开启直接显示控件。原因是sql函数会多次执行影响计算速度,直接显示控件会增加页面渲染压力。

3.星填报JS不容易获取单元格,不支持的JS过多。但是渲染速度快。在行数不多的情况下建议使用普通填报。

行式填报

(1)如果只想向数据库提交自定义的数据,则无需将数据列拖入 A2~I2 ,可直接在空白单元格上添加填报控件。

(2)如果想要将数据集中的数据提交入库,而没有修改和新增数据的需求,可以将数据列拖入单元格,无需添加填报控件。

提交有 2 种方式:内置SQL和自定义提交,2 种提交方式的区别如下:

(1) 内置SQL提交
将填报页面数据跟数据库表的字段绑定,在点击提交后按照设置将数据入库。其底层逻辑为使用 JDBC 方式执行常规的增删改 SQL 语句
需要将填报数据的单元格与数据库表字段进行绑定,确保填报的数据可以录入到对应的数据库表字段下。

注:多个内置SQL的执行顺序为从上到下,串行执行。多个内置SQL属于同一个事务,如果其中一个执行失败,所有内置SQL都会回滚。

(2) 自定义提交
自定义提交:点击提交时,获取到填报页面的数据进行自定义的处理,比如上传到某个接口。需要通过编写java实现。

内置校验:用户可通过自定义的校验公式来对页面数据进行校验,也可以自定义校验出错时的提示语。

自定义校验:一些特殊的业务逻辑用公式校验实现起来比较复杂,希望可以交付给用户自定义的程序来判断,然后将结果返回给
FineReport进行提示。需要通过编写java实现。

提交类型:1.智能提交

1.智能提交将插入、更新、删除操作三合一。
2.更新和删除必须设置主键,类似于where的作用,去找到数据,如果没有主键只能实现插入功能。
3.如果用插入行插入了空白行,但对空白行没有进行编辑,那么这些记录的值都会被识别为 null。对于这种记录,在提交时会被过滤,不会入库。
4.数据入库后的顺序和页面展示顺序不保证一致。

2.删除提交

(1)删除提交留下的才是删除的数据,而不是删掉的行。
(2)删除提交只需要添加主键字段即可,其他非主键字段添加与否对结果没有影响
(3)删除提交只能用来删除数据。如果只有删除数据的需求,可以选择删除提交。

3.插入提交

(1)插入提交只能用来插入数据。如果只有插入数据的需求,可以选择插入提交。
(2)不会对数据重复性做判断,意味着可能会入库重复数据。如果数据库本身限制了不能有重复数据,则提交时会有相关报错。

4.更新提交

(1)更新提交没有主键和全是主键均不会执行,因为更新提交是找到数据库中和主键字段相同的值进行更新,全是主键就没有意义了。
(2)删除行删掉的数据仍然会进行更新。

提交条件

提交条件可以对提交入库的数据进行过滤,满足这个条件的数据可以入库,不满足的不予入库。

提交条件只会在提交的时候过滤掉不符合条件的数据,并不会终止提交过程,这一点和数据校验是不一样的。

数据校验

数据不符合要求会中止提交过程并提示,且会中止所有数据提交。(和提交条件的区别)
分为内置校验和控件校验两种方式;
控件校验:对控件进行属性设置
内置校验:有遍历过程,例如A2>!,遍历所有A2单元格里的数据。

插入删除行

分为工具栏和按钮
想插入的行必须是可扩展的。
工具栏插入必须选择第一列,否则就会出现如图这样以第一列为大类的插入。
在这里插入图片描述

注意:
(1)删除行按钮中不能设置提交事件,会有逻辑冲突问题。如果要设置,必须使用普通按钮。
(2)删除行按钮的删除只是将数据从页面上删除,不会和数据库有交互。如果希望删除行的同时将该数据从数据库中一并删除(JS实现删除时二次确认)
1)插入删除行会对页面上所有的公式进行重计算,页面会有一个刷新效果。所以如果页面本身加载速度较慢,比如开启了直接显示控件或者用了sql函数等,那插入删除行的速度也会变慢。
2)插入删除行会触发页面的加载结束后事件。
3)插入的行中单元格的值会受到插入行策略的影响

插入行策略

原值,空值,默认值
原值的意思是,插入数据会继承上一行的公式,例如=now()单元格设置成原值,则点击插入,则下一行也会显示当前时间。

但是当点击插入时,所有数据的时间都变成了当前最新时间,这是因为之前的页面会重新计算所有的公式。
错误解决方法:首先将重新计算的勾选给取消,但是发现所有时间都不是最新的了。
正确解决方法:设置默认值,以公式的方式加入now函数

根据控件值自动匹配数据

1.使用 value()函数 实现。支持扩展场景,性能较好。(要求jar包日期在2021-08-01及之后,否则插入行无法联动)

2.使用 ds1.select()函数 实现。支持扩展场景,性能较好。

3.使用 SQL()函数 实现。支持扩展场景,但大数据量下性能较差

例子:
B3:value(“ds1”,“产品名称”,“产品ID”,A3)
B3:ds1.select(产品名称,产品ID=A3)
B3:sql(“FRDemo”,“select 产品名称 from 产品 where 产品id=”+A3,1,1)

注意:人工输入数据会将select公式覆盖,所以后续公式就不会再生效。

填报控件数据字典联动:

跨sheet联动:

Excel导入

一.Excel导入逻辑:
(1)根据位置匹配
会将Excel中数据1:1导入模板(在Excel和预览完全一致时触发)
例子:一般是自由填报报表
(2)根据标题匹配
对标题进行比较,当标题一致时导入该列数据(当有2列以上才会触发)
(3)根据单元格位置匹配
当标题匹配失败或者设置了只能单元格匹配时才能触发。该匹配按照Excel列顺序进行导入,当该匹配失效时才会进行位置匹配。

二.普通导入:
一种覆盖式导入(默认标题匹配)
三.双向扩展格导入:
在有横向扩展时,需要开启双向扩展格导入。
四.Excel自定义导入:

(1)当前sheet:可以针对每个sheet设置不同的导入配置。需要注意的是,该设置并不是可以自由选择某个sheet进行导入的意思。在多sheet导入场景下,Excel和模板的sheet数以及sheet位置必须一致才可以全部导入。

(2)编辑导入sheet:选择需要导入的sheet,未勾选的sheet不会被导入。

(3)标题行:设置 Excel 中标题行是哪几行,标题行不会被导入,该选项为必填项,如果 Excel 无标题则都填 0。

    注:如果标题行都填了0,则会走普通 Excel 导入的逻辑,(标题匹配)
    否则会统一按照单元格位置匹配逻辑来进行导入。(单元格匹配)

(4)数据行:非必填。如果不填,默认导入除标题行外的所有数据;如果只填起始行,则导入该行及其后所有数据;如果只填结束行,则导入该行及其之前的数据。

     注:如果数据行不填,则会走普通 Excel 导入的逻辑,
     否则会统一按照单元格位置匹配逻辑来进行导入。

(5)数据列:勾选的列导入,不勾选列的不导入。当模板单元格存在公式时,如果导入了数据则会把公式覆盖,导致后续无法联动计算。但如果使用自定义导入,不导入该列数据,则可以保留公式用于计算。

五.Excel多次导入包括了三种形式:清空导入,覆盖导入,增量导入。

注:若文本控件所在单元格中插入了数据列,需要将数据设置改为列表
导入区域单元格应该设置成可扩展,而其他单元格不需要

清空导入:适用于导入前需要清空原有页面数据的场景。

该清空是清空页面原有数据,而不会影响到数据库。

覆盖导入:适用于希望导入数据能覆盖同位置数据,而不影响其他数据的场景。

增量导入:适用于希望在原有数据下方进行导入数据的场景。

六.Excel导入显示值转换
通过Excel导入逻辑配置插件+数据字典实现;
可以通过自定义样式将格式显示成自己想要的格式,但是填入数据库的实际值格式没有变化,这种问题我们可以通过在属性格式中设置格式转换公式完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值