操作插件概览
如下是一个典型的操作插件定义代码:
C#
using System;
using System.Collections.Generic; using System.Linq; using System.Text;
using Kingdee.BOS; using Kingdee.BOS.Util;
using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
namespace SamplePlugIn.ServicePlugIn {
///
///操作服务端插件示例 /// ///
/// 1. 示例如何强制要求加载某字段
/// 2. 示例如何注入校验器,校验器可以通用,为避免在各操作中重复编码,剥离出来,然后各操作注入剥离出的校验器
/// 3. 说明一些关键事件的用途 ///
[System.ComponentModel.Description(\操作服务端插件示例\)] publicclassOperationPlugSample : AbstractOperationServicePlugIn {
///
///操作初始化时,确认操作执行参数 ///
///
publicoverridevoid OnPrepareOperationServiceOption(
OnPrepareOperationServiceEventArgs e)
{
base.OnPrepareOperationServiceOption(e); }
///
///数据加载前,确保需要的属性被加载 ///
///
///在列表上执行操作时,单据的字段并没有被完全加载。 ///如果操作插件用到了未被加载的字段,一定会中断; ///本事件允许插件,强制要求加载某些字段,避免中断 ///
publicoverridevoid OnPreparePropertys(PreparePropertysEventArgs e) {
// 如下代码行,指定字段xxxxx的Key,强制要求加载字段 e.FieldKeys.Add(\); }
///
///操作执行前,加载操作校验器 ///
///
///在系统开始执行校验前,插件可以追加自己的校验器进入操作校验器集合 ///
publicoverridevoid OnAddValidators(AddValidatorsEventArgs e) {
// 如下代码行,示例加入自定义的校验器
// 自定义的校验器,必须从基类 Kingdee.BOS.Core.Validation.AbstractValidator 派生 e.Validators.Add(newOperationSampleValidator()); }
#region接下来按照事件的执行事件顺序,由前向后逐一介绍各事件
///
///操作执行前,事务开始前事件 ///
///
/// 1. 此事件在操作校验之后、操作实现代码之前执行
/// 2. 此事件在操作事务之前,即此事件中的数据库处理,不受操作的事务保护 /// 3. 通常此事件,也可以用来进行数据校验 ///
publicoverridevoid BeforeExecuteOperationTransaction(
BeforeExecuteOperationTransaction e)
{ // TODO: ....
// 如下代码,示意校验不通过时,终止操作的执行 e.CancelMessage = \测试终止操作执行\; e.Cancel = true; }
///
///操作执行前,事务开始后事件 ///
///
/// 1. 此事件在操作校验之后 /// 2. 此事件在操作事务开始之后 /// 3. 此事件在操作执行代码之前
/// 4. 此事件中的数据库处理,受操作的事务保护
/// 5. 通常此事件,可以用来做数据准备,在操作之前,提前写数据到库 ///
publicoverridevoid BeginOperationTransaction(BeginOperationTransactionArgs e) {
// TODO: 进行数据准备,甚至写预处理数据到数据库 }
///
///操作执行后,事务结束前 ///
///
/// 1. 此事件在操作执行代码之后,操作的内部逻辑已经执行完毕 /// 2. 此事件在操作事务提交之前
/// 3. 此事件中的数据库处理,受操作的事务保护
/// 4. 通常此事件,可以用来做同步数据,如同步生成其他单据,而且需要受事务保护 ///
publicoverridevoid EndOperationTransaction(EndOperationTransactionArgs e) {
// TODO:进行同步数据处理 }
///
///操作执行后,事务结束后 ///
///
/// 1. 此事件在操作执行后,操作的内部逻辑已经执行完毕; /// 2. 此事件在操作事务提交之后;
/// 3. 此事件中的数据库处理,不受操作的事务保护
/// 4. 通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需影响操作 ///
publicoverridevoid AfterExecuteOperationTransaction(
AfterExecuteOperationTransaction e)
{
// TODO:对操作结果进行修订,使提示更加人性化 }
#endregion }
///
///操作校验器(示例) ///
[System.ComponentModel.Description(\操作校验器(示例)\)]
classOperationSampleValidator : Kingdee.BOS.Core.Validation.AbstractValidator {
#region重载函数
///
///校验主实体,以此实体数据包进行循环,逐行校验 ///
publicoverridestring EntityKey { get
{
// 根据实际校验要求,返回单据头或者单据体Key return\; } }
///
///执行校验,把校验结果注入到validateContext中 ///
///
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
\, // 错误编码,可以任意设定一个字符,主要用于追查错误来源 \错误的详细提示信息\, // 错误的详细提示信息 \错误摘要\, // 错误的简明提示信息
Kingdee.BOS.Core.Validation.ErrorLevel.Error)); // 错误级别:警告、
错误...
} }
#endregion重载函数 } }
如何启用操作插件
插件编写完毕,类库编译通过后,把类库文件复制到K/3 Cloud站点目录的\\Bin子目录;
然后进入BOS设计器,打开单据操作配置界面,配置服务插件:
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库操作插件示例代码(2)在线全文阅读。
相关推荐: