This commit is contained in:
PastSaid
2025-01-01 08:21:58 +08:00
parent 9725ab5376
commit 3d15fd4b7e
59 changed files with 3013 additions and 1324 deletions

View File

@@ -0,0 +1,191 @@
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Log;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
namespace K3CExttensionMethods
{
internal class Class1 : AbstractOperationServicePlugIn
{
#region event
/// <summary>
/// 选项设置
/// 1.在操作服务初始化是执行
/// 2.可以对操作的执行参数进行设置,比如是否是否启动事务,是否支持批量处理等
/// </summary>
/// <param name="e"></param>
public override void OnPrepareOperationServiceOption(OnPrepareOperationServiceEventArgs e)
{
PrintEventInfo("OnPrepareOperationServiceOption", e);
base.OnPrepareOperationServiceOption(e);
}
/// <summary>
/// 在执行保存操作前触发
/// 1.此时数据包没有填充主键数据
/// 2.只有继承了AbstractSave的保存服务才会触发此事件
/// </summary>
/// <param name="e"></param>
public override void BeforeDoSaveExecute(BeforeDoSaveExecuteEventArgs e)
{
PrintEventInfo("BeforeDoSaveExecute", e);
base.BeforeDoSaveExecute(e);
}
/// <summary>
/// 加载指定字段到实体数据包里
/// 1.在列表上执行操作时,单据的字段并没有被完全加载。 如果操作插件用到了未被加载的字段,一定会中断。
/// 2.本事件允许插件,强制要求加载某些字段,避免中断
/// </summary>
/// <param name="e"></param>
public override void OnPreparePropertys(PreparePropertysEventArgs e)
{
PrintEventInfo("OnPreparePropertys", e);
base.OnPreparePropertys(e);
}
/// <summary>
/// 初始化操作结果
/// </summary>
/// <param name="result"></param>
public override void InitializeOperationResult(Kingdee.BOS.Core.DynamicForm.IOperationResult result)
{
PrintEventInfo("InitializeOperationResult", result);
base.InitializeOperationResult(result);
}
/// <summary>
/// 添加自定义数据校验器
/// 在系统开始执行校验前,插件可以追加自己的校验器进入操作校验器集合
/// </summary>
/// <param name="e"></param>
public override void OnAddValidators(AddValidatorsEventArgs e)
{
PrintEventInfo("OnAddValidators", e);
base.OnAddValidators(e);
}
/// <summary>
/// 执行操作事务前事件,通知插件对要处理的数据进行排序等预处理(事务外触发)
/// 1.此事件在操作校验之后、操作实现代码之前执行
/// 2.此事件在操作事务之前,即此事件中的数据库处理,不受操作的事务保护
/// 3.通常此事件,也可以用来进行数据校验
/// </summary>
/// <param name="e">e.SelectedRows 准备要处理的扩展实体 e.DataEntitys 处理后的实体</param>
public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
{
PrintEventInfo("BeforeExecuteOperationTransaction", e);
base.BeforeExecuteOperationTransaction(e);
}
/// <summary>
/// 操作事物前事件(事务内触发)
/// </summary>
/// 1.此事件在操作校验之后
/// 2.此事件在操作事务开始之后
/// 3.此事件在操作执行代码之前
/// 4.此事件中的数据库处理,受操作的事务保护
/// 5.通常此事件,可以用来做数据准备,在操作之前,提前写数据到库
/// <param name="e"></param>
public override void BeginOperationTransaction(BeginOperationTransactionArgs e)
{
PrintEventInfo("BeginOperationTransaction", e);
base.BeginOperationTransaction(e);
}
/// <summary>
/// 操作事物后事件(事务内触发)
/// 1.此事件在操作执行代码之后,操作的内部逻辑已经执行完毕
/// 2.此事件在操作事务提交之前
/// 3.此事件中的数据库处理,受操作的事务保护
/// 4.通常此事件,可以用来做同步数据,如同步生成其他单据,而且需要受事务保护
/// </summary>
/// <param name="e"></param>
public override void EndOperationTransaction(EndOperationTransactionArgs e)
{
PrintEventInfo("EndOperationTransaction", e);
base.EndOperationTransaction(e);
}
/// <summary>
/// 内部事务执行失败后,调用回滚数据事件(事务外触发)
/// 1.此事件只有在操作执行过程中发生异常时才触发
/// 2.操作异常时,回滚内存中的数据
/// 3.避免访问数据库造成事务状态无效的错误
/// </summary>
/// <param name="e"></param>
public override void RollbackData(OperationRollbackDataArgs e)
{
PrintEventInfo("RollbackData", e);
base.RollbackData(e);
}
/// <summary>
/// 执行操作事务后事件,通知插件对象执行其它事务无关的业务逻辑(事务外触发)
/// 1.此事件在操作执行后,操作的内部逻辑已经执行完毕;
/// 2.此事件在操作事务提交之后;
/// 3.此事件中的数据库处理,不受操作的事务保护
/// 4.通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需影响操作
/// </summary>
/// <param name="e"></param>
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
{
PrintEventInfo("AfterExecuteOperationTransaction", e);
base.AfterExecuteOperationTransaction(e);
}
#endregion
#region private method
/// <summary>
/// 事件执行次数计数器
/// </summary>
private int counter;
/// <summary>
/// 事件执行次数计数器
/// </summary>
private int Counter
{
get { return ++counter; }
}
/// <summary>
/// 输出事件执行日志
/// </summary>
/// <param name="eventName">事件名称</param>
/// <param name="args">事件参数</param>
private void PrintEventInfo(string eventName, params object[] args)
{
var formId = GetFormId();
var parameters = string.Empty;
try
{
parameters = JsonConvert.SerializeObject(args);
}
catch
{
}
var log = string.Format("序号:{0},执行时间:{1},表单Id:{2},事件名称:{3},事件参数:{4}", Counter, DateTime.Now.ToString("yyyy -MM-dd HH:mm:ss.fff"), formId, eventName, parameters);
Debug.Print(log);
Logger.Error("EVENT", log, null);
}
/// <summary>
/// 获取业务对象标识
/// </summary>
/// <returns></returns>
private string GetFormId()
{
return this.BusinessInfo.GetForm().Id;
}
#endregion
}
}

View File

@@ -62,6 +62,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="HttpClient.cs" />
<Compile Include="ListHeaderExtension.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />