填报表之数据留痕

简介: 填报表之数据留痕,来取无关

随着信息时代的快速发展,报表工具的应用也越来越普遍,其中难免会涉及到很多填报需求。
比如:
数据采集录入填报时如何只更新当前修改行、用报表工具实现树状层级结构的填报表、web 操作数据留痕等等,今天我们主要来介绍一下 web 操作数据留痕,简单说就是填报表从 A 表取数,将 web 端修改记录更新到 B 表保存操作记录……如果您还不明白,其实就相当于记录您某个账号的登录时间地点。
下面我们具体看一下。
工具:润乾报表 oracle11g
数据库表结构(SQL 语句):
A表:create table GDFW_RB_FHQK_MX(
ID NUMBER,
JCSJ DATE not null,
TJRQ DATE,
TJSJ VARCHAR2(12),
QKJFH NUMBER(12,2)
)
B表:create table GDFW_RB_FHQK_MX_HISTORY(
ID NUMBER,
JCSJ DATE not null,
TJRQ DATE,
TJSJ VARCHAR2(12),
QKJFH NUMBER(12,2),
CREATER NVARCHAR2(20) default ‘SYSTEM’,
CREATETIME DATE default SYSDATE,
XGYY NVARCHAR2(200) default ‘暂未填写’
)
当前报表设计如下,首先实现基本的行式填报操作:
1

数据来源
2

数据去向
3

至此,填报表的基本功能已经实现, 下面我们继续以这个报表为例看一下怎么实现web 操作数据留痕。

保证数据来源、数据去向、报表中涉及到的字段个数名称一致。
在数据去向执行 update 前对要插入到 B 表的数据做处理。方式如下:

通过对比新旧对象的记录来实现,以获取到 web 端操作的记录,因为行式填报表在 web 页面上支持做增、删、改三种操作,故不能保证新旧对象的记录条数一致,所以这里需要通过双层循环来获取新旧对象的差集(即 web 页面操作的记录集)。
注:旧对象保存的是修改前的数据,新对象保存的是修改后的数据。

具体的数据处理过程:

数据来源脚本增加 XGYY,并且以对象(如对象:GDFW_RB_F HQK_MX)的方式返回新增后的结果集。如下:
4
数据去向脚本修改如下:
5

其中:
第 2 行、第 8 行以及第 10 行的 debug 部分,是为了观察各部操作前后数据的变化,有助于排查问题,最终可以视实际情况删除或注释。
3-7 行 使用双层 for 循环对比 GDFW_RB_FHQK_MX 与 GDFW_RB_FHQK_MX_old 对象记录并从 GDFW_RB_FHQK_MX 中删除两者相同的记录,从而整理出 web 端操作的行;
for 循环原理:
for 旧对象
if(新对象主键对比旧对象主键)
for 新对象
if (旧对象记录 == 新对象记录)从新对象里删除
else 将 web 页面删除的记录插入新对象
注:if…else…作用是对比主键保证 web 页面上删除的记录也被记录下来。
最后新对象中保留的记录既是 web 端操作的行。
A9 单元格 使用 db.update@i() 函数实现更新入库, 其中 @i 选项代表的是仅执行插入操作。
通过上面的修改后,我们就可以实现 web 操作数据留痕了。
效果如下
web 操作前,B 表数据记录。
6

在 web 端访问报表,修改原有数据,并增加行(动图)
_

web 操作后,在数据库端查询数据,检查一下,我们会发现仅把 web 端操作的数据插入到数据库中了,Bingo! 没想到吧,就这么轻松搞定了。
7

最后,课外知识扩展

怎样在不改变数据库表结构的基础上,增加字段。

使用集算器函数 P.derive(xi :Fi,…),给序表 / 排列 P 增加 Fi,…字段,形成 "P 中原有的字段, Fi,…" 结构的序表,然后对 P 的每条记录遍历,给每个 Fi 赋值为 xi。简单说就是使用此函数可以复制原序表也可以在原序表的基础上追加字段。

数据更新时,如何控制仅执行插入操作。

