库存更新触发获取更新后即时库存数量并保存实现方案原创
5人赞赏了该文章
932次浏览
编辑于2022年10月11日 08:47:34
一、【业务需求】
需要在单据审核或反审核后更新单据上的即时库存数量,并将该字段保存到数据库中
二、【功能分析】
之前两篇帖子
配置实现了库存更新操作触发后,插件调用系统预置的获取即时库存操作,从而实现页面显示更新后的即时库存。
但是标准产品中的即时库存字段是一个虚拟字段,没有配置数据库字段的映射,只能作为显示使用,无法持久化保存到数据库。
实现思路:
1、扩展实体字段(数量类型),用于保存显示即时库存数量
2、获取即时库存操作,做对应配置,即时库存数量返回映射到扩展的数量字段
3、获取即时库存操作返回数据,最终都需要对页面的数量字段进行赋值,赋值触发值更新事件,二开插件,表单插件中DataChanged事件中针对即时库存数量字段触发时,对单据数据进行一次保存操作
using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata.FormElement; using Kingdee.BOS.ServiceHelper; namespace XkDemo.SCM.Business.PlugIn { public class CustomQueryStockEditE : AbstractBillPlugIn { private long operation; public override void AfterDoOperation(AfterDoOperationEventArgs e) { operation = 0; if (e.Operation.OperationId == FormOperation.Operation_Audit || e.Operation.OperationId == FormOperation.Operation_UnAudit) { operation = e.Operation.OperationId; this.View.GetMainMenu().ItemClick("tbButton_2"); // 触发单据头获取即时库存操作 this.View.SendDynamicFormAction(this.View); this.View.UpdateView(); } base.AfterDoOperation(e); } public override void DataChanged(BOS.Core.DynamicForm.PlugIn.Args.DataChangedEventArgs e) { switch (e.Field.Key.ToUpperInvariant()) { case "FQTY2": var entity = this.View.BusinessInfo.GetEntity("FEntity"); var rowCount = this.Model.GetEntryRowCount("FEntity"); // 最后一行值更新才触发保存,operation == 1:审核、operation == 26:反审核 if (e.Row + 1 == rowCount && (operation == 1 || operation == 26)) { BusinessDataServiceHelper.Save(this.View.Context, this.View.Model.DataObject); // 不触发保存数据检查、插件 } break; } } } }
审核后:
反审核后:
赞 5
5人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读