using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.Metadata.FormElement; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.ServiceHelper; using Kingdee.K3.BD.NewCode.Core.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; using Kingdee.BOS.Util; using System.ComponentModel; using Kingdee.BOS; using Kingdee.BOS.Core; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Core.Metadata.EntityElement; namespace GZ.LJY000.Biori.PUR_ReceiveBill { [Description("收料通知单下推采购入库单#"), HotUpdate] public class BillConvertEventPlugInEx : AbstractConvertPlugIn { public override void AfterConvert(AfterConvertEventArgs e) { base.AfterConvert(e); HandleScanEntry(e); } private void HandleScanEntry(AfterConvertEventArgs e) { var paraDIC = this.Option.GetVariables(); if (!paraDIC.ContainsKey("ScanEntry")) return; var FInStockEntryItem = paraDIC["ScanEntry"] as DynamicObjectCollection; if (FInStockEntryItem == null) return; var FInStockEntry = e.TargetBusinessInfo.GetEntity("FInStockEntry"); //得到单据数据包扩展集合 var billDynObjExs = e.Result.FindByEntityKey("FBillHead"); var tView = CreateView(e.TargetBusinessInfo.GetForm().Id);//创建目标单据视图 foreach (var billDynObjEx in billDynObjExs) { var billDynObj = billDynObjEx.DataEntity; //#单个单据数据包 tView.Model.DataObject = billDynObj; //#给模型设置数据包 var entryDynObjs = FInStockEntry.DynamicProperty.GetValue(billDynObj) as DynamicObjectCollection; //#得到字段所在实体的数据包 var rowIndex = 0;//#分录行索引 foreach (var rowObj in entryDynObjs) { //#查找对应分录标识 var fRealQtyField = e.TargetBusinessInfo.GetField("FPriceUnitQty"); //#数量 var Link = rowObj["FInStockEntry_Link"] as DynamicObjectCollection;// #找出LK关系表找出对应的源单内码数据 var entity = FInStockEntryItem.FirstOrDefault(w => w["ENTRYID"].Long2Int() == Link[0]["SId"].Long2Int()); if (entity != null) { tView.Model.SetValue(fRealQtyField, rowObj, entity["Qty"]);// #这字段值并且会触发值更新事件 tView.InvokeFieldUpdateService(fRealQtyField.Key, rowIndex);// #调用实体服务规则 } rowIndex++; } } } /// /// 创建单据视图 /// /// /// /// private IDynamicFormView CreateView(string formId) { FormMetadata metadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, formId); var OpenParameter = CreateOpenParameter(this.Context, metadata); var Provider = metadata.BusinessInfo.GetForm().GetFormServiceProvider(true); string importViewClass = "Kingdee.BOS.Web.Import.ImportBillView,Kingdee.BOS.Web"; Type type = Type.GetType(importViewClass); IDynamicFormView view = (IDynamicFormView)Activator.CreateInstance(type); ((IDynamicFormViewService)view).Initialize(OpenParameter, Provider); return view; } /// /// 创建输入参数 /// /// /// /// private BillOpenParameter CreateOpenParameter(Context ctx, FormMetadata metaData) { Form form = metaData.BusinessInfo.GetForm(); BillOpenParameter openPara = new BillOpenParameter(form.Id, metaData.GetLayoutInfo().Id); openPara = new BillOpenParameter(form.Id, string.Empty); openPara.Context = ctx; openPara.ServiceName = form.FormServiceName; openPara.PageId = Guid.NewGuid().ToString(); // 单据 openPara.FormMetaData = metaData; openPara.LayoutId = metaData.GetLayoutInfo().Id; // 操作相关参数 openPara.Status = OperationStatus.ADDNEW; openPara.PkValue = null; openPara.CreateFrom = CreateFrom.Default; openPara.ParentId = 0; openPara.GroupId = ""; openPara.DefaultBillTypeId = null; openPara.DefaultBusinessFlowId = null; // 修改主业务组织无须用户确认 openPara.SetCustomParameter("ShowConfirmDialogWhenChangeOrg", false); // 插件 List plugins = form.CreateFormPlugIns(); openPara.SetCustomParameter(FormConst.PlugIns, plugins); return openPara; } } }