博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[K/3Cloud]创建一个操作校验器
阅读量:7138 次
发布时间:2019-06-28

本文共 7800 字,大约阅读时间需要 26 分钟。

概念
定义了一个校验器对象,通常是添加到业务单据操作服务插件,用于对操作的合法性进行校验。继承自校验器抽象对象AbstractValidator。 
应用场景
校验器 
示例
新建一个类,继承自AbstractValidator。
通常重写方法:

Validate

 

using Kingdee.BOS;using Kingdee.BOS.Core;using Kingdee.BOS.Core.Bill.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.Metadata;using Kingdee.BOS.Core.Validation;using Kingdee.BOS.Orm.DataEntity;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Kingdee.K3.Example.ServicePlugIn.TestService{    ///     /// Test 保存操作服务    ///     public class Save : AbstractOperationServicePlugIn    {        //        // Summary:        //     可以定制加载指定字段到实体里        //        // Parameters:        //   e:             public override void OnPreparePropertys(BOS.Core.DynamicForm.PlugIn.Args.PreparePropertysEventArgs e)        {            e.FieldKeys.Add("FMaterialID");            base.OnPreparePropertys(e);        }        //        // Summary:        //     通过此事件,通知插件进行添加自定义数据校验器        //        // Parameters:        //   e:        public override void OnAddValidators(BOS.Core.DynamicForm.PlugIn.Args.AddValidatorsEventArgs e)        {            TestValidator validator = new TestValidator();            validator.AlwaysValidate = true;            validator.EntityKey = "FBillHead";            e.Validators.Add(validator);        }        //        // Summary:        //     调用操作事物前触发        //        // Parameters:        //   e:        public virtual void BeginOperationTransaction(BeginOperationTransactionArgs e)        {            //todo        }                        //        // Summary:        //     调用操作事物后触发        //        // Parameters:        //   e:        public override void EndOperationTransaction(EndOperationTransactionArgs e)        {            foreach (DynamicObject item in e.DataEntitys)            {                DynamicObjectCollection entryItems = item["STK_LOTADJUSTENTRY"] as DynamicObjectCollection;                //ConvertCommonService.UpdateConvertTo(this.Context, K3.Core.SCM.SCMTableConst.T_STK_LOTADJUSTENTRY, entryItems);            }        }        // Summary:        //     执行操作事务后事件,通知插件对象执行其它事务无关的业务逻辑        //        // Parameters:        //   e:        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)         {            //todo        }        //        // Summary:        //     执行操作事务前事件,通知插件对要处理的数据进行排序等预处理        //        // Parameters:        //   e:        //     e.SelectedRows 准备要处理的扩展实体 e.DataEntitys 处理后的实体        public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)         {             //todo        }        ///         /// 保存单据头校验器        ///         private class TestValidator : AbstractValidator        {            public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx)            {                foreach (ExtendedDataEntity obj in dataEntities)                {                    object materialID = obj.DataEntity["MaterialID"];                    if (materialID == null)                    {                        validateContext.AddError(obj.DataEntity,                        new ValidationErrorInfo                        (                        "", obj.DataEntity["Id"].ToString(), obj.DataEntityIndex, 0,                        "001",                        "错误信息",                        "标题"                        ));                    }                }            }        }    }}

K/3 Cloud部门删除校验器

 

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Kingdee.BOS.Core.Validation;using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.K3.BD.Common.BusinessEntity;using Kingdee.BOS.Orm.DataEntity;namespace Kingdee.K3.BD.App.Common.ServicePlugIn.Department{    ///     /// 部门 删除操作 服务端插件    ///     public class Delete : AbstractOperationServicePlugIn    {        public override void OnPreparePropertys(BOS.Core.DynamicForm.PlugIn.Args.PreparePropertysEventArgs e)        {            base.OnPreparePropertys(e);            e.FieldKeys.Add("FName");            e.FieldKeys.Add("FIsHRDept");            e.FieldKeys.Add("FDocumentStatus");            e.FieldKeys.Add("FNumber");        }        public override void OnAddValidators(BOS.Core.DynamicForm.PlugIn.Args.AddValidatorsEventArgs e)        {            base.OnAddValidators(e);            AbstractValidator validator;            validator = new DeleteValidator();            validator.EntityKey = "FBillHead";            e.Validators.Add(validator);        }    }    ///     /// 部门删除校验器    ///     internal class DeleteValidator : AbstractValidator    {        public override void Validate(BOS.Core.ExtendedDataEntity[] dataEntities, ValidateContext validateContext, BOS.Context ctx)        {            //获取所有部门的层级码信息            IList
nodeList = Kingdee.K3.BD.Contracts.ServiceFactory.GetDepartmentService(Context).InitialLevelCodeTreeNodes(Context, (from dynObj in dataEntities where dynObj.DataEntity["DocumentStatus"].ToString() == "A" select Convert.ToInt64(dynObj.DataEntity["Id"])).ToList()); for (int i = 0; i < nodeList.Count; i++) { LevelCodeTreeNode currentNode = nodeList[i]; if (currentNode.ChildNodes == null || currentNode.ChildNodes.Count == 0) { RemoveNode(nodeList, currentNode); } } //获取非删除部门列表 IList
unDelNodes = (from item in nodeList where item.ChildNodes != null && item.ChildNodes.Count != 0 select item).ToList(); foreach (var unDelNode in unDelNodes) { BOS.Core.ExtendedDataEntity dynObj = FindDataObject(dataEntities, unDelNode); validateContext.AddError(dynObj.DataEntity, new ValidationErrorInfo( dynObj.DataEntity["Number"].ToString(), dynObj.DataEntity["Id"].ToString(), dynObj.DataEntityIndex, dynObj.RowIndex, dynObj.DataEntity["Id"].ToString(), string.Format(Kingdee.BOS.Resource.ResManager.LoadKDString("存在下级部门,建议先删除子部门后再删除本部门!","001001000000351",Kingdee.BOS.Resource.SubSystemType.BASE)), dynObj.DataEntity["Number"].ToString() )); } } ///
/// 获取当前树节点对应的实体数据 /// ///
///
///
private BOS.Core.ExtendedDataEntity FindDataObject(BOS.Core.ExtendedDataEntity[] dataEntities, LevelCodeTreeNode currentNode) { foreach (var dynObj in dataEntities) { if (Convert.ToInt64(dynObj.DataEntity["Id"]) == currentNode.Id) { return dynObj; } } //原则上不会到这里 return new BOS.Core.ExtendedDataEntity(); } ///
/// 清楚已被确认删除的树节点 /// ///
///
private void RemoveNode(IList
nodeList, LevelCodeTreeNode removeNode) { for (int i = 0; i < nodeList.Count; i++) { LevelCodeTreeNode checkNode = nodeList[i]; for (int j = checkNode.ChildNodes.Count - 1; j >= 0; j--) { LevelCodeTreeNode childNode = checkNode.ChildNodes[j]; if (childNode.Id == removeNode.Id) { checkNode.ChildNodes.RemoveAt(j); } } } } }}

 

