填报报表自动生成ID,获取用户ID,多人填报防止内容覆盖

一、使用UUID自动生成主键

填报报表填报时没有特定的字段作为主键,希望能自动生成一串随机字符来作为主键,且不能重复。

FineReport 设计器内置了 UUID 函数,设置填报属性时,主键的值可以使用该函数,产生唯一标识码,实现编号的唯一性。

设置单元格的ID——当值为0时,=UUID()  

1.if(len(A2)=0,UUID(32),A2)

2.条件属性设置

页面与入库id不一致

这是由于公式编辑界面默认勾选了「填报/分析时,保留公式用于计算」,则填报提交时公式会二次计算,从而导致入库时又重新生成了 id 。

多个内置 SQL 中使用 UUID

如果该填报表是多源填报类型,比如员工基础信息存在表 1 中,员工部门信息存在表 2 中,表 1 与表 2 有相同的字段「员工 ID」,填报时这两张表都要保存「员工 ID」。

此时必须在单元格中使用 UUID() 生成员工编号,报表填报属性设置两个「内置 SQL 提交」,分别绑定表 1 和表 2 ,表 1 和表 2 的「员工 ID」字段绑定同一个单元格。

若使用在报表填报属性中每张报表都使用 UUID() 函数,产生的序列号是不一样的,此时会导致员工 ID 不一致的情况。

二、获取登陆用户ID

用户认证 后会将报表三个固定的默认参数$fine_username、$fine_role、$fine_position保存在 Session 中。

$fine_username、$fine_role、$fine_position 是 FineReport 默认的参数,所以调用时大小写必须保持一致。

获取登陆用户ID:

1.数据集P_FINE_USER :SELECT USERNAME,REALNAME FROM FINE_USER 

2.条件属性设置:VALUE("P_FINE_USER",2,1,$fine_username,0)

 

 三、在多人同时填报一个模板的时候,可能会出现后填报的内容覆盖掉先填报的内容的问题

会出现覆盖问题的原因,是因为主键没有根据用户区分,所以不同人提交的时候,可能出现主键一致的现象。根据提交逻辑,主键一致会执行更新操作,这就造成了上述问题。

解决方案就是增加一个可以区分用户的主键,比如用户名,用户ID等。

 

posted @ 2022-11-21 19:41  bellin124  阅读(725)  评论(0编辑  收藏  举报