二开案例.服务插件.动态注册服务插件

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

二开案例.服务插件.动态注册服务插件

【应用场景】假如要监控供应链模块下的所有单据的删除操作,正常操作是挨个扩展供应链模块下的单据,给删除操作注册服务插件,这个工程量浩大,不易维护。平台提供了动态注册操作服务插件的接口,可快速实现此类需求。

【案例演示】对采购订单、采购申请单从后台注册服务插件,实现单据删除后,记录删除日志的功能。

【实现步骤】

<1>编写服务插件,代码如下。

using Kingdee.BOS.Contracts;

using Kingdee.BOS.Core.DynamicForm.PlugIn;

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

using Kingdee.BOS.Core.Log;

using Kingdee.BOS.Util;

using System.Collections.Generic;

using System.ComponentModel;


namespace Jac.XkDemo.BOS.App.PlugIn

{

    /// <summary>

    /// 【服务插件】动态注册服务插件

    /// </summary>

    [HotUpdate]

    [Description("【服务插件】动态注册服务插件")]

    public class DeleteDynamicOperationServicePlugIn : AbstractOperationServicePlugIn

    {

        /// <summary>

        /// 执行操作事务后事件,通知插件对象执行其它事务无关的业务逻辑(事务外触发)

        /// </summary>

        /// <param name="e"></param>

        /// <remarks>

        /// 1. 此事件在操作执行后,操作的内部逻辑已经执行完毕;

        /// 2. 此事件在操作事务提交之后;

        /// 3. 此事件中的数据库处理,不受操作的事务保护

        /// 4. 通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需影响操作

        /// </remarks>

        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)

        {

            base.AfterExecuteOperationTransaction(e);

            // TODO

            if (this.FormOperation.Operation.EqualsIgnoreCase("Delete"))

            {

                var logs = new List<LogObject>();

                var billName = this.BusinessInfo.GetForm().Name;

                var billNoField = this.BusinessInfo.GetBillNoField();

                foreach (var dataEntity in e.DataEntitys)

                {

                    var log = new LogObject();

                    log.pkValue = dataEntity[0].ToString();

                    log.Description = string.Format("[{0}{1}]被{2}删掉啦!", billName, dataEntity[billNoField.PropertyName], Context.UserName);

                    log.OperateName = "动态服务插件保存上机日志";

                    log.ObjectTypeId = this.BusinessInfo.GetForm().Id;

                    log.SubSystemId = this.BusinessInfo.GetForm().SubsysId;

                    log.Environment = OperatingEnvironment.BizOperate;

                    logs.Add(log);

                }


                ServiceFactory.GetLogService(Context).BatchWriteLog(this.Context, logs);

            }


            // TODO

        }

    }

}


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


<3>前往业务账套所在数据库,执行以下SQL脚本完成服务插件注册,开发完毕。

-- 采购订单注册动态服务插件

DELETE FROM T_META_OPERATESERVICEPLUGIN WHERE FID=888101;

INSERT INTO T_META_OPERATESERVICEPLUGIN (FID,FFORMID,FOPERATENUMBER,FPLUGINCLASS) VALUES (888101,'PUR_PurchaseOrder','Delete','Jac.XkDemo.BOS.App.PlugIn.DeleteDynamicOperationServicePlugIn,Jac.XkDemo.BOS.App.PlugIn');

-- 采购申请单注册动态服务插件

DELETE FROM T_META_OPERATESERVICEPLUGIN WHERE FID=888102;

INSERT INTO T_META_OPERATESERVICEPLUGIN (FID,FFORMID,FOPERATENUMBER,FPLUGINCLASS) VALUES (888102,'PUR_Requisition','Delete','Jac.XkDemo.BOS.App.PlugIn.DeleteDynamicOperationServicePlugIn,Jac.XkDemo.BOS.App.PlugIn');



现在可以登录业务站点,打开采购订单列表,执行删除操作,检验一下动态注册的服务插件是否已经生效啦。

















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

二开案例.服务插件.动态注册服务插件

【应用场景】假如要监控供应链模块下的所有单据的删除操作,正常操作是挨个扩展供应链模块下的单据,给删除操作注册服务插件,这个工程量浩...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息