快逸报表更新属性“是否更新未修改行”功能介绍
在使用快逸做报表的时候,遇到一个关于填报表更新数据的问题。最终找到的原因竟然是不太注意的更新列表中”是否更新为修改行”的属性。
首先看一下,快逸填报表”是否更改为修改行”属性的位置,如下图:
默认为勾选状态,即当数据的某些行在数据没发生改变时也会在数据库端执行一次update语句。
遇到的问题描述:
报表最终展现数据结果如下
注意本例中的关键点:一个问题的ID可能同时出现在多个人的节点之下,即多人负责处理一个问题。
当在如图所示的结果页面上,更新了问题ID为1111的优先级的时候,点击保存,保存成功,但是返回到数据展现页面数据还是没有更新至自己预想的结果(由一级修改为二级)。
下面就以一个完整的例子来说明本例中出现的问题及原因。
第一步:数据准备
本例是使用mysql数据库,建表语句如下:
—-负责问题列表
CREATE TABLE `questions` (
`questionID` int(4) NOT NULL COMMENT ‘问题ID’,
`principal` varchar(10) default NULL COMMENT ‘负责人’,
`questionsTitle` varchar(40) default NULL COMMENT ‘问题标题’,
`questionPrio` int(4) default NULL COMMENT ‘问题优先级’
)
初始化负责问题列表数据:
insert into questions values(1111,’张三’,’快逸报表填报时数据更新问题’,2);
insert into questions values(1111,’李四’,’快逸报表填报时数据更新问题’,2);
insert into questions values(1111,’小王’,’快逸报表填报时数据更新问题’,2);
insert into questions values(2222,’张三’,’快逸报表数据导出问题’,3);
insert into questions values(3333,’李四’,’快逸报表打印问题’,1);
—-优先级表
CREATE TABLE `quesprio` (
`prioID` int(4) NOT NULL COMMENT ‘优先级ID’,
`prioName` varchar(30) default NULL COMMENT ‘优先级中文名称’,
PRIMARY KEY (`prioID`)
)
初始化优先级表
insert into quesprio values(1,’一级’);
insert into quesprio values(2,’二级’);
insert into quesprio values(3,’三级’);
第二步:快逸填报表复杂报表设计" target="_blank" class="quieeLink1">设计
1、数据集sql语句如下:
SELECT questions.questionID,questions.questionsTitle,questions.principal,questions.questionPrio,quesprio.prioName FROM questions,quesprio WHERE questions.questionPrio = quesprio.prioID
2、报表设计如下
其中,各单元格表达式如下
A2:ds1.group(principal,false) —-按照负责人分组
B3:ds1.select(questionID,false,,questionID)
C3:ds1.questionsTitle
D3:ds1.prioName
B3的主格为A2,A3的主格为B3,D3格为可写单元格
3、设置更新属性,如下所示
第三步:发布报表并修改优先级保存测试
发布后,报表在浏览器看到的效果如下
1、 在更新属性设置为勾选”是否修改未更改行”属性下,更改李四问题ID为”1111″的问题为三级,保存后的效果如下
原因就是,在修改李四下问题’1111′的优先级后,尽管执行了update语句,并且也把其优先级修改成了”三级”,但是,由于勾选了”是否修改未修改行”,因此在小王、张三下又对数据库做了一次update操作,又将’1111′的优先级修改成了”二级”,这也能说明如果我们直接修改张三下’1111′的优先级为”三级”,肯定是成功的。
2、在更新属性内不勾选”是否修改未更改行”属性,如下
修改李四问题ID为”1111″的问题为三级,保存后的效果如下
由本例可看出,在快逸填报表中,如果有类似例子中展现数据方式的时候,一定要注意某些属性的设置,本例中”是否更新未修改行”属性,看似很不起眼,但是在报表设计和应用中很重要。