单据转换.案例.下推后将单据转为查看,避免反写值被覆盖
【场景】单据详情界面,下推下游单据保存,但是源单依然可以保存;
此时当源单(审核时能够保存)修改其他字段调用保存时,会把当前界面的数据包直接保存到数据库,导致反写值被当前界面的数据覆盖掉;
【场景操作步骤】
<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更新等,为了保证一定记录的是最新的修改时间记录,只能用触发器)
该单据的保存增加一个校验器,验证数据库的最后修改时间字段和当前字段是否一致,不一致就抛异常,证明是其他地方已经进行过更新
单据转换.案例.下推后将单据转为查看,避免反写值被覆盖
【场景】单据详情界面,下推下游单据保存,但是源单依然可以保存;此时当源单(审核时能够保存)修改其他字段调用保存时,会把当前界面的数...
点击下载文档
上一篇:二开移动发件箱下一篇:Python插件问题/方案汇总
本文2024-09-16 18:34:57发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-23088.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章