privateList
DynamicObject objFieldValue = null; List
objFieldValue = dyObj[\] asDynamicObject;
msgStr.Add(objFieldValue == null ? \ : objFieldValue[\].ToString());
objFieldValue = dyObj[\] asDynamicObject;
msgStr.Add(objFieldValue == null ? \ : objFieldValue[\].ToString());
objFieldValue = dyEntry[\] asDynamicObject; string locName = _locPlaceField.GetDisplayName(objFieldValue); msgStr.Add(locName == null ? \ : locName);
objFieldValue = dyEntry[\] asDynamicObject;
msgStr.Add(objFieldValue == null ? \ : objFieldValue[\].ToString());
objFieldValue = dyEntry[\] asDynamicObject;
string auxProperyName = _auxPropertyField.GetDisplayName(objFieldValue); msgStr.Add(auxProperyName == null ? \ : auxProperyName);
msgStr.Add(dyEntry[\] == null ? \ : dyEntry[\].ToString()); msgStr.Add(dyEntry[\].IsNullOrEmptyOrWhiteSpace() ? \ :
Convert.ToDateTime(dyEntry[\]).ToShortDateString());
msgStr.Add(dyEntry[\].IsNullOrEmptyOrWhiteSpace() ? \ :
Convert.ToDateTime(dyEntry[\]).ToShortDateString());
objFieldValue = dyEntry[\] asDynamicObject; msgStr.Add(objFieldValue == null ? \ : objFieldValue[\].ToString());
objFieldValue = dyEntry[\] asDynamicObject;
msgStr.Add(objFieldValue == null ? \ : objFieldValue[\].ToString());
string ownerTypeName =
_ownerTypeField.GetEnumItemName(dyObj[\].ToString());
msgStr.Add(ownerTypeName);
objFieldValue = dyObj[\] asDynamicObject;
msgStr.Add(objFieldValue == null ? \ : objFieldValue[\].ToString());
string keeperTypeName = _keeperTypeField.GetEnumItemName(dyObj[\].ToString()); msgStr.Add(keeperTypeName);
objFieldValue = dyObj[\] asDynamicObject;
msgStr.Add(objFieldValue == null ? \ : objFieldValue[\].ToString());
return msgStr; } }
OnPreparePropertys
在操作初始化之后,加载待处理的单据数据之前触发。 用于指定在加载单据数据时,需加载的字段;
语法
虚方法定义 C# publicvirtualvoid OnPreparePropertys(PreparePropertysEventArgs e); 参数说明
参数e的属性如下: 属性 IList
单据列表,通常仅会加载单据的部分字段,在列表上执行单据操作,操作服务端,仅能够接收到单据的内码,而没有实际数据。
但操作处理,会进行数据校验、字段更新,均需要用到内码之外的其他字段值,因此会要求操作引擎加载单据的数据包。
操作引擎采用按需加载的方式,自动扫描校验条件中需要用到的字段,加载这些字段的数据,其他无关的字段,均不会加载。
操作插件中,需要用到的字段,操作引擎不会扫描到,因此,需要插件自行明确声明需要加载那些字段。
如果插件需要用到的字段,没有在本事件中申明加载,到数据包取字段值时,会触发”属性不存在”的错误。
向参数对象e.FieldList集合中,添加字段Key,要求加载字段值;
案例–采购价目表审核时,同步更新供应商价格
代码来源
Kingdee.K3.SCM.App.Pur.ServicePlugIn.PriceList.Audit
需求背景
采购价目表审核时,需要把采购价目表对应的供应商价格,更新到供应商基础资料的属性上。
实现方案
在审核操作前,要求加载采购价目表上的供应商、默认价格等字段值。
在操作事务中,审核完毕后,同步更新采购价目表上各供应商的默认价格。
关键字
属性不存在使用字段值加载字段值 示例代码 C#
using System;
using System.Collections.Generic; using System.Linq; using System.Text;
using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.Metadata; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Core.Validation;
using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.Resource; using Kingdee.BOS.Core; using Kingdee.BOS.App.Data; using Kingdee.BOS; using System.Data;
usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;
namespace Kingdee.K3.SCM.App.Pur.ServicePlugIn.PriceList {
///
///采购价目表服务端审核操作
///
publicclassAudit : AbstractOperationServicePlugIn {
publicoverridevoid OnPreparePropertys(PreparePropertysEventArgs e) {
e.FieldKeys.Add(\); e.FieldKeys.Add(\);
e.FieldKeys.Add(\);//是否默认价目表
e.FieldKeys.Add(\); e.FieldKeys.Add(\); }
publicoverridevoid EndOperationTransaction(EndOperationTransactionArgs e) {
long supplierId = 0; long priceListId = 0; bool defPriceListId = false;
List
foreach (DynamicObject entity in e.DataEntitys) { if (entity!=null) {
supplierId = Convert.ToInt64(entity[\]); priceListId = Convert.ToInt64(entity[\]);
defPriceListId = Convert.ToBoolean(entity[\]); if (priceListId>0 && supplierId>0 && defPriceListId) {
string sql = string.Format(@\
SET FPRICELISTID= {0} WHERE P.FSupplierid={1}
\,priceListId.ToString(),supplierId.ToString());
sqlArray.Add(sql); } } }
if (sqlArray.Count > 0) {
DBUtils.ExecuteBatch(this.Context, sqlArray, 100); } } }
}
OnAddValidators
在单据数据加载后,数据校验前触发;
用于注册自定义的操作校验器,增加校验;或者移除预置的校验器,避开校验;
语法
虚方法定义 C# publicvirtualvoid OnAddValidators(AddValidatorsEventArgs e); 参数说明
参数e的属性如下: 属性 DynamicObject[] DataEntities Validators 描述 待校验的单据数据包 List
备注
操作引擎会在一个事务中,进行数据的更新,如果更新成功则全部成功,如果某条数据操作失败,则全部失败。
实际业务中,需要把操作失败的数据,单独隔离出来,其他数据,顺利操作成功。为实现此需求,需要在操作事务之前,把不允许操作的数据检查出来,并剔除出数据集合,剩下符合条件,允许操作的数据,丢进事务,进行操作。
本事件,允许向操作中,添加自定义的校验规则,对将要操作的数据进行校验。
校验规则(AbstractServiceValidator)检查出不符合规则的数据后,通过通用的方法,通知操作剔除此数据。
案例–单据反审核时,生成凭证校验
代码来源
Kingdee.K3.SCM.App.ServicePlugIn.VoucherControl.UnAuditVoucherControl Kingdee.K3.SCM.App.Validator.HasVoucherValidator
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库操作插件示例代码(7)在线全文阅读。
相关推荐: