代码实现操作校验,需要派生操作插件基类,以及实现一个校验器。

代码段1:实现操作插件基类,该插件编译通过后,需要到BOS IDE中,打开单据,注册到单据的操作上。

  1. /// <summary>

  2. /// 操作服务端插件示例

  3. /// </summary>

  4. /// <remarks>

  5. /// 1. 示例如何强制要求加载某字段

  6. /// 2. 示例如何注入校验器,校验器可以通用,为避免在各操作中重复编码,剥离出来,然后各操作注入剥离出的校验器

  7. /// 3. 说明一些关键事件的用途

  8. /// </remarks>

  9. [System.ComponentModel.Description("操作服务端插件示例")]

  10. public class OperationPlugSample : Kingdee.BOS.Core.DynamicForm.PlugIn.AbstractOperationServicePlugIn

  11. {

  12. /// <summary>

  13. /// 数据加载前,确保需要的属性被加载

  14. /// </summary>

  15. /// <param name="e"></param>

  16. /// <remarks>

  17. /// 在列表上执行操作时,单据的字段并没有被完全加载。

  18. /// 如果操作插件用到了未被加载的字段,一定会中断;

  19. /// 本事件允许插件,强制要求加载某些字段,避免中断

  20. /// </remarks>

  21. public override void OnPreparePropertys(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.PreparePropertysEventArgs e)

  22. {

  23. // 如下代码行,指定字段xxxxx的Key,强制要求加载字段

  24. e.FieldKeys.Add("xxxxx");

  25. }

  26. /// <summary>

  27. /// 操作执行前,加载操作校验器

  28. /// </summary>

  29. /// <param name="e"></param>

  30. /// <remarks>

  31. /// 在系统开始执行校验前,插件可以追加自己的校验器进入操作校验器集合

  32. /// </remarks>

  33. public override void OnAddValidators(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.AddValidatorsEventArgs e)

  34. {

  35. // 如下代码行,示例加入自定义的校验器

  36. // 自定义的校验器,必须从基类 Kingdee.BOS.Core.Validation.AbstractValidator 派生

  37. e.Validators.Add(new OperationSampleValidator());

  38. }

  39. #region 接下来按照事件的执行事件顺序,由前向后逐一介绍各事件

  40. /// <summary>

  41. /// 操作执行前,事务开始前事件

  42. /// </summary>

  43. /// <param name="e"></param>

  44. /// <remarks>

  45. /// 1. 此事件在操作校验之后、操作实现代码之前执行

  46. /// 2. 此事件在操作事务之前,即此事件中的数据库处理,不受操作的事务保护

  47. /// 3. 通常此事件,也可以用来进行数据校验

  48. /// </remarks>

  49. public override void BeforeExecuteOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BeforeExecuteOperationTransaction e)

  50. {

  51. // TODO: ....

  52. // 如下代码,示意校验不通过时,终止操作的执行

  53. e.CancelMessage = "测试终止操作执行";

  54. e.Cancel = true;

  55. }

  56. /// <summary>

  57. /// 操作执行前,事务开始后事件

  58. /// </summary>

  59. /// <param name="e"></param>

  60. /// <remarks>

  61. /// 1. 此事件在操作校验之后

  62. /// 2. 此事件在操作事务开始之后

  63. /// 3. 此事件在操作执行代码之前

  64. /// 4. 此事件中的数据库处理,受操作的事务保护

  65. /// 5. 通常此事件,可以用来做数据准备,在操作之前,提前写数据到库

  66. /// </remarks>

  67. public override void BeginOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BeginOperationTransactionArgs e)

  68. {

  69. // TODO: 进行数据准备,甚至写预处理数据到数据库

  70. }

  71. /// <summary>

  72. /// 操作执行后,事务结束前

  73. /// </summary>

  74. /// <param name="e"></param>

  75. /// <remarks>

  76. /// 1. 此事件在操作执行代码之后,操作的内部逻辑已经执行完毕

  77. /// 2. 此事件在操作事务提交之前

  78. /// 3. 此事件中的数据库处理,受操作的事务保护

  79. /// 4. 通常此事件,可以用来做同步数据,如同步生成其他单据,而且需要受事务保护

  80. /// </remarks>

  81. public override void EndOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EndOperationTransactionArgs e)

  82. {

  83. // TODO:进行同步数据处理

  84. }

  85. /// <summary>

  86. /// 操作执行后,事务结束后

  87. /// </summary>

  88. /// <param name="e"></param>

  89. /// <remarks>

  90. /// 1. 此事件在操作执行后,操作的内部逻辑已经执行完毕;

  91. /// 2. 此事件在操作事务提交之后;

  92. /// 3. 此事件中的数据库处理,不受操作的事务保护

  93. /// 4. 通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需影响操作

  94. /// </remarks>

  95. public override void AfterExecuteOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.AfterExecuteOperationTransaction e)

  96. {

  97. // TODO:进行同步数据处理,如果同步失败,不影响操作的结果

  98. }

  99. #endregion

  100. }

