二开案例.服务插件.校验器使用内置交互界面显示自定义数据源

【应用场景】操作执行前需要对单据合法性进行校验,校验不通过时,使用内置交互界面显示自定义数据源,将校验结果显示给操作用户进行决策,是否把操作继续进行下去。
【案例演示】采购订单,点击保存时,判断采购总金额是否超额,超额时弹出自定义交互界面。

【实现步骤】
<1>编写服务插件,代码如下。
using Kingdee.BOS;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Interaction;
using Kingdee.BOS.Core.Validation;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.App.PlugIn
{
/// <summary>
/// 【服务插件】校验器使用内置交互界面显示自定义数据源
/// </summary>
[Description("【服务插件】校验器使用内置交互界面显示自定义数据源"), HotUpdate]
public class ShowInteractionFormUseK3DisplayerServicePlugIn : AbstractOperationServicePlugIn
{
/// <summary>
/// 添加校验器
/// </summary>
/// <param name="e"></param>
public override void OnAddValidators(AddValidatorsEventArgs e)
{
base.OnAddValidators(e);
// 添加校验器
e.Validators.Add(new PurchaseOrderCheckAmountValidator());
// 继续添加其他校验器
// TODO
}
}
/// <summary>
/// 自定义校验器:检查采购订单的采购总金额是否超额
/// </summary>
public class PurchaseOrderCheckAmountValidator : AbstractValidator
{
/// <summary>
/// 交互标识
/// </summary>
const string InteractionKey = "PurchaseOrderCheckAmountValidator";
public override void InitializeConfiguration(ValidateContext validateContext, Context ctx)
{
base.InitializeConfiguration(validateContext, ctx);
if (validateContext.BusinessInfo != null)
{
EntityKey = validateContext.BusinessInfo.GetEntity(0).Key;
}
}
public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx)
{
if (validateContext.Option.HasInteractionFlag(InteractionKey))
{
// ★★★★★★★★★★★★★★★★★★★★★★★★★★
// 已经交互过,不再处理
return;
}
if (dataEntities == null || dataEntities.Length <= 0)
{
return;
}
// 记录校验不通过的订单
var errorBills = new Dictionary<string, decimal>();
foreach (var et in dataEntities)
{
var dyEntrys = et.DataEntity["POOrderEntry"] as DynamicObjectCollection;
if (dyEntrys == null)
{
continue;
}
var amount = dyEntrys.Sum(dy => Convert.ToDecimal(dy["AllAmount"]));
if (amount > 10000)
{
// 采购订单的价税合计总金额超过10000时,终止操作,弹出交互界面
errorBills[et.BillNo] = amount;
}
}
if (errorBills.Count <= 0)
{
二开案例.服务插件.校验器使用内置交互界面显示自定义数据源
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



