web报表工具填报功能全攻略.docx
《web报表工具填报功能全攻略.docx》由会员分享,可在线阅读,更多相关《web报表工具填报功能全攻略.docx(45页珍藏版)》请在冰豆网上搜索。
web报表工具填报功能全攻略
web报表工具填报功能全攻略
。
。
。
。
表单提交超链接………………………………………………………2
单元格不改变时不参与更新…………………………………………6
及时校验………………………………………………………………8
跨格数据及时校验……………………………………………………12
扩展数据的数据校验…………………………………………………16
批量修改单元格………………………………………………………17
填报保存值类型………………………………………………………19
填报流水号……………………………………………………………22
填报自动匹配值………………………………………………………26
文本域换行……………………………………………………………29
下拉框的快速查询……………………………………………………33
行式报表………………………………………………………………34
用户自定义填报………………………………………………………39
表单提交超链接
在填报时,提交会出现两种结果,提交成功和提交失败,可以对这两种结果进行事件编辑,在FineReport6.5中可以通过报表->报表Web属性->填报页面设置添加提交成功和提交失败事件进行编辑。
1.打开模板
2.添加提交事件
点击填报|报表Web属性,选择填报页面设置栏目,进入填报页面设置窗口,在右边栏中添加提交成功和提交失败事件,如下图所示
具体的填报成功事件和填报失败事件代码如下
填报成功事件,添加JS代码:
window.open(“”);
在填报成功后,打开XX连接。
提交失败事件,JS代码:
window.open("http:
//localhost:
8079/WebReport/ReportServer?
op=fs");
该代码用于填报提交失败后打开产品演示文档。
3.填报并预览
点击设计器的填报预览,效果如图
点击提交,显示提交成功
点击确定按钮,这是触发提交成功事件,链接到XX首页
不填用户编号时提交失败,如图
点击确定按钮,触发提交失败事件,页面跳转到产品演示文档
单元格不改变时不参与更新
填报提交时,将根据情况进行insert/update操作,当填报列数较多时,速度可能较慢,因为他要对所有字段进行操作。
此时可以设置单元格不改变时不参与更新,这样,相应的数据列在数据不改变时,不会参与更新操作,即SQL语句中update中不包含该列,进而提高填报的效率。
但这个功能只有在填报更新数据的时候有效,如果是插入操作的话仍是插入所有字段,因此需要在使用报表主键的的基础上使用该功能。
1.新建报表
新建一张空白报表,添加数据库查询ds1,SQL语句为:
SELECT*FROMstscoreWHEREstudentno=1014,设计成如下格式的报表
2.控件设置
给单元格加上控件,分别定义如下单元格控件属性
单元格
B3
C3
D3
E3
F3
G3
控件类型
文本
文本
文本
文本
文本
文本
3.报表填报属性
添加内置SQL,具体设置如下图,将studentno设为主键,所有的单元格设置不改变时不参与更新,这样进行update操作时只有单元格改变的列才参与更新。
4.保存并预览
保存模板,点击设计器的填报预览,结果如下图所示
我们修改Achilles这个学生的英语成绩,原为93,我们改为100,点击提交
此时,日志面板中的更新语句为
INFO:
UPDATE[STSCORE]SET[GRADE]=?
WHERE[STUDENTNO]=?
AND[COURSE]=?
可以看到,数据库只更新了GRADE的值,且只对三个字段进行了操作。
但若是不设置“单元格不改变时不参与更新”,同样的操作我们将会得到如下更新语句:
INFO:
UPDATE[STSCORE]SET[CLASSNO]=?
[NAME]=?
[SEX]=?
[GRADE]=?
WHERE[STUDENTNO]=?
AND[COURSE]=?
数据库对每个字段都进行了更新操作,若列数量多的情况就会非常耗时了。
及时校验
现有的控件设置面板中包含有各种及时校验,如文本控件的填写规则校验、数字的精度校验、日期时间可以规定范围等,以下介绍几种常用的及时校验设置。
1.文本控件及时校验
文本控件类型有不为空的校验,也有填写规则校验,更有自定义校验,FineReport报表中自带有长度,邮件,身份证,邮政编码,电话,手机等及时校验,自定义校验可以根据需要自己书写正则表达式。
例如输入验证用户密码的正则表达式:
“^[a-zA-Z]\w{5,17}$”表示密码规则是以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
●\d任意一个数字,0~9中的任意一个
●\w任意一个字母或数字或下划线,也就是A-Z,a-z,0-9中任意一个
●\s包括空格、制表符、换页符等空白字符的其中任意一个
●.小数点可以匹配除了换行符(\n)以外的任意一个字符
●^开始
●$结束
一些表达式的作用:
{n}:
表示重复n次,比如"\w{2}"相当于"\w\w";"a{5}"相当于"aaaaa"
{m,n}:
表示至少重复m次,最多重复n次,比如"ba{1,3}"可以匹配"ba"或"baa"或"baaa"
{m,}:
表示至少重复m次,比如"\w\d{2,}"可以匹配"a12","_456","M12344"
?
:
匹配表达式0次或者1次,相当于{0,1},比如"a[cd]?
"可以匹配"a","ac","ad"
+:
表达式至少出现1次,相当于{1,},比如"a+b"可以匹配"ab","aab","aaab"
*:
表达式不出现或出现任意次,相当于{0,},比如"\^*b"可以匹配"b","^^^b"。
一些常用小例子举例:
(1)检查手机号是否合法:
/^1(3\d|5[36789])\d{8}$/
说明:
手机号共11位,第一位为1,第二位为3或者5,当第二位为5的时候,第三位只能是36789中的一个
(2)检查中文名是否合法:
/^[\u4e00-\u9fa5]+$/
说明:
若不是中文或中文的前后有空格,都认为是不合法的
(3)检查html标记是否匹配:
/<(.*)>.*<\/\1>|<(.*)\/>/
说明:
如若只出现而无对应的,则检验结果是html标记不匹配
(4)检查URL格式是否合法:
”[a-zA-z]+:
//[^\s]*”
说明:
URL合法格式应该以字母连接:
//开头
(5)检查IP格式是否合法:
/(\d+)\.(\d+)\.(\d+)\.(\d+)/
说明:
IP的格式是点分十进制格式,例如:
192.168.100.11就是正确的IP
(6)检查账号是否合法:
/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/
说明:
账号字母开头,其他位可以有大小写字母、数字、下划线,允许5-16字节
(7)检查QQ号是否合法:
/^\s*[.0-9]{5,10}\s*$/
说明:
QQ号码必须是数字,最长10位
(8)检查邮政编码是否合法:
/^[1-9]\d{5}$/
说明:
邮编首位不为0,长度是6位的数字
(9)检查身份证号是否合法:
/(^\d{15}$)|(^\d{17}([0-9]|X)$)/
说明:
身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
2.数字控件及时校验
数字控件有不为空校验,同时也可以控制其是否允许小数与父数,还可以设置数值的范围。
3.日期和时间控件及时校验
日期和时间控件可以设置其所在范围,如下图
4.下拉框的不为空
对于下拉框、下拉复选框、下拉树等下拉选项控件,他们的允许为空设置除了表示该控件不允许为空值,同时也可以控制他们的下拉选项中不允许有空选项,结合“空值将显示为:
”一起使用。
例如下图设置
此时下拉选项中空值记录便会显示为ALL,效果如下
若未选择任何项,确定后编辑其他单元格时将弹出及时校验对话框
跨格数据及时校验
在实现填报时,有时需要在编辑完数据后跟其他具体某个格子对比,进行及时校验。
当报表中提供的及时校验不能满足需求时,可以通过js事件来进行及时校验
1.连接数据库FRDemo
2.设计模板
2.1新建报表
2.2表样设计,如下图所示
2.3定义单元格填报属性
●设置B2的控件类型为数字,如图所示
●设置B3的控件类型为文本,如图所示
2.4事件编辑
●对B2单元格控件设置进行事件编辑,添加编辑结束事件:
varD2value=arguments[1].getCellValue("D2");
if(this.getValue()FR.Msg.alert(FR.i18n.Alert,"该值不能小于"+D2Value);
returnfalse;
}
其中,D2value是自定义变量,用于获得D2单元格的值,if语句是用来判断该单元格输入后的值是否小于D2value,如果是则弹出警告:
该值不能小于6
●对B3单元格控件设计进行事件编辑,添加编辑结束事件:
varD3value=arguments[1].getCellValue("D3");
if(this.getValue()!
=D3value){
FR.Msg.alert(FR.i18n.Alert,"该值应等于"+D3value);
returnfalse;
}
其中,D3value是自定义变量,用于获得D3单元格的值,if语句是用来判断该单元格输入后的值是否等于D3value,如果不是是则弹出警告:
该值应等于abc。
3.保存并预览
点击填报预览,在B2单元格中输入数字9,并按回车确定,则弹出警告,如图
在B3单元格中输入add,并按回车确定,也弹出校验警告,如图
扩展数据的数据校验
在填报模块中,有时需要对扩展的数据进行数据校验,例如:
已知商品的价格,数量,总额,在填报提交时需要对总额进行校验,看总额是不是等于价格*数量。
1.连接数据库FRDemo
2.设计模板
2.1新建报表
新建一张空白报表,添加数据集ds1:
SELECTorders.orderid,amount,quantity,priceFROMorders,ordersdetailWHEREorders.orderid=ordersdetail.orderidANDorders.orderid<’10006’。
然后设计成一张如下格式的报表:
2.2定义报表填报属性,添加两个内置SQL,具体设置如图
●内置SQL1
●内置SQL2
2.3定义单元格填报属性
单元格分别定义如下填报属性
单元格
属性
B3
文本
C3
文本
D3
文本
E3
文本
2.4数据校验
打开报表|报表填报属性,选择数据校验,插入新的验证信息。
校验公式为
D3>=5&&D3<=100,表示D3单元格中的数据必须小于5并且小于100,否则数据校验时报错
3.保存并预览
点击设计器中的填报预览,并在BS界面点击数据校验,发现有一条数据不符合规范,报错,如图
批量修改单元格
在大批量数据填报时,有时可能需要将置数单元格整体偏移多行或多列,若手动进行修改将会很麻烦,FineReport提供了批量修改单元格的功能,可以对大批量数据进行处理。
1.打开报表
打开已有报表
2.调整报表布局
3.报表填报属性
打开报表|报表填报属性,如下图所示
我们发现,修改了样式后,所有填报的值对应的单元格存在偏差,应为A3、B3、C3、D3、E3、F3,此时一个一个的修改可能比较麻烦,我们可以利用批量修改单元格,具体操作如图
点击确定后,填报单元格统一进行了修改,如图
这样填报的值对应的单元格就通过批量修改单元格修改成功了!
填报保存值类型
在填报时控件类型为日期或者数字时,如果数据库Oracle中类型与填报控件中的类型不一致,填报时就无法插入数据,需要对填报控件进行处理才能插入。
下面对Oracle数据中数据类型为Date和Number类型数据进行填报介绍。
1.连接数据库Oracle10g
点击报表菜单栏服务器|自定义数据连接,添加数据库,名为Oracle10g,JDBC数据库选择Oracle,URL为:
jdbc:
oracle:
thin:
@192.168.100.169:
1521:
orcl10g,用户名为:
temp,密码为:
temp123,具体配置如下图
2.新建报表
新建一张空白的表格,添加数据ds1:
SELECT*FROMtemp.testdate
然后设计一张如下格式的报表
3.定义报表填报属性
自定义如下填报属性
4.自定义单元格填报属性
单元格分别定义如下填报属性
单元格
属性
A2
文本
B2
文本
C2
文本
D2
日期
E2
数字
其中D2单元格的控件需要处理,日期的返回值类型选择日期
5.保存并预览
点击设计器填报预览,如图
在生日单元格中修改数据,并提交
提交成功
对于电话填报,Oracle中的数据类型是Number时,当Oracle中的Number大小小于10位时,填报中能保存的数字位数为Number的大小,即Oracle中Number大小是多少,填报就能保持几位;当Oracle中的Number大小大于10时,填报数字控件只能保存10位数字。
填报流水号
在填报中,批量数据处理时为了方便,需要使用流水号来作为自增长型主键进行数据的更新。
在Oracle数据库中,提供了序列的功能,可以通过Oracle的序列及触发器,实现主键的自增长。
下面具体介绍自增长的实现。
1.连接数据库
点击报表菜单栏服务器|自定义数据连接,添加数据库oracle10g116,JDBC数据库选择Oracle,URL为:
jdbc:
oracle:
thin:
@192.168.100.116:
1521:
orcl10g,用户名为:
temp,密码为:
temp123,具体配置如下图
2.创建表,序列,触发器,插入数据
进入Oracle数据库的Sqlplus窗口,创建表,序列,触发器
●创建表:
createtablelist(idnumber,namevarchar2(50));
●创建序列:
createsequencelist_seq
minvalue1//最小值为1
maxvalue9999//最大值为9999
startwith1//以1为初始值
incrementby1//以1为增长间隔
cache20//缓存大小为20
order;
●创建触发器
createorreplacetriggerlist_tg
beforeinsertonlist//触发器依据的表
foreachrow//逐行触发
begin//触发器主体
selectlist_seq.nextvalinto:
new.idfromdual;
end;
●插入数据
insertintolistvalues(‘’,’aaa’);
insertintolistvalues(‘’,’bbb’);
●提交
commit;
3.模板设计
3.1新建模板
3.2表样设计
新建一张空白的表格,添加数据ds1:
SELECT*FROMtemp.list
然后设计一张如下格式的报表
3.3定义报表填报属性
自定义如下填报属性
3.4自定义单元格填报属性
单元格分别定义如下填报属性
单元格
属性
B1
文本
B2
文本
4.填报并预览
点击设计器填报预览,ID列实现了自增长
在NAME控件中填入cccc,并提交,显示填报成功
再次刷新,ID列自增长
填报自动匹配值
在填报中,有时需要在输入一个数据后,自动从数据库中获取对应的数值,自动匹配至
相应的单元格,这样就避免了填报时手动一个一个输入,该例子主要是通过写公式实现。
1.新建报表
2.报表设计
如下设计报表
单元格
公式
说明
B3
=range(1,10)
设置从上到下扩展,批量插入10条数据
D2
=if(len(C3)==0,"",sql("FRDemo","SELECTcustomernameFROMcustomerWHEREcustomerid="+C3,1,1)
查询表customer获得对应id的姓名
E2
=if(len(C3)==0,"",sql("FRDemo","SELECTcountryFROMcustomerWHEREcustomerid="+C3,1,1))
同上
F2
=if(len(C3)==0,"",sql("FRDemo","SELECTcityFROMcustomerWHEREcustomerid="+C3,1,1))
同上
G2
=if(len(C3)==0,"",sql("FRDemo","SELECTtelFROMcustomerWHEREcustomerid="+C3,1,1))
同上
3.控件设置
右击C3单元格|控件设置,控件类型选择下拉框,具体设置如下
D3至H3单元格控件类型设置为文本,如下图
4.填报属性设置
打开菜单报表|报表填报属性,如下图所示设置
5.将A2列宽设置为零,进行隐藏
6.保存模板,点击填报预览
在客户编号中选中相应的编号,后面的客户姓名,国家,城市,电话会自动匹配,如下图所示,只需要输入金额数值即可入库
选择客户编号后点击其他地方,后面的信息就会自动匹配进来。
7.批量匹配数据
同时若我们将需要的客户编号写入excel文件中,导入到页面中,就可以批量的匹配数据了
●在报表|报表Web属性|填报页面设置中,给默认的工具栏加上excel导入按钮。
●新建一个excel,在C3至C12中输入1至10
●点击填报预览,导入该excel,导入后,即会批量进行置数。
文本域换行
在填报中,有时需要输入大量的文本,这时就需要用到文本域这个控件,但在用这个控件时,换行不能直接按Enter键,必须按Ctrl+Enter,才能达到换行的效果。
1.新建报表
新建一张空白的表格,添加数据ds1:
SELECT*FROMemployeeWHEREempid=‘1001‘
然后设计一张如下格式的报表
2.定义报表填报属性
定义如下填报属性
3.定义单元格填报属性
单元格分别定义如下填报属性:
单元格
属性
C2
文本
C4
文本
E2
文本域
4.保存并填报
点击设计器中的填报预览
在员工地址文本域中输入地址,换行时用Ctri+Enter键,不能用Enter键(Enter键使用后表示清空)
下拉框的快速查询
在填报控件或者参数控件的下拉框类型控件中,下拉框有快速查询的功能,即输入部分值之后自动将符合条件的值显示出来。
1.连接数据库FRDemo
2.设计模板
2.1新建模板
2.2表样设计,具体样式如下图所示
2.3定义报表填报属性,具体设置如图
2.4定义单元格填报属性
单元格分别定义如下填报属性
单元格
属性
A2
文本
B2
文本
C2
文本
D2
下拉框
E2
文本
D2单元格控件设置的类型是下拉框,具体如图
3.保存并预览
点击设计器的填报预览,如下图所示
在城市的下拉框中,输入W会出来所有以W开头的城市名,这就是下拉框的快速查询功能,预览如图所示
行式报表
在填报时,有时行式填报希望能从数据库取出来的行不能编辑,只能编辑通过添加行产生新的行,FR报表软件可以通过条件属性来设置
1.新建报表
新建一张空白的表格,添加数据ds1:
SELECT*FROMemployee
然后设计一张如下格式的报表
2.定义报表填报属性
自定义如下填报属性
3.自定义单元格填报属性
单元格分别定义如下填报属性
单元格
属性
B2
文本
C2
文本
D2
文本
E2
文本
F2
文本
A2的填报属性可以用条件属性设置
4.条件属性设置
右击A2单元格,选择条件属性,进入条件属性窗口,添加条件属性,属性选择空间,并选中使用控件,编辑,控件类型选择文本,并添加公式(row()-1)>rowcount(“ds2”)
该公式表示,如果当前行号大于数据集中的总行数,则行号控件可用,具体如图
5.填报并预览
点击设计器中的填报预览,如下图,从数据库中取出来的行的行号是不可编辑的
在BS界面上选中最后一行,并在上方的工具栏中点击增加记录,新出现一行,该行的行号可编辑,如图
用户自定义填报
在填报时,个别用户为了需求,需要自定义填报。
FR报表在报表web属性中的填报页面设置中可以自定义填报功能
1.连接数据库FRDemo
2.设计报表
2.1新建报表
2.2表样设计
添加一个名为ds1的数据库查询:
SELECT*FROMcustomer,表样设计,如图
2.3自定义报表填报属性
2.4定义单元格填报属性
单元格
属性
A1
文本
B1
文本
2.5自定义报表Web属性
点击菜单栏报表|报表Web属性,进入报表Web属性窗口,在填报页面设置栏目中,将左边需要显示的按钮拖到中间的窗口中,并在右边窗口添加加载结束事件,实现自定义的填报功能,如图所示
在加载结束事件窗口中添加事件的JS代码
具体js代码如下
var$toolbar=$('.FR-ToolBar-disabled>table>tbody>tr');
varoption={
//"icon":
"css:
x-emb-email",
"listeners":
[{"once":
false,
"action":
function(e){
varxml=_g('${SessionID}').generateReportXML();
$.ajax({
url:
"test.jsp",
type:
'POST',
data:
{op:
'test1',sessionID:
'${SessionID}',
reportXML:
xml},
complete:
function(res,status){
FR.showDialog("Relation",300,400,res.response