二开案例.单据插件.动态注册实体服务规则

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

二开案例.单据插件.动态注册实体服务规则

【应用场景】动态注册实体服务规则。

【案例演示】采购订单,动态注册实体服务规则,分别实现在单据头字段值更新,单据体字段值更新,分录行新增,分录行删除时执行实体服务规则。

【实现步骤】

<1>编写单据插件,代码如下。

using Kingdee.BOS.Core.Bill.PlugIn;

using Kingdee.BOS.Core.DependencyRules;

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Util;

using System;

using System.ComponentModel;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【单据插件】动态注册实体服务规则

    /// </summary>

    [Description("【单据插件】动态注册实体服务规则"), HotUpdate]

    public class AddPluginRuleBillPlugIn : AbstractBillPlugIn

    {

        public override void OnInitialize(InitializeEventArgs e)

        {

            base.OnInitialize(e);

            // 注册实体服务规则,在单据头的字段值更新事件发生时执行

            this.View.RuleContainer.AddPluginRule("FBillHead", RaiseEventType.ValueChanged, (ctx) =>

            {

                var executeContext = (BOSActionExecuteContext)ctx;

                var supplierName = string.Empty;

                var supplier = this.View.Model.GetValue("FSupplierId") as DynamicObject;

                if (supplier != null)

                {

                    supplierName = supplier["Name"].ToString();

                }


                this.View.ShowMessage(string.Format("供应商发生了变化,新的供应商是:{0}", supplierName));

            }, "FSupplierId");

            // 注册实体服务规则,在分录的字段值更新事件发生时执行

            this.View.RuleContainer.AddPluginRule("FPOOrderEntry", RaiseEventType.ValueChanged, (ctx) =>

            {

                var executeContext = (BOSActionExecuteContext)ctx;

                var qtySum = 0;

                var entry = this.View.BillBusinessInfo.GetEntity("FPOOrderEntry");

                foreach (var dyObj in this.View.Model.GetEntityDataObject(entry))

                {

                    qtySum += Convert.ToInt32(dyObj["Qty"]);

                }


                this.View.ShowMessage(string.Format("当前物料总数量:{0}", qtySum));

            }, "FQty");

            // 注册实体服务规则,在新增分录行时执行

            this.View.RuleContainer.AddPluginRule("FPOOrderEntry", RaiseEventType.ItemAdded, (ctx) =>

            {

                var executeContext = (BOSActionExecuteContext)ctx;

                var currentEntryIndex = executeContext.View.Model.GetEntryCurrentRowIndex("FPOOrderEntry");

                this.View.ShowMessage(string.Format("订单明细新增了一行,行号为:{0}", currentEntryIndex + 1));

            }, "FMaterialId");

            // 注册实体服务规则,在删除分录行时执行

            this.View.RuleContainer.AddPluginRule("FBillHead", RaiseEventType.ItemRemoved, (ctx) =>

            {

                var executeContext = (BOSActionExecuteContext)ctx;

                // 获取当前被删的分录行的行号

                var currentEntryIndex = executeContext.View.Model.GetEntryCurrentRowIndex("FPOOrderEntry");

                this.View.ShowMessage(string.Format("订单明细删除了一行,行号为:{0}", currentEntryIndex + 1));

            }, "FMaterialId");


        }

    }

}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展采购订单,注册表单插件,保存元数据,开发完毕。




现在可以登录业务站点,打开采购订单编辑界面,检验一下插件效果啦。

修改单据头上的供应商:

修改单据体的采购数量:

新增分录行:

删除分录行:














【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.单据插件.动态注册实体服务规则

【应用场景】动态注册实体服务规则。【案例演示】采购订单,动态注册实体服务规则,分别实现在单据头字段值更新,单据体字段值更新,分录行...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息