-
luojr 初学数据Lv2
发表于2022-4-2 15:46
楼主
本帖最后由 luojr 于 2022-4-2 15:52 编辑
一 需求场景
在实际业务场景中,设置回填表格时经常需要新增行时,自动生成一串不重复的字符,把该字段设置为回填表的主键,比如报销单的单号、请假条的单号等一般都需要系统自动生成。我们通常是使用GUID()函数自动生成主键,详细操作可参考https://bbs.esensoft.com/thread-135468-1-1.html ,但是GUID()函数是生成随机不重复字符串。 我们是否可以使用更有意义又不容易重复的字符串来当主键呢?答案是可以的,就是我们今天介绍的获取到插入行时的时间戳来当主键的方法,方法讲解如下:
二 表样设计
步骤1:首先需要了解获取到当前时间戳的函数,我们可以使用函数datetostr()将时间转换成时分秒的格式,
当使用today()进行转换时,转换函数需要这样设置datetostr(today(),'yyyy-mm-dd hh:nn:ss')
若使用数据库时间戳字段时,则转换函数需要这样设置datetostr(today(),'yyyy-mm-dd hh:mi:ss') 参考https://bbs.esensoft.com/thread-133395-1-1.html
步骤2:考虑到目前表样里可能已经有一列时间戳字段,那么我们需要增加一列辅助列,
辅助列的表达式设置为 if(len(self.leftcell)>0,self.leftcell.txt,DATETOSTR(today(),"yyyy-mm-dd hh:nn:ss"))
数据类型选择字符型
表样设计如图:
步骤3:将表格启用回填,增加一行字段映射,映射刚增加的辅助列,对应上新的主题表字段,注意:该行需要在主键栏中选中是,设置为主键。当然还要在其他设置中设置插入行,否则无法添加行。
用来存放时间戳的主题表字段的 数据类型也在系统中设置为时间戳。
具体设置截图如下:
三 操作演示
根据上述步骤设置好后,我们计算报表,发现如果之前有时间戳数据,则自动引用该数据,如果没有,则获取到当前时间。
添加一行时就可以发现,我们设置的辅助列中自动生成了数据,也就是我们之前在辅助列中使用函数获取到的时间,时间精确到了秒,把该数据对应的字段设置为主键,大概率不会出现主键重复问题。
附上本地表样 仅供参考~
分析表_20220402_154652.zip
(3.76 KB, 下载次数: )
一 需求场景
在实际业务场景中,设置回填表格时经常需要新增行时,自动生成一串不重复的字符,把该字段设置为回填表的主键,比如报销单的单号、请假条的单号等一般都需要系统自动生成。我们通常是使用GUID()函数自动生成主键,详细操作可参考https://bbs.esensoft.com/thread-135468-1-1.html ,但是GUID()函数是生成随机不重复字符串。 我们是否可以使用更有意义又不容易重复的字符串来当主键呢?答案是可以的,就是我们今天介绍的获取到插入行时的时间戳来当主键的方法,方法讲解如下:
二 表样设计
步骤1:首先需要了解获取到当前时间戳的函数,我们可以使用函数datetostr()将时间转换成时分秒的格式,
当使用today()进行转换时,转换函数需要这样设置datetostr(today(),'yyyy-mm-dd hh:nn:ss')
若使用数据库时间戳字段时,则转换函数需要这样设置datetostr(today(),'yyyy-mm-dd hh:mi:ss') 参考https://bbs.esensoft.com/thread-133395-1-1.html
步骤2:考虑到目前表样里可能已经有一列时间戳字段,那么我们需要增加一列辅助列,
辅助列的表达式设置为 if(len(self.leftcell)>0,self.leftcell.txt,DATETOSTR(today(),"yyyy-mm-dd hh:nn:ss"))
数据类型选择字符型
表样设计如图:
步骤3:将表格启用回填,增加一行字段映射,映射刚增加的辅助列,对应上新的主题表字段,注意:该行需要在主键栏中选中是,设置为主键。当然还要在其他设置中设置插入行,否则无法添加行。
用来存放时间戳的主题表字段的 数据类型也在系统中设置为时间戳。
具体设置截图如下:
三 操作演示
根据上述步骤设置好后,我们计算报表,发现如果之前有时间戳数据,则自动引用该数据,如果没有,则获取到当前时间。
添加一行时就可以发现,我们设置的辅助列中自动生成了数据,也就是我们之前在辅助列中使用函数获取到的时间,时间精确到了秒,把该数据对应的字段设置为主键,大概率不会出现主键重复问题。
附上本地表样 仅供参考~