import clr clr.AddReference("System") clr.AddReference("System.Core") clr.AddReference("Kingdee.BOS") clr.AddReference("Kingdee.BOS.Core") clr.AddReference("Kingdee.BOS.DataEntity") clr.AddReference("Kingdee.BOS.ServiceHelper") clr.AddReference("Newtonsoft.Json") from Kingdee.BOS import * from Kingdee.BOS.Core import * from Kingdee.BOS.Core.Bill import * from Kingdee.BOS.Core.DynamicForm import * from Kingdee.BOS.Core.DynamicForm.PlugIn import * from Kingdee.BOS.Core.Metadata import * from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn import * from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args import * from Kingdee.BOS.Core.Metadata.FormElement import * from Kingdee.BOS.Orm.DataEntity import * from Kingdee.BOS.Orm.Metadata.DataEntity import * from Kingdee.BOS.ServiceHelper import * from System import * from System.Collections.Generic import * from System.ComponentModel import * from System.Linq import * from Newtonsoft.Json import * from Newtonsoft.Json.Linq import * #单据转换之后事件 def AfterConvert(e): paraDIC=this.Option.GetVariables(); if paraDIC.ContainsKey("ScanEntry") == False: return; FInStockEntryItem = paraDIC["ScanEntry"] if FInStockEntryItem is None: return; FInStockEntry = e.TargetBusinessInfo.GetEntity("FInStockEntry"); #得到单据数据包扩展集合 billDynObjExs = e.Result.FindByEntityKey("FBillHead"); tView = CreateView(e.TargetBusinessInfo.GetForm().Id);#创建目标单据视图 for billDynObjEx in billDynObjExs:#循环数据包扩展集合 billDynObj = billDynObjEx.DataEntity; #单个单据数据包 tView.Model.DataObject = billDynObj; #给模型设置数据包 entryDynObjs = FInStockEntry.DynamicProperty.GetValue(billDynObj); #得到字段所在实体的数据包 rowIndex = 0;#分录行索引 for rowObj in entryDynObjs: #循环分录 dynObj = entryDynObjs[rowIndex]; #原原分录行数据包 #查找对应分录标识 fRealQtyField = e.TargetBusinessInfo.GetField("FRealQty"); #数量 # entity = FirstOrDefault(Where(FInStockEntryItem,lambda w: w["FENTRYID"].ToString()==Link[0]["SId"].ToString())) entity = FInStockEntryItem[0] if entity != None : tView.Model.SetValue(fRealQtyField, dynObj, entity["Qty"]); #这字段值并且会触发值更新事件 tView.InvokeFieldUpdateService(fRealQtyField.Key, rowIndex); #调用实体服务规则 # tView.Model.SetItemValueByNumber("FStockId",entity["FStockID"].ToString(), rowIndex); # tView.InvokeFieldUpdateService(FStockID.Key, rowIndex); #调用实体服务规则 # tView.Model.SetValue(FNote, dynObj, entity["FNote"]); #这字段值并且会触发值更新事件 rowIndex=rowIndex+1; return #创建单据视图 def CreateView(formId): metadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, formId); OpenParameter = CreateOpenParameter(this.Context, metadata); Provider = metadata.BusinessInfo.GetForm().GetFormServiceProvider(True); importViewClass = "Kingdee.BOS.Web.Import.ImportBillView,Kingdee.BOS.Web"; importViewClassType = Type.GetType(importViewClass); view = Activator.CreateInstance(importViewClassType); view.Initialize(OpenParameter, Provider); return view; #创建输入参数 def CreateOpenParameter(ctx, metaData): form = metaData.BusinessInfo.GetForm(); openPara = BillOpenParameter(form.Id, metaData.GetLayoutInfo().Id); openPara = BillOpenParameter(form.Id, ""); 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 = None; openPara.CreateFrom = CreateFrom.Default; openPara.ParentId = 0; openPara.GroupId = ""; openPara.DefaultBillTypeId = None; openPara.DefaultBusinessFlowId = None; #修改主业务组织无须用户确认 openPara.SetCustomParameter("ShowConfirmDialogWhenChangeOrg", False); #插件 plugins = form.CreateFormPlugIns(); openPara.SetCustomParameter(FormConst.PlugIns, plugins); return openPara; def FirstOrDefault(col, fun = lambda x: True): return Enumerable.FirstOrDefault[object](col, Func[object, bool](fun)) def Where(col, fun): return Enumerable.Where[object](col, Func[object, bool](fun))