自动获取即时库存配置方案(二)
之前文章提到使用实体服务规则配合"行更新"的方式处理【单据转换自动获取即时库存信息?行选择来帮您】,【自动获取即时库存配置方案(一)】,实际效果是每切换单据体的选中行,都会触发获取即时库存的操作,明细行较多且切换行操作频繁,对性能有较大的损耗。
研究了一下,有个更好一点的实现方案避免出现性能问题: 单据头扩展按钮(注意是单据头配置,单据体插件无法触发到),配置"获取即时库存"操作, 注册表单插件重写事件使得单据下推,审核反审核触发操作,从而实现自动获取即时库存。
选单返回,没有设计特定事件
但系统会调用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、两种方案做对比,如果需要录单实时获取即时库存,采用第一种方式,需要关注是否会出现性能问题;如果只在特殊操作节点获取即时库存,那采用方案二更合理,插件实现难度也不大。
自动获取即时库存配置方案(二)
之前文章提到使用实体服务规则配合"行更新"的方式处理【单据转换自动获取即时库存信息?行选择来帮您】,【自动获取即时库存配置方案(一)】...
点击下载文档
上一篇:单据联查库存查询二开插件下一篇:自动获取即时库存配置方案(一)
本文2024-09-23 02:55:29发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-155573.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章