灵活运用 db_.update_(A:A’,tbl,Fi:xi,…;P,…) 函数的选项。
@i 对比主键只生成 INSERT。无 A’ 时不再对比,直接用 A 插入到数据库。
@u 对比主键只生成 UPDATE。无 A’ 时不再对比,直接用 A 更新到数据库。
@k 完成后不提交事务,缺省将提交。
等等,具体参考集算器函数参考 doc.raqsoft.com.cn/esproc/func/update.html

填报更新原理:

目前,行式填报表在提交的时会自动对比修改前和修改后的数据:首先对比主键,根据主键是否有新增或缺失确定数据的增删操作;然后再针对前后都有的记录对比每条记录值是否有不同,如有不同则执行 update 操作。
所以,建议数据处理(数据来源、数据去向)中的字段名称与报表中的字段名称个数要保持一致,不然填报更新时就会因新旧对象字段不匹配导致更新失败。
另外细心的你也一定找到了更新前后的数据是分开编辑的的好处了吧–灵活、自由、不受约束!
实例报表

目录
相关文章
|
Cloud Native
【刷题日记】1672. 最富有客户的资产总量
本次刷题日记的第 32 篇,力扣题为:1672. 最富有客户的资产总量素 ,简单
|
6月前
|
存储
leetcode-729:我的日程安排表 I
leetcode-729:我的日程安排表 I
40 0
|
6月前
|
运维 安全 容灾
亿格名片 | 小红书:「红线数据不外泄」准则下的数据安全“种草”攻略
小红书的安全是紧贴业务类型与发展阶段演进开展的,从内容安全再到技术安全、网络安全等方面不断迈进。区别于传统围绕防止黑客入侵的安全建设思路,保障数据安全以及管理访问控制是小红书高度关注的要点,防止红线数据外泄是终态目标。当下,随着数据安全等政策法规的落地,数据安全成了备受关注的领域,在实现我们防护红线数据不外泄的核心目标,且保障员工工作效率及体验,我们选择性地舍去了传统云桌面、沙箱之类比较“重”的工具。基于此,共创落地零信任数据安全体系,集成至内部安全办公系统中,替代3、4个安全软件,实现最小权限访问以及数据分类分级、流转、分发等全方位管控,这样既有效保护红线数据、又不影响员工效率与体验。
亿格名片 | 小红书:「红线数据不外泄」准则下的数据安全“种草”攻略
|
BI C# 数据库
C# 机房重构——周结账单、报表设计
C# 机房重构——周结账单、报表设计
100 1
|
数据采集 机器学习/深度学习 数据挖掘
数据处理|数据查重怎么办?去重,就这么办!
数据处理|数据查重怎么办?去重,就这么办!
158 0
|
算法 搜索推荐 BI
【课后任务】房源画像及统计报表建设|学习笔记
快速学习【课后任务】房源画像及统计报表建设
204 0
|
存储 设计模式 前端开发
你有没有想过为什么交易和退款要拆开不同的表?
近期做新项目,在设计表结构的时候,突然想起来之前面试的时候遇到的一个问题,那时候也是初出茅庐,对很多东西一知半解(当然现在也是),当时那个小哥哥问我为什么交易和退款要拆成两个表?是基于什么考虑?有什么好处和优点么?
386 0
|
机器学习/深度学习 存储
2043. 简易银行系统 : 模拟题
2043. 简易银行系统 : 模拟题
|
安全
高校招生说明网页被挂马 考生浏览需谨慎
据瑞星“云安全”系统统计,本周瑞星共截获了140万个挂马网址。从被截获的挂马网址来看,本周挂马网站矛头主要对准了网络游戏、软件下载和高校招生网站,这些被挂马网站中很多都是互联网上的热门网站。随着高考的结束,一些高校的报名招生页面也被植入了病毒。
1080 0
|
数据格式
Excel表格的35招必学秘技(学会计的快来转载,留着以后用)
也许你已经在Excel中完成过上百张财务报表,也许你已利用Excel函数实现过上千次的复杂运算,也许你认为Excel也不过如此,甚至了无新意。但我们平日里无数次重复的得心应手的使用方法只不过是Excel全部技巧的百分之一。
1368 0