单据转换.案例.下推后将单据转为查看,避免反写值被覆盖

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

单据转换.案例.下推后将单据转为查看,避免反写值被覆盖

【场景】单据详情界面,下推下游单据保存,但是源单依然可以保存; 此时当源单(审核时能够保存)修改其他字段调用保存时,会把当前界面的数据包直接保存到数据库,导致反写值被当前界面的数据覆盖掉; 【场景操作步骤】 <1>简单配置一个反写规则和值更新事件 ![Image_20221124101522.webp](/download/010052987abb72694dc3b54b4ff53347f175.webp)![Image_20221124101025.webp](/download/0100b84ceae4f7334fbc96110b866d34f51e.webp) <2>制作一个采购申请单,审核状态; 其中该单据审核时能够修改备注,对应被反写值为空 ![image.webp](/download/0100b76500d02e4a43ff9de2493f6114bedc.webp) <3>下推采购订单,录入反写值,保存 ![image.webp](/download/010032b7eb4887dd44078d3703435d8cb33e.webp) <4>验证申请单列表,文本值确实反写了 ![Image_20221124102722.webp](/download/01003213f87ddf6044149c583f10b0013751.webp) <5>回到采购申请单的详情界面,修改备注字段,保存 ![image.webp](/download/0100ffeb90027f204b23b35d416f57722eed.webp) <6>验证申请单列表,反写值被去掉了 ![Image_20221124102844.webp](/download/010058c340d63ad24b228bc91dc9f2dbd2c4.webp) 这个案例可能说的不太恰当,但是在描述下业务中可能的例子 a 采购申请单 数量为5, 未关联订单数量 为5 b 下推采购订单 数量为3, 而后反写 扣减 未关联订单数量3, 扣减后为2; c 存在部分不合理的场景:如果数量 不等于 未关联数量,认为有关联订单,不能修改数量,这个只能用来控制反写后重新打开的单据详情界面 d 针对原有的单据详情界面,由于这两个界面值(数据库实际是不同,但是单据界面是相同的)相同,所以支持修改,此时 把采购申请单 数量改为6 ,值更新 把 未关联订单数量也改为6。 导致未关联订单数量存在扣减被覆盖了 【方案】针对这个场景,本质上要控制关联控制下推和反写的字段必须在保存时是最新的 最终确保验证逻辑能够控制;这里提供一个折中的方案处理 <1>方案一:由于大部分场景是反写导致的,所以我们下推后把当前单据界面变为查看 菜单配置,点了下推菜单后就查看(修改为查看不会释放网控) ![Image_20221124111615.webp](/download/01005322c12bcbad449c9db8601347063e50.webp) 插件案例,下推操作后变为查看(可改为下游单据保存成功后改为查看) ```csharp using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DynamicFormPlugIn.Operation { [Kingdee.BOS.Util.HotUpdate] [System.ComponentModel.Description("下推操作后将界面改为查看,避免重复保存导致反写数据被覆盖")] public class FormOpExecutePlugIn : AbstractBillPlugIn { public override void AfterDoOperation(AfterDoOperationEventArgs e) { if (e == null || e.Operation == null) return; if (!string.Equals("Push", e.Operation.Id)) return; //单据界面点了下推后,将界面改为查看状态 this.View.OpenParameter.Status = Kingdee.BOS.Core.Metadata.OperationStatus.VIEW; this.View.UpdateView(); } } } ``` <2>方案二:配置下推后锁定保存菜单,增加菜单刷新绑定刷新操作,点击刷新后重新加载数据库数据并解锁保存,支持在一个界面重复修改 ![Image_20221124113240.webp](/download/01007b5500cf7f5b4d0daffaa89f516a6660.webp) ![Image_20221124113312.webp](/download/01004ddf117f70ce40bfb9eb0f0e9004c321.webp) <3>方案二:完整的方案,通过增加数据包的最后修改时间记录 单据上增加一个时间字段,该字段支持通过当前单据保存,以及触发器更新(为什么用触发器,因为太大场景了,包括反写、业务插件sql更新等,为了保证一定记录的是最新的修改时间记录,只能用触发器) 该单据的保存增加一个校验器,验证数据库的最后修改时间字段和当前字段是否一致,不一致就抛异常,证明是其他地方已经进行过更新

单据转换.案例.下推后将单据转为查看,避免反写值被覆盖

【场景】单据详情界面,下推下游单据保存,但是源单依然可以保存;此时当源单(审核时能够保存)修改其他字段调用保存时,会把当前界面的数...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息