二开案例.服务插件.操作事务失败回滚后增加例外处理

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

二开案例.服务插件.操作事务失败回滚后增加例外处理

【应用场景】

操作内部是一个原子操作,有事务保护,事务内的数据库操作,要么一起成功,要么一起失败,操作事务失败回滚后,有时候希望增加一些例外处理,例如,写入一些上机日志。


【案例演示】

采购订单,保存操作,通过服务插件强制使得操作失败,但仍然保存上机操作日志。


【实现步骤】

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

using Kingdee.BOS;

using Kingdee.BOS.App.Data;

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;

using System.Transactions;


namespace Jac.XkDemo.BOS.App.PlugIn

{

    /// <summary>

    /// 【服务插件】操作事务失败回滚后增加例外处理

    /// </summary>

    [Description("【服务插件】操作事务失败回滚后增加例外处理"), HotUpdate]

    public class RollbackTranAndDoOtherSaveOperationServicePlugIn : AbstractOperationServicePlugIn

    {

        public override void EndOperationTransaction(EndOperationTransactionArgs e)

        {

            base.EndOperationTransaction(e);

            var operationName = this.FormOperation.OperationName.ToString();

            using (var trans = new KDTransactionScope(TransactionScopeOption.Suppress))

            {

                // TODO:希望不受外围事务影响的业务逻辑,可以放在此代码块中

                // 即使事务失败,也写入上机操作日志

                var logs = new List<LogObject>();

                foreach (var obj in e.DataEntitys)

                {

                    var log = new LogObject();

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

                    log.Description = string.Format("单据编号为“{0}”的{1},{2}失败!", obj[this.BusinessInfo.GetBillNoField().PropertyName], this.BusinessInfo.GetForm().Name, operationName);

                    log.OperateName = operationName;

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

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

                    log.Environment = OperatingEnvironment.BizOperate;

                    logs.Add(log);

                }


                new Kingdee.BOS.App.LogService.Log().BatchWriteLog(this.Context, logs);

            }


            // 强制抛出异常,演示操作被取消,事务被回滚的业务场景

            throw new KDException("???", "操作事务被插件强制取消并回滚啦!");

        }

    }

}




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


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


【功能验证】

<1>登录业务站点,打开采购订单编辑界面,点击保存,界面提示保存失败,但上机操作日志列表能查询到新增的上机操作日志。

---------------------------------------------------------------------------------------------------------













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

二开案例.服务插件.操作事务失败回滚后增加例外处理

【应用场景】操作内部是一个原子操作,有事务保护,事务内的数据库操作,要么一起成功,要么一起失败,操作事务失败回滚后,有时候希望增加...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息