FineReport学习笔记
FR是一款类Excel操作界面的报表工具,通过拖拽实现简单的报表制作,实现数据展示、数据查询、数据录入等功能,并支持图像多样化。
一、报表制作流程
新建数据(连接数据库)–>创建模板与数据集–>模板设计(包括报表设计、参数、图表、填报设计)–>模板预览web端查看
二、数据连接
三、数据集和模板
四、报表设计(入门)
五、报表设计(进阶)
1.行式报表
2.分组报表
六、参数入门
七、参数进阶
八、图表入门
1.图表制作流程
2.两种插入方式优缺点
图表有两种插入方式:作为单元格元素插入或者作为悬浮元素插入,两种插入方法有什么区别?
1)单元格图表
优点:图表作为单元格元素插入到报表中,就可以通过单元格的父子关系,跟随父格的扩展自动生成相应的图表,而不需要对每组数据单独制作对应的图表。
缺点:有的时候不想跟随父格扩展,需要取消父格。
方式一:菜单栏-->插入-->单元格元素-->插入图表
方式二:右击鼠标,步骤同上
方式三:右侧属性栏-->单元格元素-->插入元素下拉框-->选择插入图表
2)悬浮元素图表
优点:作为悬浮元素插入到报表中的图表,没有单元格的限制,可以固定图表位置,也可以随意拖放到任何位置,大小设置后不会改变,没有父格,不会因为其他单元格的扩展而受影响。
缺点:导出 Word 格式文件,不支持导出悬浮元素图表;移动端不支持悬浮元素图表。
右侧属性栏(第三个)-->悬浮元素-->添加元素-->插入图表
3.单元格元素图表
单元格图表的优势:图表作为单元格元素插入到报表中,就可以通过单元格的父子关系,跟随父格的扩展自动生成相应的图表,而不需要对每组数据单独制作对应的图表。
注:单元格元素图表与单元格数据源图表不是一个概念,单元格元素图表是指图表插入方式为单元格,可跟随单元格扩展,拥有单元格的一些属性,而单元格数据源图表是指图表绑定数据的时候绑定的是 单元格数据,而非数据集数据。
设置图表数据:右侧数据来源(单元格数据)、数据分类、系列名和值
设置图表父子格:
4.悬浮元素图表
作为悬浮元素插入到报表中的图表,没有单元格的限制,可以固定图表位置,也可以随意拖放到任何位置,大小设置后不会改变,没有父格,不会因为其他单元格的扩展而受影响。
5.定义图表数据来源(单元格数据)
(1)两个来源:可以来自于数据集,也可以来源于单元格数据。来源为数据集数据就是具体字段名;来源为单元格数据
就是用公式表示出字段名所在的单元格位置,包括:来源方式(单元格数据)、数据分类、系列名、值
(2)公式定义数据规则
使用单元格数据作为图表数据时,分类轴、系列名与系列值可能不是由一个单元格扩展出来,而是由多个单元格组成,此时定义图表数据规则如下:
如果数据来自于一片连续的单元格如 A1~A3:则定义时使用公式=A1:A3,用冒号隔开。
如果数据来自于不连续的多个单元格如 A1、A3、A5:则定义时使用公式=[A1,A3,A5]用逗号隔开,并且需要加上 [] 号。
6.定义图表数据来源(数据集数据)
系列名称有两个:使用字段值、使用字段名
若图表的数据可以通过数据集直接取出,并且图表的系列名称来自于某数据列中的数据,此时可以通过数据集数据源-字段值作为系列名称来定义图表。
若图表的数据可以通过数据集直接取出,且图表的系列名字就为字段名,图表系列的值为对应字段中的值,此时就可以通过数据集数据源-字段名作为系列名称来定义图表。
7.跨sheet引用单元格
在 cpt 报表格式下,我们也时常会使用多 sheet 页签,并在不同的页签展示不一样的形式。
例如:sheet1 页签内放着一个完整的数据报表,我们希望在 sheet2 中根据 sheet1 页签内计算后的单元格数值做一个柱形图
注:在引用其他sheet中的数据时,公式采用 ‘sheet 名称’!单元格的格式。
举例:
分别选中 sheet1、sheet2,点右键,将 sheet1、sheet2 分别重命名为销售和柱形图-->在柱形图sheet中插入图表
-->设置单元格数据来源为"单元格数据"
分类为='销售' !B4,系列名为='销售' !C3,值为='销售' !C4即可预览。
九、图表进阶
十、填报入门
1.填报报表概念
填报报表:CRM、ERP、OA 等基础信息化系统中都会包含一些页面,提供给业务人员或者用户对数据库进行增加、修改、删除等操作。这样的页面我们就叫做填报报表。
填报报表与普通报表的区别是能否录入数据,普通报表只能浏览、汇总数据不能录入数据,而填报报表不仅可以浏览数据,还能录入数据。
2.制作流程
(1)报表设计:和普通报表一样,如果不需要可以不添加
(2)添加控件:为需要录入修改的单元格添加控件,选择控件类型,添加控件属性。
(3)设置填报属性(绑定字段):将单元格和数据库字段进行绑定,确保web端录入的数据和数据库字段匹配。
(4)填报录入:以web端预览的方式打开模板,在web端录入数据,并进行提交入库操作。
3.填报控件
填报控件是指在 Web 端用来输入数据的控件,只有单元格绑定了控件,才可以在 Web 端输入数据,进行数据的填报。
(1)添加控件方式
方式一:右击-->控件设置
方式二:右侧属性面板(第四按钮)-->选择控件类型-->分别设置属性、事件(具体见下面说明)
(2)数据字典
数据字典是指为控件绑定备选数据,可以直接选择,不用手动输入。
注:不是所有控件都有数据字典设置项。
(3)控件事件
根据控件响应时间的不同,我们把控件的事件分为九种:初始化后、编辑前、编辑后、编辑结束、点击、状态改变、值改变、上传后及节点生成。
FineReport控件只允许在填报和决策报表(包括参数界面)中使用,所以控件分为填报控件和决策报表控件,由于填报和决策报表的区别,控件事件的触发时间有所区别,下面一一介绍:
初始化后:决策报表的初始化事件是在控件加载结束后触发,填报页面中除了复选框控件、单选按钮组控件、复选框组控件和视图树控件是在控件加载结束时触发初始化事件之外,其他控件均是在填报时,点击控件的编辑按钮时(单击单元格时)触发;初始化事件示例请查看批量删除。
编辑前:控件进入编辑状态时触发。
编辑后:控件编辑后触发,如果编辑后事件中使用了alert提示,请改用toast提示,否则会影响中文的输入;编辑后事件示例请查看动态显示参数控件。
编辑结束:鼠标焦点离开控件时触发;编辑结束事件示例请查看给扩展单元格置数。
点击:下拉框、下拉复选框、下拉树这三个控件的点击事件是在点击下拉项的时候触发,其他控件是在点击控件的时候触发;点击事件示例请查看批量删除。
状态改变:状态改变是指控件的值发生改变时触发,该事件只能适用于复选框、单选按钮组和复选框组中。状态改变事件示例请查看点击单选按钮弹出对话框输入值。
注:填报中,单元格控件设置了编辑结束事件,鼠标焦点点进控件,不做任何改动,再点出控件,这时不会触发编辑结束事件,但是在参数面板中的决策报表控件却会触发编辑结束事件,如果想要在填报单元格控件的编辑结束事件实现与决策报表控件一样的效果,不作任何改动,点出控件时,也触发编辑结束事件,只需要为该控件添加一个初始化事件:
注:内置的提交无法在编辑结束后事件中使用,因为内置提交事件会触发编辑结束后事件,编辑结束后事件会触发提交事件,造成死循环;
(4)控件事件中JS脚本使用
例如我们获取的控件变量为Widget,那么可以通过Widget.getValue();来调用控件的方法。
以下列出控件的方法,假设获取到的控件变量为Widget:
取值 Widget.getValue() 获取控件值
取值 Widget.getText() 获取控件显示值
赋值 Widget.setValue() 给参数控件赋值,不建议给填报控件赋值
重置 Widget.reset() 清空数据
可见 Widget.visible() 设置控件可见
不可见 Widget.invisible() 设置控件不可见
是否可见 Widget.isVisible() 返回控件是否可见,返回true可见,false不可见
设置可见 Widget.setVisible(boolean) 设置控件是否可见,参数为true可见,false不可见
设置可用 Widget.setEnable(boolean) 设置控件是否可用,参数为true可用,false不可用
是否可用 Widget.isEnabled() 返回控件是否可用,返回true可用,false不可用
调用控件事件 Widget.fireEvent("事件名称") 设置控件触发指定名字的事件
注:若JavaScript脚本在当前控件的事件中,可以不用获取当前控件,直接使用this,如this.getValue();
另:Widget.fireEvent("事件名称")中填写的值可查看控件事件章节中的事件名称。
另:Widget.setValue()该方法是给控件赋值,但是不建议在填报页面用该方法给控件赋值,因为这是给控件赋值,并不是单元格,在填报的时候如果使用该方法赋值,每次给控件赋值完成之后,将值传给单元格之前,会被清空,最后单元格的值还是为空,所以在填报页面建议使用setCellValue()给控件赋值。
4.报表填报属性(给数据库表字段绑定保存的值)
通过设置菜单栏 模板—>报表填报属性来控制。
(1)两种方法
方法一:通过内置 SQL 绑定单元格,此时类似 Excel中,可以智能添加单元格;除绑定单元格外,数据列的值还可以是常量、公式、参数等等。
方法二:通过自定义事件来实现自定义提交
(2)内置SQL(往数据库中填报数据)
步骤:
a.选择提交类型(智能、插入、删除、更新;默认是智能,用的最多)
b.选择数据库表
c.添加字段(点击智能添加字段按钮,会自动读取数据库中表中的所有字段)
d.添加单元格(点击智能添加单元格,在弹出的对话框中选择报表主体中的单元格,为数据列绑定单元格)
e.设置提交条件(可选做)
f.设置提交事件(可选做)
注意:
①智能添加单元格组是指为一个数据列绑定多个单元格,将多个单元格中的数据全部填报至该字段中
②添加了多个内置 SQL 后(不论几个 sheet 里面的内置 SQL),提交时有一个执行不通过的话,后面的内置 SQL 就不会执行,前面的执行过的也会无效(FR 填报支持事务回滚机制)。
③在数据 commit 时出现异常,或者回滚时出现异常时, 如果最终是失败的,后台额外报错提示:前者是 “数据提交出错,无法回滚”,后者是 “数据回滚失败”。 前端都提示”失败”。
(3)自定义事件(需要调函数和类,Java知识)
报表填报属性有 2 种设置方式,一个是内置 SQL 直接绑定字段,往数据库中填报数据,另外一种是添加自定义事件,如果需要获取数据对数据进行进一步处理,则可选择添加自定义事件
5.填报预览
(1)上传图片
控件面板–>属性–>高级面板–>选择上传类型(勾选只支持单文件上传)
进行填报预览,就可以上传图片了,若该格与某个数据库表的字段进行了绑定,上传的文件以二进制的格式保存在数据库表中
注:“只支持单文件上传”,勾选此按钮后,上传照片会直接显示图片和文件名;如果不勾选,上传后则不会直接显示图片,而是显示文件名。
图片太大解决办法:
当图片太大,无法正常显示,其解决方法如下:
右击单元格,选择样式>自定义>对齐或者直接在报表右侧的单元格属性面板中选择样式>自定义样式>对齐,将图片布局的方式改为适应即可。
(2)行式填报表
步骤:表样设计–>选中单元格添加控件–> 报表填报属性 设置(模板>报表填报属性,选择数据库添加字段、添加单元格)
–>工具栏设置(模板>模板web属性>填报页面设置)–>预览
注意:
a.制作填报表时不需要担心内容超过分页线,填报表是单页显示的,分页是普通报表特有的属性。
b.填报页面,在模板设置了冻结时不显示悬浮元素。
(3)自由填报
填报报表与普通报表不一样,普通报表是用来展示数据,而填报报表是用来录入数据