在业务单据调用物料供需状态查询简易方法
金蝶云社区-战斗车
战斗车
7人赞赏了该文章 2256次浏览 未经作者许可,禁止转载编辑于2018年04月17日 10:19:27

鉴于许多业务单据上有物料供需状态查询需求,目前有收到需求是将查询物料供需状态作为一个服务供配置即可调用。但因为物料供需状态过滤条件设置比较灵活,却只有物料设置能够对于各业务单据有通用性,因此针对具体单据,目前较好的办法是用二开的办法来实现调用。本贴示例采购订单调用物料供需状态查询的方法。

一、在采购订单上添加主菜单,标识取为tbMtrlDSStatus:

二、注册采购订单表单插件,作用是通过捕获点击主菜单事件,用ShowForm方式调用物料供需状态查询,并将当前单据上的物料数据传递过去。插件示例代码如下:
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.K3.Core.MFG.EntityHelper;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;

namespace XY.KK.JCCust.K3.PlugIn.FormEdit
{
[Description("Cus采购订单-表单插件")]
public class Cus_PurOrder : AbstractBillPlugIn
{
public override void BarItemClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BarItemClickEventArgs e)
{
base.BarItemClick(e);

if (e.BarItemKey.EqualsIgnoreCase("tbMtrlDSStatus"))
{
DynamicObjectCollection entrys = this.View.Model.DataObject["POOrderEntry"] as DynamicObjectCollection;
List mtrlMasterIds = entrys.Where(w=>w.GetDynamicValue("MaterialId")!= null)
.Select(s=>s.GetDynamicValue("MaterialId").GetDynamicValue("MsterId")).Distinct().ToList();

DynamicFormShowParameter para = new DynamicFormShowParameter();
para.OpenStyle.ShowType = ShowType.MainNewTabPage;
para.FormId = "PLN_SupplyDemandStateRpt"; //物料供需状态表单标识
para.PageId = SequentialGuid.NewGuid().ToString();
para.ParentPageId = this.View.PageId;
para.CustomComplexParams.Add("DSMaterialIds", mtrlMasterIds); //传递物料MasterIds
this.View.ShowForm(para);
}
}

}
}

三、在(在生产制造->计划管理->动态表单->过滤条件框下)物料供需状态过滤界面注册表单插件,主要作用是用于承接上一步采购订单传递过来的物料编码,并赋值到物料范围框中。插件示例代码如下:
using Kingdee.BOS.Core.CommonFilter.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;

namespace XY.KK.JCCust.K3.PlugIn.FormEdit
{
[Description("Cus物料供需状态-过滤插件")]
public class Cus_MtrlDSStatusFilter : AbstractCommonFilterPlugIn
{
public override void AfterBindData(EventArgs e)
{
base.AfterBindData(e);

object mtrlObjs;
Dictionary openParam = this.View.OpenParameter.GetCustomParameters();
if (!openParam.TryGetValue("DSMaterialIds", out mtrlObjs) && this.View.ParentFormView != null)
{
openParam = this.View.ParentFormView.OpenParameter.GetCustomParameters();
openParam.TryGetValue("DSMaterialIds", out mtrlObjs);
}

if (mtrlObjs != null)
{
List mtrlMasterIds = (List)mtrlObjs;
this.View.Model.SetValue("FMaterialIds", mtrlMasterIds);
}
}
}
}

实现效果如下图:

通过以上三步,即可在单据界面自由调用物料供需状态查询,示例代码经测试OK,如有疑问,欢迎跟帖讨论。