计划运算向导选需求单据时,经常有客户有个性化的需求,需要对目标单据进行过滤。但是由于这里选单不同于普通的F8,里面逻辑较为复杂,并且设计成不允许外部干涉标准业务逻辑。
在此前提下,仍然要实现对目标单据进行个性过滤的需求时,本帖将提供一种可行的方案。
就是在目标单中增加列表插件,然后检测到如果是计划运算向导过来选单的,则添加个性过滤条件。
本例以目标销售订单(其余预测单,MPS计划订单及组织间需求单类似)为例,创建如下(经验证OK的)列表插件:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.List.PlugIn;
namespace Kingdee.K3.MFG.PLN.Business.PlugIn.Bill
{
[Description("销售订单MRP列表插件")]
public class SOMRPList : AbstractListPlugIn
{
///
/// 准备过滤参数事件,一般将前置并且难于配置的过滤条件写在此方法
///
///
public override void PrepareFilterParameter(BOS.Core.List.PlugIn.Args.FilterArgs e)
{
base.PrepareFilterParameter(e);
Dictionary
//检测到打开本窗体的是MRP运算向导界面,则对过滤条件进行个性化设置
if (this.View.ParentFormView != null && this.View.ParentFormView.BusinessInfo.GetForm().Id.EqualsIgnoreCase("PLN_MRPCALCWIZARD"))
{
//根据实际的业务规则,拼出个性业务过滤条件
//条件遵循WHERE条件语法,注意用的是字段标识,例如FSaleOrgId=1
//标准过滤条件(即e.FilterString原有值)不建议更改,以免引出数据问题,只在此基础上增加二开过滤条件。
//本例设置过滤最近两周的销售订单进行计划运算,注意周是以周日为第一天,以下表达式并不是最近14天
//如果要选取最近14天,则表达式应为:DATEDIFF(D, FDATE, GETDATE())<=14
string newFilter = " DATEDIFF(WK, FDATE, GETDATE())<2 ";
//将新过滤条件追加到标准过滤条件中
e.FilterString = e.FilterString.JoinFilterString(newFilter);
}
}
}
}
以上,插件代码主结构可直接使用,如有问题,欢迎跟帖讨论。
推荐阅读