填报表更新属性问题
报表工具提供的可填报报表可以使得报表同数据库进行简单而快捷的交互,我们可以轻松地将要入库的数据录入到报表中,再提交到数据库。
当然,我们再使用的过程中,总会遇到这样那样的问题,今天我们就来看一下填报表更新属性的一个问题。
问题描述
我们想要在一张填报表中对一个表进行两次更新操作,即要将两个人的信息插入到数据库中对应的表中,这两个人的角色不同,所以在数据库中应该作为两条记录存在。
但是当我们定义完两个类似的更新属性(如下图)后,
数据库中出现了一个人,两条记录的情况,即一个人拥有两种角色,这显然是不正确的。
问题分析
润乾报表引擎在填报表提交的时候会进行一个判断,如果数据库中对应的物理表中没有与更新属性中定义的主键相同的记录,则进行insert操作;否则进行update操作。
但是一张填报表提交的时候是作为一个整体进行的,也就是说,后面的更新操作不会检查前面更新操作的结果。如本例中的update6操作就不会检查update5执行后的结果,虽然我们勾选了前两个字段为主键。所以进行了两次insert操作,这就是为什么数据库中会出现了更新属性中主键重复的记录。
请注意,数据库中对应的该表是没有主键的,否则在进行第二次insert操作的时候就会出错,导致更新失败。
问题解决
既然我们知道了问题出现的原因,解决起来就比较容易了。首先,我们要明确我们的目的:对于同一个人,一个taskID中只能有一个角色。
所以我们再更新属性中进行了这样一个判断
红色方框内容为:=if(if(@supportManager==’yes’,G1,if(F1==null,E1,F1))==D1,0,2)
该语句的意思是当人员重复的时候,将该人员的角色设为一个弃用的值,这就解决了一个task中出现一个人两种角色的记录。
当然,我们也可以通过自定义更新类来解决这个问题,只是如果我们分析好问题的原因,使用变通的方法一样可以解决。