单据保存前数据效验插件开发
金蝶云社区-云社区用户l6231922
云社区用户l6231922
0人赞赏了该文章 1,846次浏览 未经作者许可,禁止转载编辑于2016年08月27日 12:05:18

正在做单据保存时检查。根据网上各位大神的例子,基本能开工了,插件也可以调用了。不过这里有两个小小的问题。
1、网上的例子都是效验表头的。validator.EntityKey = "FBillHead";/如果我要效验表体,那么该设置validator.EntityKey = ????什么字符串啊?
2、如果foreach (ExtendedDataEntity data in dataEntities)这里data已经获得了表头,那么用什么方法可以可以通过表头获得表体?
以下是具体代码:
public class 价目表属性检查 : AbstractOperationServicePlugIn//服务器各种操作服务的抽象类
{
public override void OnAddValidators(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.AddValidatorsEventArgs e)//e 插件事件参数包:操作前,添加校验器事件 ,服务器提供给此事件的标准参数门可以通过此参数访问单据上面的数据
{
base.OnAddValidators(e);//通过此事件,通知插件进行添加自定义数据校验器
var 物料属性效验1 = new 物料属性效验器();
物料属性效验1.EntityKey = "FBillHead";//返回此校验器校验哪个实体。"FBillHead" 表示表头实体,那么问题一:表体实体是什么字符串呢?,
e.Validators.Add(物料属性效验1);// e.Validators效验集合,这里把自己的效验加进去,系统会自动一起效验
var 供应商唯一效验1 = new 供应商价目表唯一性检查();//实际上我想加两个效验器,测试发现都加上去了,都能返回错误。
供应商唯一效验1.EntityKey = "FBillHead";
e.Validators.Add(供应商唯一效验1);// 这样增加第二个效验器。
}
}
public class 物料属性效验器 : AbstractValidator//定义了一个校验器抽象对象
{
public override void Validate(Kingdee.BOS.Core.ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Kingdee.BOS.Context ctx)
{// Kingdee.BOS.Core.ExtendedDataEntity 扩展的实体,允许为每个实体定义额外的扩展数据 ValidateContext 校验上下文对象 Context 登录上下文环境
// Validate 方法,自动调用,对指定的数据进行效验
foreach (ExtendedDataEntity data in dataEntities)
{//问题二:因为前面用了EntityKey = "FBillHead",这里的data获得的是表头数据,那么如何通过表头数据获得表体数据呢?
//这里增加自己的业务逻辑判断,忽略。
validateContext.AddError(data.DataEntity,
new ValidationErrorInfo(validateContext.BusinessInfo.GetBillNoField().Id,
data.DataEntity["Id"].ToString(),
data.DataEntityIndex,
data.RowIndex,
data.DataEntity["Id"].ToString(), "这里填写自定义的错误信息", "错误标题!", ErrorLevel.FatalError));
} // 实现校验逻辑,不合法的 ,保错误信息传入界面!
}

public class 供应商价目表唯一性检查 : AbstractValidator//定义了一个校验器抽象对象
{//这是我的第二个效验器
public override void Validate(Kingdee.BOS.Core.ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Kingdee.BOS.Context ctx)
{// Kingdee.BOS.Core.ExtendedDataEntity 扩展的实体,允许为每个实体定义额外的扩展数据 ValidateContext 校验上下文对象 Context 登录上下文环境
// Validate 方法,自动调用,对指定的数据进行效验
foreach (ExtendedDataEntity data in dataEntities)
{ //这里增加自己的业务逻辑判断,忽略。
validateContext.AddError(data.DataEntity,
new ValidationErrorInfo(validateContext.BusinessInfo.GetBillNoField().Id,
data.DataEntity["Id"].ToString(),
data.DataEntityIndex,
data.RowIndex,
data.DataEntity["Id"].ToString(), "供应商价目表唯一性检查错误返回!", "错误标题!", ErrorLevel.FatalError));
} // 实现校验逻辑,不合法的 ,保错误信息传入界面!
}
}
}