金蝶云星空——给操作列表中的操作注册服务插件

1.简单示例

  • 背景:我创建了一个 :单据(业务单据模板)导入物料信息,对物料进行进行批量修改
    • 发布类型:列表
    • 批改是在存储过程中进行的,传入参数就是用户在界面选择的单据id(允许多选)
  • 这个是一个服务插件,注册在审核按钮中
    • BOS平台:编辑——批量编辑字段属性-操作列表-->操作名称:审核-->编辑-->其他控制-->服务插件-->注册
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using System;
using System.Collections.Generic;

namespace PiGaiCanKaoChengBen
{
    [System.ComponentModel.Description("批改参考成本")]
    public class PiGaiCanKaoChengBenServicePlugin : AbstractOperationServicePlugIn
    {
        public override void OnPreparePropertys(PreparePropertysEventArgs e)
        {
            base.OnPreparePropertys(e);
        }

        /// <summary>
        /// 操作执行后,事务结束前
        /// </summary>
        /// <param name="e"></param>
        /// <remarks>
        /// 1. 此事件在操作执行代码之后,操作的内部逻辑已经执行完毕
        /// 2. 此事件在操作事务提交之前
        /// 3. 此事件中的数据库处理,受操作的事务保护
        /// 4. 通常此事件,可以用来做同步数据,如同步生成其他单据,而且需要受事务保护
        /// </remarks>
        public override void EndOperationTransaction(EndOperationTransactionArgs e)
        {
            List<int> listIds = new List<int>();
            foreach (DynamicObject entity in e.DataEntitys)
            {
                if (entity != null)
                {
                    int id = Convert.ToInt32(entity["Id"]);
                    listIds.Add(id);
                }
            }
            string ids = string.Join(",", listIds);
            List<SqlParam> paramList = new List<SqlParam>
            {
                new SqlParam("Ids", KDDbType.String, ids)
            };
            string sql = "AC_Proc_UpdateWuLiaoXinXi";
            DBUtils.ExecuteStoreProcedure(Context, sql, paramList);

            //Exception exception = new Exception(ids + sql);
            //throw exception;
        }

    }
}

2.通用套路

  • 【WEBAPI】对接外部系统,采购单据各种操作(删除、保存、提交、审核)后,立马实时推送第三方系统代码套路
    • 创建操作的服务插件,重写AfterExecuteOperationTransaction事件,参考以下代码套路
   public override void AfterExecuteOperationTransaction(BOS.Core.DynamicForm.PlugIn.Args.AfterExecuteOperationTransaction e)
   {
            base.AfterExecuteOperationTransaction(e);

            var dataEntities = e.DataEntitys;//采购单据上的数据包集合
            if (dataEntities == null || dataEntities.Count() <= 0) return;//判断当前单据数据不为空

            OperateResultCollection oResult = this.OperationResult.OperateResult;//抓取当前单据操作结果集

            if (oResult .IsSuccess && oResult.Count > 0 )//判断金蝶单据的操作结果成功后,说明此数据即可开始推送给第三方平台
            {
                PushBill(dataEntities);//自行实现PushBill方法的逻辑并且记录好相关日志信息
            }

    }
  • 弹窗显示操作结果:
        public void ShowOperationStatus(bool isSuccess, string msg)
        {
            // 设置操作完成后显示操作结果
            this.OperationResult.IsShowMessage = true;
            var operateResult = new OperateResult();
            operateResult.SuccessStatus = isSuccess;
            //operateResult.PKValue = e.DataEntitys[0]["Id"];
            //operateResult.Number = ObjectUtils.Object2String(this.BusinessInfo.GetBillNoField().DynamicProperty.GetValueFast(e.DataEntitys[0]));
            operateResult.Message = msg;
            this.OperationResult.OperateResult.Add(operateResult);
        }

3. 参考

posted @ 2024-10-18 14:27  shanzm  阅读(35)  评论(0编辑  收藏  举报
TOP