自动获取即时库存配置方案(二)原创
9人赞赏了该文章
2,689次浏览
编辑于2022年05月18日 13:58:48
之前文章提到使用实体服务规则配合"行更新"的方式处理【单据转换自动获取即时库存信息?行选择来帮您】,【自动获取即时库存配置方案(一)】,实际效果是每切换单据体的选中行,都会触发获取即时库存的操作,明细行较多且切换行操作频繁,对性能有较大的损耗。
研究了一下,有个更好一点的实现方案避免出现性能问题: 单据头扩展按钮(注意是单据头配置,单据体插件无法触发到),配置"获取即时库存"操作, 注册表单插件重写事件使得单据下推,审核反审核触发操作,从而实现自动获取即时库存。
选单返回,没有设计特定事件
但系统会调用UpdateView,刷新界面数据。在此过程中,会触发OnLoad、BeforeBindData、AfterBindData等事件。
因此,通过this.View.OpenParameter.CreateFrom == CreateFrom.Draw 判断是否选单操作
据此与从数据库加载打开单据区分开
Python:
import clr clr.AddReference("System") clr.AddReference("System.Core") clr.AddReference("Kingdee.BOS") clr.AddReference("Kingdee.BOS.Core") from System import * from System import StringComparison from Kingdee.BOS import * from Kingdee.BOS.Core import * from Kingdee.BOS.Core.DynamicForm import * from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * from Kingdee.BOS.Core.Metadata.FormElement import * def AfterBindData(e): if this.View.OpenParameter.CreateFrom == CreateFrom.Draw: # 选单返回触发 this.View.GetMainMenu().ItemClick("tbButton_1") this.View.SendDynamicFormAction(this.View) #this.View.UpdateView() def AfterDoOperation(e): if e.Operation.Operation.Equals("Audit", StringComparison.OrdinalIgnoreCase) or e.Operation.Operation.Equals("UnAudit", StringComparison.OrdinalIgnoreCase): this.View.GetMainMenu().ItemClick("tbButton_1") this.View.SendDynamicFormAction(this.View) this.View.UpdateView() def AfterCreateModelData(e): # 适用于单据下推自动获取场景 if this.View.OpenParameter.Status == OperationStatus.ADDNEW and this.View.OpenParameter.CreateFrom == CreateFrom.Push: this.View.GetMainMenu().ItemClick("tbButton_1") this.View.SendDynamicFormAction(this.View)
C#
using System; using Kingdee.BOS.Core; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.FormElement; namespace Kingdee.K3.SCM.Stock.Business.PlugIn.MisBill { public class MisDeliveryEditEx : AbstractBillPlugIn { public override void AfterBindData(EventArgs e) { if (this.View.OpenParameter.CreateFrom == CreateFrom.Draw) { this.View.GetMainMenu().ItemClick("tbButton_1"); this.View.SendDynamicFormAction(this.View); } } public override void AfterCreateModelData(EventArgs e) { if (this.View.OpenParameter.Status == OperationStatus.ADDNEW && this.View.OpenParameter.CreateFrom == CreateFrom.Push) { this.View.GetMainMenu().ItemClick("tbButton_1"); this.View.SendDynamicFormAction(this.View); } } public override void AfterDoOperation(AfterDoOperationEventArgs e) { base.AfterDoOperation(e); if (e.Operation.OperationId == FormOperation.Operation_Audit || e.Operation.OperationId == FormOperation.Operation_UnAudit) { this.View.GetMainMenu().ItemClick("tbButton_1"); this.View.SendDynamicFormAction(this.View); this.View.UpdateView(); } } }
总结:
1、两种方案做对比,如果需要录单实时获取即时库存,采用第一种方式,需要关注是否会出现性能问题;如果只在特殊操作节点获取即时库存,那采用方案二更合理,插件实现难度也不大。
自动获取即时库存配置插件.rar(0.96KB)
赞 9
9人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读