帆软填报报表实现日期自动生成总结 |
您所在的位置:网站首页 › 新做的表格怎么能自动生成日期 › 帆软填报报表实现日期自动生成总结 |
帆软填报报表实现日期自动生成总结
文章目录
帆软填报报表实现日期自动生成总结业务需求思考过程使用sysdate使用触发器
V1 版本创建时间设置更新时间设置填报报表设置小bug修复
V2版本
业务需求
主管让我使用帆软填报报表在实现任务填报的同时,能够能有几列来记录创建和修改的一些日期,如下图所示。 *如果看解决方案的话,直接跳到最后实现就行了,不需要看我的解决思路。 思考过程 使用sysdate刚开始我觉得创建时间和更新时间的自动生成十分容易,只需要使用Oracle数据库的一个特性,在建表的时候给日期一个 sysdate 的默认值就可以实现,如下图所示。 在数据库使用insert语句正常插入的时候可以正常使用,生成对应的日期,但是使用填报报表填写数据的时候,插入数据字段的时候两个默认值为sysdate的字段都没有自动生成,于是我就只能采用其他的方法。 使用触发器Oracle自动生成日期的方法有两种,sysdate和触发器,于是我就写了一个触发器来实现日期的自动生成,在数据库层面使用触发器来给日期字段赋值sysdate,代码如下所示。 CREATE OR REPLACE trigger XXXX_TR BEFORE INSERT on XXXX for each row begin :new.CREATION_DATE := sysdate; :new.LAST_UPDATE_DATE := sysdate; end;使用触发器后,报表填入数据的时候能够实现数据库数据的正常插入了,那只要刷新一下就可以回显到报表上了,我表示非常开心,然后询问了一下导师如何实现更新日期的操作😁 导师指出了我索引命名的不规范,并请教了一下主管如何正确的命名,结果主管否定了我使用触发器生成日期的方法,可能是由于触发器不好维护的方法,于是我又只能另寻其他方法来解决,日期自动生成的问题。 V1 版本 创建时间设置创建时间的显示值设置 函数解释: 如果没有创建日期,则完成日期的自动生成,如果已经有日期,则不改变 创建时间单元格设置插入行策略 更新时间的设置和创建时间差不多,先对显示值进行创建 然后同样设置插入行策略 填报报表属性设置数据未修改不更新 添加一个填报成功后的JS脚本,让报表提交后自动刷新 //在 填报成功 后自动刷新 location.reload(); 小bug修复使用以上方法基本可以实现日期自动生成和自动更新,但由于使用的是插入行策略,而帆软报表在数据库没有数据的时候,会给你一个默认的空白白行,这条数据不是你手动点击插入数据进行添加的,所以不能触发插入行策略,解决方法也很简单,只需要手动删除数据删除掉那行,在进行一次手动插入数据,新插入的行也可以自动生成日期了,但这对用户来说不是特别的友好,于是我使用代码的方式进行了修改,如果有更好的解决方式,希望能在下面评论指点指点我。 首先,我用JS判断数据库是否拥有数据,但由于公司服务器端设置了脚本限制,我无法使用脚本执行SQL获取数据,于是我采用了其他的方法。设置一个单元格来获取主键的值,然后通过设置单元格的条件属性进行隐藏来保证页面的美观,最后在通过获取单元格的值来判断是否为空数据库,如果为空就进行赋值。单元格设置如下。 设置公式为 1=1 保证能够实现,然后通过设置行高为 0 来进行单元格的隐藏 接着就通过 JS 获取单元格的值,判断是否为第一行,然后进行赋值,这里JS没有快速获得日期的函数,于是我就使用了一个帆软的模板函数来设置日期,然后通过JS参数进行调用。 function() { //获取单元格的值 var v1 = _g().getCellValue(0, 0, 2); //判断,若为空,代表没有值,使用js对单元格进行赋值 if (v1 === '') { _g().setCellValue("S2", "${date}"); _g().setCellValue("T2", "${date}"); } }这样就可以实现完整的自动生成和更新日期了 V2版本上诉方法通过新插入行的方式进行判断,而填报默认第一行的新插入行为空,所以需要写多余的JS去判断是否为第一行,如果是第一行就自动生成日期,这大大增加代码的维护难度,所以尽量少的使用JS变成了我们需要做的事情,于是在经过几个版本的迭代后,我总结了V2版本,实现方法如以下所示。 创建人,更新人,创建时间,更新时间四个字段都添加条件属性,使用公式LEN($$$) = 0判断是否为空,为空就自动给创建人附上新值,创建时间和更新时间都使用公式赋值NOW()创建人和更新人用公司赋值$fine_username 按照以上的步骤就能实现创建记录的时候,自动生成相关信息了,接下来是让创建信息进行自动修改,打开模板->报表填报属性 勾选未修改不更新(如果有用到公式最好写在单元格内,不要在报表填报属性内写,否则就不能实现未修改不更新了) 在两个数据列内维护当前用户和当前时间,一样用now()和$fine_username(不要和数据列在同一行,最好在标题行维护) 然后将提交进数据库的时间和更新人字段绑定对应时间和字段所在的单元格即可。
选择模板Web属性后->填报页面设置于,然后选择为该模板单独设置 在事件设置添加一个填报成功的JS函数,JS代码如下所示。 location.reload(); |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |