操作插件示例代码.docx
《操作插件示例代码.docx》由会员分享,可在线阅读,更多相关《操作插件示例代码.docx(55页珍藏版)》请在文库网上搜索。
1、操作插件示例代码修订记录Ver. No日期编制修订校对批准修改的章节号V1.020150420丁振华张晋博赖碧云初始版本问题和意见如果你对文档有任何意见、问题或想法,或者你的问题未在此文档中找到答案,请通过电子邮件联系我们jinbo_zhang目录操作插件示例代码1操作插件概要说明3如何创建一个操作插件3操作插件概览5如何启用操作插件10公共属性13BusinessInfo13语法13案例 单据已经生成凭证则禁止反审核13Context15语法15案例 采购调价表审核时自动生效16FormOperation19语法19案例 - 销售订单保存不做信用检查19OperationResult21语法
2、21案例 检查到负库存,提醒用户确认21Option23语法23案例 寄售结算单只在列表上审核时,需检查价格24基类虚方法,可捕获的事件25OnPrepareOperationServiceOption25语法25案例 初始化库存保存26OnPreparePropertys32语法32案例 采购价目表审核时,同步更新供应商价格33OnAddValidators35语法35案例 单据反审核时,生成凭证校验36BeforeExecuteOperationTransaction40语法41案例 销售价目表保存前更新数量区间价格41BeginOperationTransaction44语法45案例 反
3、审核采购退货单,删除关联的内部交易单据45EndOperationTransaction48语法48案例 采购折扣表审核时,同步更新供应商折扣49AfterExecuteOperationTransaction51语法51案例 消耗汇总审核,提示同步生成的物权转移单编号52操作插件概要说明操作插件,用于对操作的执行过程进行干预、控制,以实现自定义扩展功能;如可以为审核操作,附加插件,在审核前,进行数据检查,只有符合条件的数据才允许审核;审核后,进行自动下推,并与审核操作保持在一个事务,如果自动下推失败,则审核回滚,确保数据的完整性。特别说明:请谨慎使用单据维护界面插件的BeforeDoOper
4、ate事件、AfterDoOperate事件,进行操作前后处理。单据维护界面的这两个事件,与操作本身并不是同一事务,如果在AfterDoOperate进行同步数据处理,如果处理失败,则无法回滚数据,从而造成数据不一致。如何创建一个操作插件 创建类库工程,包含插件类定义 引用如下类库(类库文件在K/3 Cloud站点目录Bin)必选的类库文件包括:Kingdee.BOS.dll;Kingdee.BOS.App.dll;Kingdee.BOS.BusinessEntity.dll;Kingdee.BOS.Contracts.dll;Kingdee.BOS.Core.dll;Kingdee.BOS.
5、DataEntity.dll; 在类库中添加一个插件类操作插件概览如下是一个典型的操作插件定义代码: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
6、 / / 操作服务端插件示例 / / / 1. 示例如何强制要求加载某字段 / 2. 示例如何注入校验器,校验器可以通用,为避免在各操作中重复编码,剥离出来,然后各操作注入剥离出的校验器 / 3. 说明一些关键事件的用途 / System.ComponentModel.Description(操作服务端插件示例) public class OperationPlugSample : AbstractOperationServicePlugIn / / 操作初始化时,确认操作执行参数 / / public override void OnPrepareOperationServiceOption
7、(OnPrepareOperationServiceEventArgs e) base.OnPrepareOperationServiceOption(e); / / 数据加载前,确保需要的属性被加载 / / / / 在列表上执行操作时,单据的字段并没有被完全加载。 / 如果操作插件用到了未被加载的字段,一定会中断; / 本事件允许插件,强制要求加载某些字段,避免中断 / public override void OnPreparePropertys(PreparePropertysEventArgs e) / 如下代码行,指定字段xxxxx的Key,强制要求加载字段 e.FieldKeys.
8、Add(xxxxx); / / 操作执行前,加载操作校验器 / / / / 在系统开始执行校验前,插件可以追加自己的校验器进入操作校验器集合 / public override void OnAddValidators(AddValidatorsEventArgs e) / 如下代码行,示例加入自定义的校验器 / 自定义的校验器,必须从基类 Kingdee.BOS.Core.Validation.AbstractValidator 派生 e.Validators.Add(new OperationSampleValidator(); #region 接下来按照事件的执行事件顺序,由前向后逐一介
9、绍各事件 / / 操作执行前,事务开始前事件 / / / / 1. 此事件在操作校验之后、操作实现代码之前执行 / 2. 此事件在操作事务之前,即此事件中的数据库处理,不受操作的事务保护 / 3. 通常此事件,也可以用来进行数据校验 / public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) / TODO: . / 如下代码,示意校验不通过时,终止操作的执行 e.CancelMessage = 测试终止操作执行; e.Cancel = true; / / 操作执行前,
10、事务开始后事件 / / / / 1. 此事件在操作校验之后 / 2. 此事件在操作事务开始之后 / 3. 此事件在操作执行代码之前 / 4. 此事件中的数据库处理,受操作的事务保护 / 5. 通常此事件,可以用来做数据准备,在操作之前,提前写数据到库 / public override void BeginOperationTransaction(BeginOperationTransactionArgs e) / TODO: 进行数据准备,甚至写预处理数据到数据库 / / 操作执行后,事务结束前 / / / / 1. 此事件在操作执行代码之后,操作的内部逻辑已经执行完毕 / 2. 此事件在操
11、作事务提交之前 / 3. 此事件中的数据库处理,受操作的事务保护 / 4. 通常此事件,可以用来做同步数据,如同步生成其他单据,而且需要受事务保护 / public override void EndOperationTransaction(EndOperationTransactionArgs e) / TODO:进行同步数据处理 / / 操作执行后,事务结束后 / / / / 1. 此事件在操作执行后,操作的内部逻辑已经执行完毕; / 2. 此事件在操作事务提交之后; / 3. 此事件中的数据库处理,不受操作的事务保护 / 4. 通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需
12、影响操作 / public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) / TODO:对操作结果进行修订,使提示更加人性化 #endregion / / 操作校验器(示例) / System.ComponentModel.Description(操作校验器(示例)) class OperationSampleValidator : Kingdee.BOS.Core.Validation.AbstractValidator #region 重载函数 / / 校验主实体,以此实
13、体数据包进行循环,逐行校验 / public override string EntityKey get / 根据实际校验要求,返回单据头或者单据体Key return FBillHead; / / 执行校验,把校验结果注入到validateContext中 / / / / public override void Validate( Kingdee.BOS.Core.ExtendedDataEntity dataEntities, Kingdee.BOS.Core.Validation.ValidateContext validateContext, Kingdee.BOS.Context
14、ctx) foreach (var dataEntity in dataEntities) / TODO: 逐个数据包执行校验代码 / 如下代码,示意如何注入校验提示,后续操作,会自动避开校验没通过的数据包 validateContext.AddError(dataEntity.DataEntity, new Kingdee.BOS.Core.Validation.ValidationErrorInfo( 出错字段.Key, / 出错的字段Key,可以空 Convert.ToString(dataEntity.DataEntity0), / 数据包内码,必填,后续操作会据此内码避开此数据包 d
15、ataEntity.DataEntityIndex, / 出错的数据包在全部数据包中的顺序 dataEntity.RowIndex, / 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0 E1, / 错误编码,可以任意设定一个字符,主要用于追查错误来源 错误的详细提示信息, / 错误的详细提示信息 错误摘要, / 错误的简明提示信息 Kingdee.BOS.Core.Validation.ErrorLevel.Error); / 错误级别:警告、错误. #endregion 重载函数 如何启用操作插件插件编写完毕,类库编译通过后,把类库文件复制到K/3 Cloud站点目录的Bin子
16、目录;然后进入BOS设计器,打开单据操作配置界面,配置服务插件:公共属性BusinessInfo单据元数据对象。语法属性定义C#public BusinessInfo BusinessInfo get; private set; 备注可以通过此属性对象,获取单据的各种属性配置,以及所含单据体、字段信息。对于一些公用类的操作插件,不能预先知道将要被应用到那种单据、那种操作上,此时从BusinessInfo对象中获取必要的信息就很重要。案例 单据已经生成凭证则禁止反审核代码来源Kingdee.K3.SCM.App.ServicePlugIn.VoucherControl.UnAuditVouche
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作 插件 示例 代码