代码段2:校验器的实现

  1. /// <summary>

  2. /// 操作校验器(示例)

  3. /// </summary>

  4. [System.ComponentModel.Description("操作校验器(示例)")]

  5. class OperationSampleValidator : Kingdee.BOS.Core.Validation.AbstractValidator

  6. {

  7. #region 重载函数

  8. /// <summary>

  9. /// 校验主实体,以此实体数据包进行循环,逐行校验

  10. /// </summary>

  11. public override string EntityKey

  12. {

  13. get

  14. {

  15. // 根据实际校验要求,返回单据头或者单据体Key

  16. return "FBillHead";

  17. }

  18. }

  19. /// <summary>

  20. /// 执行校验,把校验结果注入到validateContext中

  21. /// </summary>

  22. /// <param name="dataEntities"></param>

  23. /// <param name="validateContext"></param>

  24. /// <param name="ctx"></param>

  25. public override void Validate(

  26. Kingdee.BOS.Core.ExtendedDataEntity[] dataEntities,

  27. Kingdee.BOS.Core.Validation.ValidateContext validateContext,

  28. Kingdee.BOS.Context ctx)

  29. {

  30. foreach (var dataEntity in dataEntities)

  31. {

  32. // TODO: 逐个数据包执行校验代码

  33. // 如下代码,示意如何注入校验提示,后续操作,会自动避开校验没通过的数据包

  34. validateContext.AddError(dataEntity.DataEntity,

  35. new Kingdee.BOS.Core.Validation.ValidationErrorInfo(

  36. "出错字段.Key",     // 出错的字段Key,可以空

  37. Convert.ToString(dataEntity.DataEntity[0]), // 数据包内码,必填,后续操作会据此内码避开此数据包

  38. dataEntity.DataEntityIndex,     // 出错的数据包在全部数据包中的顺序

  39. dataEntity.RowIndex,            // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0

  40. "E1",                           // 错误编码,可以任意设定一个字符,主要用于追查错误来源

  41. "错误的详细提示信息",            // 错误的详细提示信息

  42. "错误摘要",                     // 错误的简明提示信息

  43. Kingdee.BOS.Core.Validation.ErrorLevel.Error));     // 错误级别:警告、错误...

  44. }

  45. }

  46. #endregion 重载函数

  47. }

转载于:https://blog.51cto.com/yataigp/2108360

知识分享:如何用插件实现操作校验相关推荐

  1. 企业知识分享系统的设计与实现

    摘  要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, ...

  2. 查看linux硬核上的线程,给大家分享一点基础硬核知识哦 Linux的基础指令操作Lin...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 给大家分享一点基础硬核知识哦 Linux的基础指令操作L inux的基础指令操作 Linux的指令下达方式很简单,只需要记得几个重要的概念就可以 l: c ...

  3. 本周知识分享会议总结

    2020年7月第三周知识分享汇总 DQ的项目经验分享 项目过程的介绍 项目中遇到的问题 项目中的知识分享 项目中的工具分享 HXD的数据仓库知识分享 数据仓库 ETL的概念 kettle的案例 课程质 ...

  4. springboot中药知识分享网站设计 毕业设计-附源码201818

    摘  要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用.简单的流程.便捷可靠的支付方式.快捷畅通的物流快递.安全的信息保护都使得电子 ...

  5. springboot中药知识分享网站毕业设计源码201818

    摘  要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用.简单的流程.便捷可靠的支付方式.快捷畅通的物流快递.安全的信息保护都使得电子 ...

  6. 企业知识分享+团队协作神器之Confluence

    目录​​​ 一.Confluence简介 二.知识库软件对比 三.快速安装confluence 7.4.6版本 四.confluence基本操作简介 4.1.创建空间(Space) 4.2.配置空间权 ...

  7. 知识分享之Ubuntu——修改DNS

    知识分享之Ubuntu--修改DNS 背景 日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家, ...

  8. 创立创造创建的区别_【干货|知识分享】Solidworks与Rhino有什么区别呢?

    ## [干货|知识分享]Solidworks与Rhino有什么区别呢? 三维建模软件有很多,其中常用.功能相似的就是Solidworks和Rhino,这两个对于大学生们最为熟悉的.最开始接触的三维建 ...

  9. 关于域用户的离线缓存登录知识分享

    关于域用户的离线缓存登录知识分享 微软设计缓存登录的目的? 缓存登录主要是为了解决当公司域控制器发生故障联系不上DC或用户拿笔记本电脑回家不拔×××的情况下,依然能够登录到系统,进行办公.如果用户登录 ...

最新文章

  1. 大学士带你领略“大院大所”黑科技!
  2. 理解随机森林:基于Python的实现和解释
  3. Fegion-3覆写Fegion的默认配置及Fegion的日志
  4. 颠覆认知!关于c²= b² + a²,你不知道的N个事实
  5. 找出数组中第i小元素(时间复杂度Θ(n)--最坏情况为线性的选择算法
  6. input长度随输入内容动态变化 input光标定位在最右侧
  7. 图神经网络,这到底是个什么?
  8. python调用jar包的模块_使用 Python 的 JPype 模块调用 Jar 包
  9. 如何让 AI 产生意识?
  10. AD smart pdf 中文丢失
  11. 主题模型:LDA原理详解与应用
  12. Harbor 核心服务不可用---故障排除
  13. 电脑桌面云便签怎么新建分类文件夹标签?
  14. 使用Ps为图像批量制作水印
  15. 华为服务器故障灯不开机_华为手机开不了机指示灯亮怎么办?
  16. 使用redis+切面完成分布式锁
  17. 用图章工具 修改数字
  18. FFmpeg视频工具简洁教程
  19. qcustomplot圆_QCustomplot使用分享(二) 源码解读
  20. python文件换行符_python3 读写文件换行符的方法

热门文章

  1. NEFU_117素数个数的位数
  2. oracle海量数据中提升创建索引的速度
  3. poj 1724 有限制的最短距离(优先队列+链表)
  4. ASP.NET 会话状态概览
  5. 程序中变量分布的区域总结 堆 栈 字符常量区 全局数据区 静态存储区
  6. 大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验---大数据之hadoop3.x工作笔记0078
  7. java零碎要点013---JAVA执行js_java执行JavaScript_java执行js引擎不能识别document浏览器内置对象解决办法
  8. SpringCloud_005_Maven中的Scope详解_准备01
  9. pytorch 训练face出现的问题
  10. 国庆节前梳理一下需要自己干的工作