二开案例.服务插件.操作事务失败回滚后增加例外处理
【应用场景】
操作内部是一个原子操作,有事务保护,事务内的数据库操作,要么一起成功,要么一起失败,操作事务失败回滚后,有时候希望增加一些例外处理,例如,写入一些上机日志。
【案例演示】
采购订单,保存操作,通过服务插件强制使得操作失败,但仍然保存上机操作日志。
【实现步骤】
<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
二开案例.服务插件.操作事务失败回滚后增加例外处理
本文2024-09-23 04:08:06发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-163357.html