转载于:https://www.cnblogs.com/fyq891014/p/3308533.html

你可能感兴趣的文章
完美解决VS2003.Net fatal error LNK1201: 写入程序数据库“.pdb”时出错
查看>>
[家里蹲大学数学杂志]第237期Euler公式的美
查看>>
android Animation 动画效果介绍
查看>>
java获取对象属性类型、属性名称、属性值
查看>>
C语言中的可变参数函数 三个点“…”printf( const char* format, ...)
查看>>
念念不忘,ASP.NET MVC显示WebForm网页或UserControl控件
查看>>
对datatable操作,查询
查看>>
积累的VC编程小技巧之打印相关
查看>>
自己不做出点样子,人家想拉你一把都不知你的手在哪里。
查看>>
[JS12] 统计访问次数
查看>>
log4j 使用笔记整理中
查看>>
android hook getdeceiveid
查看>>
FireDAC 下的 Sqlite [3] - 获取数据库的基本信息
查看>>
Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本号的开发环境
查看>>
ISO/IEC 14496 文档内容简介, MPEG标准
查看>>
Android解析Json速度最快的库:json-smart
查看>>
Form_Form标准控件Folder开发解析(案列)
查看>>
启明星请假系统里,计算工作日的实现
查看>>
唐伯虎
查看>>
php excel类 phpExcel使用方法介绍
查看>>