单据转换插件--源单内码数据解析为过滤条件事件(OnInSelectedRow )原创
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)); } } } }
推荐阅读