单据转换插件--字段映射事件(OnFieldMapping)原创
金蝶云社区-eris
eris
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);
                }
            }
        }
    }
}


赞 4