单据转换插件--字段映射事件(OnFieldMapping)原创
4人赞赏了该文章
292次浏览
编辑于2023年11月22日 14:48:23
一、说明
1、字段映射事件,在每个字段赋值前触发,可以对每个字段将要赋的值进行干预,
此事件默认不触发,需要在字段映射前事件启用才会触发。
2、事件参数FieldMappingEventArgs,属性说明
1)TargetField 即将赋值的目标字段
2)TargetExtendDataEntitySet 目标单据数据包扩展集合
3)ExtendedDataEntity 目标字段所在的实体当前数据包
4)ConvertSource 3对应来源数据包,为List<DynamicObject>类型
5)MapValue 将给目标字段要赋的值
6)Cancel 取消对此目标字段干预
3、主要作用
1)通过对插件参数中的MapValue属性值进行干预,达到对目标字段赋值干预
二、示例
1、说明
1)在插件中启用字段映射事件
2)如果是备注字段赋值,数值字段值大于10情况下,被备注字段加上后缀"FFF"
2、转换插件代码
using System; using System.ComponentModel; using System.Text; using System.Linq; using System.Collections.Generic; using Kingdee.BOS.Core; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; namespace Kingdee.BOS.TestPlugIn.BillABillB { [HotUpdate] [Description("单据转换插件")] public class BillConvertPlugIn : AbstractConvertPlugIn { /// <summary> /// 在字段映射前事件中启用字段映射事件 /// </summary> /// <param name="e"></param> public override void OnBeforeFieldMapping(BeforeFieldMappingEventArgs e) { base.OnBeforeFieldMapping(e); e.FireFieldMappingEvent = true; } /// <summary> /// 字段映射事件 /// </summary> /// <param name="e"></param> public override void OnFieldMapping(FieldMappingEventArgs e) { base.OnFieldMapping(e); //如果当前分录的数量值大于10,则对备注字段加上特定后缀"FFF" //特别注意,如果FQty还没有赋值,则e.ExtendedDataEntity中取不到,则可以从来源数据包中取e.ConvertSource if (e.TargetField.Key.EqualsIgnoreCase("FRemark")) { var currDataObj = e.ExtendedDataEntity.DataEntity; int fqty = 0; //方式一,直接从当前被赋值的数据包中取 fqty = ObjectUtils.Object2Int(currDataObj["FQty"]); //方式二,从来源数据包中取FQTtry var srcDBDatas = e.ConvertSource as List<DynamicObject>; if(srcDBDatas.IsEmpty()==false) { fqty = ObjectUtils.Object2Int(srcDBDatas[0]["FQty"]); } // if (fqty > 10) { e.MapValue = string.Format("{0}_FFF", e.MapValue); } } } } }
推荐阅读