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


1、数据库表(BI_REPORTTASKSORT)设计html


字段名数据库

类型数据库设计

可空函数

默认值ui

PK_REPORTTASKSORT spa

VARCHAR2(36) 设计

  3d

 

NAME htm

VARCHAR2(80) blog

 

 

NOTE

VARCHAR2(1024)

  


主键名

字段

PK_BI_REPORTTASKSORT

PK_REPORTTASKSORT

 

 2、问题的提出

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

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

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

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

 

 

3、问题解决

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

(1)在FineReport模板设计器中,将须要惟一编号的字段拖入到报表中,例如B4单元格(注:若是不须要显示惟一编号,则能够将该列隐藏)

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

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

 

其中:

第3行:表头

第4列:表列(字段)

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

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

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

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

 

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

 

 

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

 

 

4、其余

经验1:

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