单据转换插件--源单内码数据解析为过滤条件事件(OnInSelectedRow )原创
金蝶云社区-eris
eris
2人赞赏了该文章 394次浏览 未经作者许可,禁止转载编辑于2023年09月20日 09:11:55

一、说明

1、OnInSelectedRow 源单内码数据解析为过滤条件事件,既把源单内码转换为取数条件后触发,可以对其进行干预。

2、事件参数InSelectedRowEventArgs相关属性:

Context:输入参数,上下文信息

SourceBusinessInfo 输入参数,源单元数据

SelectedRows 输入参数,源单下推数据

PkKey In子句的主键字段Key,按整单下推则为单据主键,按单据体下推则为单据体主键

InSelectedRowsSQL 根据下推数据产生的sql条件子句, 可以对其进行干预,增加自定义条件

SqlParamPKValues 输出参数,可以对其进行干预,增加自定义参数,跟JoinTable一起使用

JoinTable 输出参数,可以对其进行干预,增加连接临时表,依赖SqlParamPKValues有值

二、代码示例

using System;
using System.ComponentModel;
using System.Text;
using System.Linq;
using Kingdee.BOS.Core;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
namespace Kingdee.BOS.TestPlugIn.BillABillB
{
    [HotUpdate]
    [Description("单据转换插件")]
    public class BillConvertPlugIn : AbstractConvertPlugIn
    {
        public override void OnInSelectedRow(InSelectedRowEventArgs e)
        {
            base.OnInSelectedRow(e);
            var billPKKey = e.SourceBusinessInfo.GetForm().PkFieldName;
            //整单下推, 如果内码包含9999,则确保有内码10000
            if (e.PkKey.EqualsIgnoreCase(billPKKey))
            {
                var pkValues = e.SelectedRows.Select(x => ObjectUtils.Object2Int64(x.PrimaryKeyValue)).ToList();
                if (pkValues.Contains(9999) && pkValues.Contains(10000) == false)
                {
                    pkValues.Add(10000);
                }
                e.InSelectedRowsSQL = string.Format(" {0} in ({1})", e.PkKey, string.Join(",", pkValues));
            }
            else //按分录下推, 如果分录内码包含1000,则确保有分录内码9999
            {
                var entryPkValues = e.SelectedRows.Select(x => ObjectUtils.Object2Int64(x.EntryPrimaryKeyValue)).ToList();
                if (entryPkValues.Contains(10000) && entryPkValues.Contains(9999) == false)
                {
                    entryPkValues.Add(9999);
                }
                e.InSelectedRowsSQL = string.Format(" {0} in ({1})", e.PkKey, string.Join(",", entryPkValues));
            }
        }
    }
}



赞 2