105 lines
4.3 KiB
Python
105 lines
4.3 KiB
Python
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))
|
|
|