帆软报表UUID主键字段绑定和值更新(使用UUID实现唯一编号)


一、数据库表(BI_REPORTTASKSORT)设计


字段名

类型

可空

默认值

PK_REPORTTASKSORT

VARCHAR2(36)

 

 

NAME

VARCHAR2(80)

 

 

NOTE

VARCHAR2(1024)

  


主键名

字段

PK_BI_REPORTTASKSORT

PK_REPORTTASKSORT

 

 二、问题的提出

在帆软填报报表中,PK_REPORTTASKSORT 字段要求唯一(例如主键)。而在填报时,使用UUID()函数可以实现唯一编号。按照官方帮助文档 《使用UUID实现唯一编号》(网址:http://help.finereport.com/doc-view-612.html) 中的介绍,有下列两种方式实现唯一编号:

方式(1)填报属性中使用UUID()函数:将需要唯一编号的字段值直接设置为公式“=UUID()”

方式(2)单元格中使用UUID()函数:在指定的单元格中输入公式“=UUID()”,然后在报表填报属性中将需要唯一编号的字段值绑定到该单元格。

上述方案可以实现唯一编号,但是存在的问题是:在每次提交数据时都可能会虚增记录行(特别是在填报列表中,此问题会更突出),原因在于UUID()函数值在每次提交时都会自动计算出新值。

 

 

三、问题解决

问题解决的方式与官方帮助文档类似,都由上述两种两各方式实现,但是额外需要做一些设置:

(1)在FineReport模板设计器中,将需要唯一编号的字段拖入到报表中,例如B4单元格(注:如果不需要显示唯一编号,则可以将该列隐藏)

(2)修正公式,使用 if() 函数做一个判断,例 “=if(isnull(b4),uuid(),b4)”(注:可根据实际需要修改此公式)

下面以 PK_REPORTTASKSORT 字段绑定为例,报表设计如下:

 帆软报表UUID主键字段绑定和值更新(使用UUID实现唯一编号)_第1张图片

其中:

第3行:表头

第4列:表列(字段)

B4单元格:对应字段 PK_REPORTTASKSORT ,不设置控件

C4单元格:对应字段 NAME ,文本控件

D4单元格:对应字段 NOTE ,文本控件

E4单元格:公式“=if(isnull(b4),uuid(),b4)”,不设置控件,同时注意需要在“其他”属性中将“插入行策略”调整为“原值”(注:如果通过在填报属性中直接指定此公式,则不需要设置此单元格;只有通过单元格绑定到字段的方式才需要设置此单元格)

 

方式(1)在填报属性中直接使用函数实现:将 PK_REPORTTASKSORT 列的值设置为公式“=if(isnull(b4),uuid(),b4)”

 帆软报表UUID主键字段绑定和值更新(使用UUID实现唯一编号)_第2张图片

 

 方式(2)单元格中绑定到字段:(请注意在上面示例中,E4单元格中已经设置了对应的公式)

 帆软报表UUID主键字段绑定和值更新(使用UUID实现唯一编号)_第3张图片

 

四、其他

经验1:

在报表填报属性的提交列表中包含的字段,如果没有绑定到单元格,提交时会以默认值(一般为NULL)提交,且会覆盖掉数据库中的对应数据。如果没有包含的字段,在提交时,新增数据行时会使用数据库设计时指定的默认值,原有的数据则不会被更新。

 

你可能感兴趣的:(帆软报表UUID主键字段绑定和值更新(使用UUID实现唯一编号))