如何通过脚本实现数据动态更新

简介: 在数据填报的场景中,常常会遇到根据条件动态更新数据的需求,例如:在条件 A 下将页面所有数据插入到数据库表中,而在条件 B 下则将页面中做了修改的数据更新到数据库表中。遇到这种需求,脑海中的第一个想法就是:存储过程更新、或者 java 代码更新。
在数据填报的场景中,常常会遇到根据条件动态更新数据的需求,例如:在条件 A 下将页面所有数据插入到数据库表中,而在条件 B 下则将页面中做了修改的数据更新到数据库表中。 遇到这种需求,脑海中的第一个想法就是:存储过程更新、或者 java 代码更新。不过,这两种实现方式的工作量和后期维护却实在让人头疼不已。那么,还有其他什么实现方式吗?而且最好是能和报表完美整合到一起的那种…. 这样的美事儿,还真有!润乾报表提供了脚本模式的填报表制作方式,通过脚本,可以实现你各种天马行空想法。具体怎么操作呢?且听我慢慢道来。 下面我们以动态更新 demo 库中雇员表数据为例,当 type 参数的值为 1 时,将页面中 employee 表的所有数据更新入库;否则只将做了修改的 employee 记录更新入库。操作步骤如下: 第一步  制作行式填报 我们先使用行式填报制作向导制作一个简单的行式填报表,如下图所示: 【小技巧】 如果对采集规则不熟悉,那么可以对第二行每个单元格设置字段名称:对象. 字段 第二步  定义参数 在填报–参数配置页面中新增需要的参数,本文需要定义 type 参数作为数据更新处理方式判断依据,如下图所示: 第三步  修改脚本,实现动态更新数据处理 来源脚本为默认生成的脚本: 其中, B2 的语句:>EMPLOYEE=A1.query(“SELECT EID,NAME,SURNAME,BIRTHDAY,HIREDATE from EMPLOYEE”)   从 demo 库中查询 employee 表的数据,并将结果写到 employee 对象中 去向脚本修改为如下图所示的内容: 动态更新数据时,需要用到 if 函数来动态判断,这里着重讲解下 if 的相关配置: A2:if type==1  // 判断是否满足 type 参数值是 1 的条件 B3:>A1.update@ik(EMPLOYEE, 雇员, 雇员 ID:EID, 姓氏:NAME, 名字:SURNAME, 出生日期:BIRTHDAY, 雇用日期:HIREDATE ; 雇员 ID)  // 当满足 if 条件时,将 EMPLOYEE 对象中的数据全部插入到雇员表中,update@i 表示只执行插入更新操作 A4:else  // 不满足条件,type 参数值不是 1 B5:>A1.update@k(EMPLOYEE:EMPLOYEE_old, 雇员, 雇员 ID:EID, 姓氏:NAME, 名字:SURNAME, 出生日期:BIRTHDAY, 雇用日期:HIREDATE; 雇员 ID) // 当不满足 if 条件时,将页面中 EMPLOYEE 对象修改了的数据更新到数据库中,当 update 后无其他选项时,表示执行智能更新 【小技巧】 在不确定如何处理数据或者检查计算结果时,我们可以使用 debug()或者 output() 函数输出需要检查的信息,通过观察控制台结果来调试和判断。 【延伸】 类似场景: 1)type 参数是否为 1 只是我们假设的一个条件,实际的条件可能更加灵活和复杂。例如动态更新数据的判断依据可能是某个结果集是否为空,我们就可以使用 T.len() 获取结果集的长度,当长度为 0 时,表示结果集为空。 2)假设示例中的需求修改为:当 type 的值不是 1 时,将雇员表和 EMPLOYEE 对象的数据作比较,然后将差异数据更新入库。而雇员表数据在 guyuan 对象中,那么此时可以将 update 的写法改为: A1.update@k(EMPLOYEE:guyuan, 雇员, 雇员 ID:EID, 姓氏:NAME, 名字:SURNAME, 出生日期:BIRTHDAY, 雇用日期:HIREDATE; 雇员 ID) 至此,我们就实现了在脚本模式下制作填报表,进而动态更新数据的效果。这里需要重点理解的是 if 和 update 函数的使用,不过显然也是比较简单的哦 ~ 当我们遇到需要用脚本进行数据处理的情况,不要害怕,盘它就对了,盘的多了,你会发现原来脚本真的是很有意思的一种处理方式。 更多填报表制作技巧在这里:http://c.raqsoft.com.cn/tag/Report?t= 填报技巧
相关文章
|
8月前
uniapp 全局数据(globalData)的设置,获取,更改
uniapp 全局数据(globalData)的设置,获取,更改
762 0
|
9月前
漏刻有时基础环境状态4个指标选项的更改说明
漏刻有时基础环境状态4个指标选项的更改说明
25 0
|
10月前
|
存储 Kubernetes Linux
k8s日志自动收集脚本
k8s日志自动收集脚本
144 0
|
数据安全/隐私保护
抽离配置,几分钟快速创建和修改表单
抽离配置,几分钟快速创建和修改表单
143 0
|
JavaScript BI 数据库
FineReport 使用JS实现决策报表对数据库更新(自动更新,不用点击按钮)
数据库中部分表数据按照一段时间需要更新(如:每个月更新一次),这样数据库中的数据相关数据的部分值是相同的,需要让每一个月的月份更新后,数据库中其他表对应的关系也自动更新,这里介绍相关操作方法。
842 0
FineReport 使用JS实现决策报表对数据库更新(自动更新,不用点击按钮)
|
JavaScript
油猴脚本,批量采集页面数据复制,数据过长 JS弹出新页面 自定义html代码
油猴脚本,批量采集页面数据复制,数据过长 JS弹出新页面 自定义html代码
466 0
|
Web App开发 Linux iOS开发
locust1.*版本主要变化和脚本模板的更新对比
locust1.*版本主要变化和脚本模板的更新对比
locust1.*版本主要变化和脚本模板的更新对比
|
存储 Java Spring
AutoConfiguration加载元数据和自动配置组件
@EnableAutoConfiguration 加载元数据配置 加载元数据配置主要是为后续操作提供数据支持。 我们先来看加载相关源代码的具体实现,该功能的代码依旧日在 selectlmpots 方法内。 @Override publicString[] selectImports (AnnotationMetadata annotationMetadata) { AutoConfigurat ionMetadata autoConf igurationMetadata = AutoConfigurationMetadataLoader. loadMetadata(this. bea
163 0
AutoConfiguration加载元数据和自动配置组件
|
BI 数据库 数据处理
如何通过脚本实现数据动态更新
填报,填报技巧,数据动态更新,脚本
1201 0