知识分享:如何用插件实现操作校验
代码实现操作校验,需要派生操作插件基类,以及实现一个校验器。
代码段1:实现操作插件基类,该插件编译通过后,需要到BOS IDE中,打开单据,注册到单据的操作上。
/// <summary>
/// 操作服务端插件示例
/// </summary>
/// <remarks>
/// 1. 示例如何强制要求加载某字段
/// 2. 示例如何注入校验器,校验器可以通用,为避免在各操作中重复编码,剥离出来,然后各操作注入剥离出的校验器
/// 3. 说明一些关键事件的用途
/// </remarks>
[System.ComponentModel.Description("操作服务端插件示例")]
public class OperationPlugSample : Kingdee.BOS.Core.DynamicForm.PlugIn.AbstractOperationServicePlugIn
{
/// <summary>
/// 数据加载前,确保需要的属性被加载
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 在列表上执行操作时,单据的字段并没有被完全加载。
/// 如果操作插件用到了未被加载的字段,一定会中断;
/// 本事件允许插件,强制要求加载某些字段,避免中断
/// </remarks>
public override void OnPreparePropertys(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.PreparePropertysEventArgs e)
{
// 如下代码行,指定字段xxxxx的Key,强制要求加载字段
e.FieldKeys.Add("xxxxx");
}
/// <summary>
/// 操作执行前,加载操作校验器
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 在系统开始执行校验前,插件可以追加自己的校验器进入操作校验器集合
/// </remarks>
public override void OnAddValidators(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.AddValidatorsEventArgs e)
{
// 如下代码行,示例加入自定义的校验器
// 自定义的校验器,必须从基类 Kingdee.BOS.Core.Validation.AbstractValidator 派生
e.Validators.Add(new OperationSampleValidator());
}
#region 接下来按照事件的执行事件顺序,由前向后逐一介绍各事件
/// <summary>
/// 操作执行前,事务开始前事件
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 1. 此事件在操作校验之后、操作实现代码之前执行
/// 2. 此事件在操作事务之前,即此事件中的数据库处理,不受操作的事务保护
/// 3. 通常此事件,也可以用来进行数据校验
/// </remarks>
public override void BeforeExecuteOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BeforeExecuteOperationTransaction e)
{
// TODO: ....
// 如下代码,示意校验不通过时,终止操作的执行
e.CancelMessage = "测试终止操作执行";
e.Cancel = true;
}
/// <summary>
/// 操作执行前,事务开始后事件
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 1. 此事件在操作校验之后
/// 2. 此事件在操作事务开始之后
/// 3. 此事件在操作执行代码之前
/// 4. 此事件中的数据库处理,受操作的事务保护
/// 5. 通常此事件,可以用来做数据准备,在操作之前,提前写数据到库
/// </remarks>
public override void BeginOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BeginOperationTransactionArgs e)
{
// TODO: 进行数据准备,甚至写预处理数据到数据库
}
/// <summary>
/// 操作执行后,事务结束前
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 1. 此事件在操作执行代码之后,操作的内部逻辑已经执行完毕
/// 2. 此事件在操作事务提交之前
/// 3. 此事件中的数据库处理,受操作的事务保护
/// 4. 通常此事件,可以用来做同步数据,如同步生成其他单据,而且需要受事务保护
/// </remarks>
public override void EndOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EndOperationTransactionArgs e)
{
// TODO:进行同步数据处理
}
/// <summary>
/// 操作执行后,事务结束后
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 1. 此事件在操作执行后,操作的内部逻辑已经执行完毕;
/// 2. 此事件在操作事务提交之后;
/// 3. 此事件中的数据库处理,不受操作的事务保护
/// 4. 通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需影响操作
/// </remarks>
public override void AfterExecuteOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.AfterExecuteOperationTransaction e)
{
// TODO:进行同步数据处理,如果同步失败,不影响操作的结果
}
#endregion
}
代码段2:校验器的实现
/// <summary>
/// 操作校验器(示例)
/// </summary>
[System.ComponentModel.Description("操作校验器(示例)")]
class OperationSampleValidator : Kingdee.BOS.Core.Validation.AbstractValidator
{
#region 重载函数
/// <summary>
/// 校验主实体,以此实体数据包进行循环,逐行校验
/// </summary>
public override string EntityKey
{
get
{
// 根据实际校验要求,返回单据头或者单据体Key
return "FBillHead";
}
}
/// <summary>
/// 执行校验,把校验结果注入到validateContext中
/// </summary>
/// <param name="dataEntities"></param>
/// <param name="validateContext"></param>
/// <param name="ctx"></param>
public override void Validate(
Kingdee.BOS.Core.ExtendedDataEntity[] dataEntities,
Kingdee.BOS.Core.Validation.ValidateContext validateContext,
Kingdee.BOS.Context ctx)
{
foreach (var dataEntity in dataEntities)
{
// TODO: 逐个数据包执行校验代码
// 如下代码,示意如何注入校验提示,后续操作,会自动避开校验没通过的数据包
validateContext.AddError(dataEntity.DataEntity,
new Kingdee.BOS.Core.Validation.ValidationErrorInfo(
"出错字段.Key", // 出错的字段Key,可以空
Convert.ToString(dataEntity.DataEntity[0]), // 数据包内码,必填,后续操作会据此内码避开此数据包
dataEntity.DataEntityIndex, // 出错的数据包在全部数据包中的顺序
dataEntity.RowIndex, // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0
"E1", // 错误编码,可以任意设定一个字符,主要用于追查错误来源
"错误的详细提示信息", // 错误的详细提示信息
"错误摘要", // 错误的简明提示信息
Kingdee.BOS.Core.Validation.ErrorLevel.Error)); // 错误级别:警告、错误...
}
}
#endregion 重载函数
}
转载于:https://blog.51cto.com/yataigp/2108360
知识分享:如何用插件实现操作校验相关推荐
- 企业知识分享系统的设计与实现
摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, ...
- 查看linux硬核上的线程,给大家分享一点基础硬核知识哦 Linux的基础指令操作Lin...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 给大家分享一点基础硬核知识哦 Linux的基础指令操作L inux的基础指令操作 Linux的指令下达方式很简单,只需要记得几个重要的概念就可以 l: c ...
- 本周知识分享会议总结
2020年7月第三周知识分享汇总 DQ的项目经验分享 项目过程的介绍 项目中遇到的问题 项目中的知识分享 项目中的工具分享 HXD的数据仓库知识分享 数据仓库 ETL的概念 kettle的案例 课程质 ...
- springboot中药知识分享网站设计 毕业设计-附源码201818
摘 要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用.简单的流程.便捷可靠的支付方式.快捷畅通的物流快递.安全的信息保护都使得电子 ...
- springboot中药知识分享网站毕业设计源码201818
摘 要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用.简单的流程.便捷可靠的支付方式.快捷畅通的物流快递.安全的信息保护都使得电子 ...
- 企业知识分享+团队协作神器之Confluence
目录 一.Confluence简介 二.知识库软件对比 三.快速安装confluence 7.4.6版本 四.confluence基本操作简介 4.1.创建空间(Space) 4.2.配置空间权 ...
- 知识分享之Ubuntu——修改DNS
知识分享之Ubuntu--修改DNS 背景 日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家, ...
- 创立创造创建的区别_【干货|知识分享】Solidworks与Rhino有什么区别呢?
## [干货|知识分享]Solidworks与Rhino有什么区别呢? 三维建模软件有很多,其中常用.功能相似的就是Solidworks和Rhino,这两个对于大学生们最为熟悉的.最开始接触的三维建 ...
- 关于域用户的离线缓存登录知识分享
关于域用户的离线缓存登录知识分享 微软设计缓存登录的目的? 缓存登录主要是为了解决当公司域控制器发生故障联系不上DC或用户拿笔记本电脑回家不拔×××的情况下,依然能够登录到系统,进行办公.如果用户登录 ...
最新文章
- 大学士带你领略“大院大所”黑科技!
- 理解随机森林:基于Python的实现和解释
- Fegion-3覆写Fegion的默认配置及Fegion的日志
- 颠覆认知!关于c²= b² + a²,你不知道的N个事实
- 找出数组中第i小元素(时间复杂度Θ(n)--最坏情况为线性的选择算法
- input长度随输入内容动态变化 input光标定位在最右侧
- 图神经网络,这到底是个什么?
- python调用jar包的模块_使用 Python 的 JPype 模块调用 Jar 包
- 如何让 AI 产生意识?
- AD smart pdf 中文丢失
- 主题模型:LDA原理详解与应用
- Harbor 核心服务不可用---故障排除
- 电脑桌面云便签怎么新建分类文件夹标签?
- 使用Ps为图像批量制作水印
- 华为服务器故障灯不开机_华为手机开不了机指示灯亮怎么办?
- 使用redis+切面完成分布式锁
- 用图章工具 修改数字
- FFmpeg视频工具简洁教程
- qcustomplot圆_QCustomplot使用分享(二) 源码解读
- python文件换行符_python3 读写文件换行符的方法
热门文章
- NEFU_117素数个数的位数
- oracle海量数据中提升创建索引的速度
- poj 1724 有限制的最短距离(优先队列+链表)
- ASP.NET 会话状态概览
- 程序中变量分布的区域总结 堆 栈 字符常量区 全局数据区 静态存储区
- 大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验---大数据之hadoop3.x工作笔记0078
- java零碎要点013---JAVA执行js_java执行JavaScript_java执行js引擎不能识别document浏览器内置对象解决办法
- SpringCloud_005_Maven中的Scope详解_准备01
- pytorch 训练face出现的问题
- 国庆节前梳理一下需要自己干的工作