二开案例.服务插件.操作执行后事物结束前修改单据数据包
【应用场景】在单据的某个操作执行后,且该操作的外围事务尚未结束前,修改单据的数据包并在当前事务保护下完成数据库操作。
【案例演示】采购订单执行审核操作后,将采购日期设置为审核日期。
【实现步骤】
<1>编写服务插件,代码如下。
using Kingdee.BOS.App.Core;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Util;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.App.PlugIn
{
/// <summary>
/// 【服务插件】操作执行后事物结束前修改单据数据包
/// </summary>
[HotUpdate]
[Description("【服务插件】操作执行后事物结束前修改单据数据包")]
public class UpdateFieldValueInTransactionOperationServicePlugIn : AbstractOperationServicePlugIn
{
/// <summary>
/// 操作事物后事件(事务内触发)
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 1. 此事件在操作执行代码之后,操作的内部逻辑已经执行完毕
/// 2. 此事件在操作事务提交之前
/// 3. 此事件中的数据库处理,受操作的事务保护
/// 4. 通常此事件,可以用来做同步数据,如同步生成其他单据,而且需要受事务保护
/// </remarks>
public override void EndOperationTransaction(EndOperationTransactionArgs e)
{
base.EndOperationTransaction(e);
// 保存8提交9审核1反审核26
if (this.FormOperation.OperationId == 1)
//if (this.FormOperation.Operation.EqualsIgnoreCase("Audit"))
{
foreach (var dataEntity in e.DataEntitys)
{
// 审核后设置采购日期等于审核日期
dataEntity["Date"] = dataEntity["ApproveDate"];
}
// 保存变更后的数据
new BusinessDataWriter(Context).Save(e.DataEntitys);
}
}
}
}
/*
#【服务插件】【Python】【注意缩进】事物启动后操作执行后修改单据数据包
import clr
clr.AddReference('mscorlib')
clr.AddReference('Kingdee.BOS.App.Core')
from Kingdee.BOS.App.Core import *
def EndOperationTransaction(e):
if this.FormOperation.OperationId == 1:
for dataEntity in e.DataEntitys:
#审核后设置采购日期等于审核日期
dataEntity["Date"] = dataEntity["ApproveDate"];
BusinessDataWriter(this.Context).Save(e.DataEntitys);
*/
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,审核操作注册插件,操作后刷新字段增加【采购日期】字段,保存元数据,开发完毕。
如果使用Python插件,注册方式如下图。
现在可以登录业务站点,打开已有的采购订单,执行审核操作,检验插件的设置效果啦。
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.服务插件.操作执行后事物结束前修改单据数据包
本文2024-09-23 04:20:25发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164676.html