填充单据体的几各种方式
目前用到的几中填充单据体的方式
一、表单插件 SetValue 方式
Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); DynamicObjectCollection entityDataObject = this.Model.GetEntityDataObject(entity); this.Model.DeleteEntryData("FEntity"); int i = this.Model.GetEntryRowCount("FEntity") - 1; foreach (DynamicObject dydata in docData) { // 单据体增加新行,并更新行索引 this.Model.SetEntryCurrentRowIndex("FEntity", i); this.Model.SetValue("FSeq", i); this.Model.SetItemValueByID("FMaterialID2", dydata["FMaterialID"], i); this.View.InvokeFieldUpdateService("FMaterialID2", i);//触发字段值更新,单据头字段行号填0 this.Model.SetItemValueByID("FLot", dydata["F_Lot"], i); this.View.InvokeFieldUpdateService("FLot", i);//触发字段值更新,单据头字段行号填0 this.Model.SetValue("FNumerator", dydata["FQty"], i); this.View.InvokeFieldUpdateService("FNumerator", i);//触发字段值更新,单据头字段行号填0 this.Model.CreateNewEntryRow("FEntity"); i++; } this.View.UpdateView("FEntity");
二、实体填充 ,可用于表单插件(感觉性能好些)、服务插件
private void FillEntityData(DynamicObjectCollection retDatas, string entityKey) { if (retDatas != null && retDatas.Count() > 0) { //回写计划用料清单 Entity entity = this.Model.BusinessInfo.GetEntity(entityKey); DynamicObjectCollection entityData = this.Model.GetEntityDataObject(entity); entityData.Clear(); int i = 0; foreach (DynamicObject dyData in retDatas) { //每一行的值定义成 DynamicObject类型 DynamicObject row = new DynamicObject(entity.DynamicObjectType); //通过 SeqDynamicProperty 设置序号 entity.SeqDynamicProperty.SetValue(row, i + 1); //对实体赋值 row["F_paez_zxwlbm_Id"] = dyData["FSubMaterial_Id"]; row["F_paez_kcdw_Id"] = dyData["FUnitID_Id"]; row["F_paez_BaseUnitID_Id"] = dyData["F_paez_BaseUnitID_Id"]; row["F_paez_dwyl"] = dyData["FQty"]; entityData.Add(row); i++; } //加载全部基础资料字段 的 DynamicObject对象,便于页面显示 DBServiceHelper.LoadReferenceObject(this.Context, entityData.ToArray<DynamicObject>(), entityData.DynamicCollectionItemPropertyType, false); this.View.UpdateView(entityKey); } }
特殊说明:
1、分录序号。
entity.SeqDynamicProperty.SetValue(row, i + 1);
2、通过 ID 加载基础资料字段 DynamicObject 数据包,用于表单插件显示 。 最后参考 用 false。或实际确认
DBServiceHelper.LoadReferenceObject(this.Context, entityData.ToArray<DynamicObject>(), entityData.DynamicCollectionItemPropertyType, false);
三、操作插件构建 单据视图 使用 SetValue
foreach (var billDynObjEx in billDynObjExs) { string fromId = e.TargetBusinessInfo.GetForm().Id; if (!fromId.Equals("AR_RECEIVEBILL")) return; //创建目标单据视图 var tView = CreateView(fromId); //单个单据数据包 var billDynObj = billDynObjEx.DataEntity; //给模型设置数据包 tView.Model.DataObject = billDynObj; DynamicObjectCollection docSrcEntry = billDynObj["RECEIVEBILLSRCENTRY"] as DynamicObjectCollection; int row = 0; foreach(DynamicObject dySrcEntry in docSrcEntry) { tView.Model.CreateNewEntryRow("FRECEIVEBILLENTRY"); long SRCSETTLETYPEID_Id = System.Convert.ToInt64(dySrcEntry["SRCSETTLETYPEID_Id"]); decimal REALRECAMOUNT = System.Convert.ToDecimal(dySrcEntry["REALRECAMOUNT"]); string srcMyBankAcc = dySrcEntry["FSRCMyBankAcct"].ToString(); string srcOtherBankAcc = dySrcEntry["FSRCOtherBankAcct"].ToString(); tView.Model.SetValue("FPURPOSEID", SRCSETTLETYPEID_Id, row); tView.Model.SetValue("FPURPOSEID", 20010, row); row++; } }
private Kingdee.BOS.Core.DynamicForm.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); Kingdee.BOS.Core.DynamicForm.IDynamicFormView view = (Kingdee.BOS.Core.DynamicForm.IDynamicFormView)Activator.CreateInstance(type); ((Kingdee.BOS.Core.DynamicForm.IDynamicFormViewService)view).Initialize(OpenParameter, Provider); return view; }
总结:总体来说就是 实体赋值或页面赋值,个人应用发现是 实体赋值 性能好些,页面赋值 可以有值更新等 方便些。
对于方便与性能,或不到之处,欢迎大家斧正!!
有没有指定复制多少行的代码示例呢,比如我单据上加个整数,然后增加个表体按钮,整数字段输入10,点击表体按钮就给明细复制新增10行,输入20就复制新增20行
谢谢大佬
填充单据体的几各种方式
目前用到的几中填充单据体的方式一、表单插件 SetValue 方式Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); ...
点击下载文档
上一篇:今天给大家介绍下电脑分区—MBR、主引导扇区,主分区、扩展分区、逻辑分区,活动分区、引导分区、系统分区、启动分区的区别下一篇:MES智慧车间-新柔性产线(包装扫描汇报)-包装箱SN号打印(目前支持云星空8.2版本)
本文2024-09-16 17:13:12发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14305.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章