UDN-企业互联网技术人气社区

板块导航

浏览  : 1667
回复  : 4

[基础功能] 如何让单据使用物理删除

[复制链接]
wuzhigang的头像 楼主
发表于 2014-10-13 09:33:45 | 显示全部楼层 |阅读模式
使用单表档案中,请问如何让系统自带的删除功能实际物理删除
发表于 2014-10-13 11:36:17 | 显示全部楼层
以我们提供的培训示例“销售报价单”为例,单据删除的逻辑如下
1. 前台点删除按钮后,调用销售报价单服务的删除方法nc.itf.train.IQuotationMaintain.delete(QuotationVO[] clientFullVOs, QuotationVO[] originBills) 。
2. 通过http将IQuotationMaintain.delete的服务调用请求转发到服务器端,服务器端解析请求后调用实现类nc.impl.train.QuotationMaintainImpl.delete(QuotationVO[] clientFullVOs, QuotationVO[] originBills)
3. IQuotationMaintain.delete调用自动生成代码的基类nc.impl.pub.ace.AceQuotationPubServiceImpl有pubdeleteBills(QuotationVO[] clientFullVOs,QuotationVO[] originBills) 方法
4. 调用删除的业务处理器nc.bs.train.quotation.ace.bp.AceQuotationDeleteBP的delete(QuotationVO[] bills)方法,在这个方法里将开发者指定的前后规则加入,并调用DeleteBPTemplate<QuotationVO>来执行前规则、业务处理、后规则
5. DeleteBPTemplate<QuotationVO>中指定业务操作BillDeleteOperator<QuotationVO>作为删除操作为执行具体删除业务
6. BillDeleteOperator<QuotationVO>中调用nc.impl.pubapp.pattern.data.bill.BillDelete.delete(E[] bills)来删除业务数据。BillDelete会对指定vo数组的主子表分别进行逻辑删除,即将相关数据行的dr字段设置为1

因此如果要实现单据数据的物理删除,有两个方案
1. 在现有逻辑基础上增加一个后规则来实现物理删除,即先将dr更新为1,再将dr为1的数据删除。
这样的优点是修改量很小,实现简单;缺点是效率不好,前面dr更新为1的操作是不必要的。
这个方案适合于只有个别单据需要物理删除,对它们做个别修改。

2.编写新的RealDeleteBPTemplate、新的RealDeleteBPTemplate和新的BillRealDeleteOperator,在BillRealDeleteOperator中分别针对主、子表vo调用nc.impl.pubapp.pattern.data.vo.VOOperator.realDelete(E[] vos)对主子表数据进行物理删除
这样做优点是直接删除,且这套代码是可复用的;缺点是开发量大。
这个方案适用于在系统中大量存在需要物理删除单据的场景,这样可以在每个单据删除时指定RealDeleteBPTemplate实现规则,甚至直接修改开发向导中的代码模板,让向导自动生成的代码就是物理删除的代码。
以上只是纯技术上的分析讨论。但我最后还有个疑问,为什么要对单据做物理删除?这样真的好吗?

我是很不建议做单据的物理删除的,楼主能给出3个以上的理由吗?


使用道具 举报

回复

wuzhigang的头像 楼主
发表于 2014-10-13 12:57:17 | 显示全部楼层
1.物理删除,能减少表的数据量,提高查询效率;
2.从业务层面讲,删除的概念与作废是有区别的;有的业务操作需要严格区分两者
3.在一些数据复制操作中,容易忘记数据是逻辑删除的,造成数据出错.
以上是个人的一点看法
使用道具 举报

回复

发表于 2014-10-13 14:33:45 | 显示全部楼层
逻辑删除的好处是用户可以反悔;可以查历史数据。
数据量一般不会是大问题,除非上千万的数据量;作废和删除确实是不同业务,不过我理解逻辑删和作为也是不同业务;数据复制逻辑是你具体的业务,忘记不能算理由吧?!
当然,最终决定权在你,在对具体业务的正确理解。只要你认为没问题就好。
使用道具 举报

回复

发表于 2014-10-21 21:21:19 来自手机 | 显示全部楼层
chenw 发表于 2014-10-13 11:36
以我们提供的培训示例“销售报价单”为例,单据删除的逻辑如下
1. 前台点删除按钮后,调用销售报价单服务的 ...

谢谢  学习
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部