默认情况下,表单的数据模型创建及赋值由BOS基类实现,一些特殊场景需要在插件中动态创建及赋值绑定。
下面为动态表单“付款单明细列表”的表单插件,PurchaseServiceHelper.GetPayBillList获取要展示的数据,重写CreateNewData构建表单数据模型。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Kingdee.BOS.Util; using Kingdee.BOS.Core; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.Core.Metadata.StateTracker; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Orm; using Kingdee.BOS.Orm.Metadata.DataEntity; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; using Kingdee.BOS.JSON; using Kingdee.BOS.Core.Const; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata.BarElement; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.K3.SCM.ServiceHelper; namespace Kingdee.K3.SCM.Purchase.Business.PlugIn { public class PurPayBill : AbstractDynamicFormPlugIn { DynamicObjectCollection payBillData = null; public override void OnInitialize(BOS.Core.DynamicForm.PlugIn.Args.InitializeEventArgs e) { if (e.Paramter.GetCustomParameter("SessionPayKey") == null) { return; } string sessionKey = e.Paramter.GetCustomParameter("SessionPayKey").ToString(); // 读取数据,返回的数据包,包含了必要的属性,可以直接使用 payBillData = PurchaseServiceHelper.GetPayBillList(this.Context, Convert.ToInt64(sessionKey)); } public override void CreateNewData(BOS.Core.DynamicForm.PlugIn.Args.BizDataEventArgs e) { DynamicObjectType dtType = this.View.BusinessInfo.GetDynamicObjectType(); EntryEntity recEntity = (EntryEntity)this.View.BusinessInfo.GetEntity("FPayDetailList"); if (payBillData != null) { DynamicObject objData = new DynamicObject(dtType); DynamicObject recObj = null; int seq = 1; foreach (DynamicObject dy in payBillData) { recObj = new DynamicObject(recEntity.DynamicObjectType); recEntity.DynamicProperty.GetValue<DynamicObjectCollection>(objData).Add(recObj); recObj["BillNo"] = Convert.ToString(dy["FBILLNO"]); //预收单号 recObj["CURRENCY"] = dy["FCURRENCY"]; recObj["Date"] = dy["FDATE"]; recObj["Seq"] = seq; //行号 recObj["Amount"] = dy["FREALPAYAMOUNTFOR"]; //实付金额 recObj["ORGNAME"] = dy["FORGNAME"]; //结算组织 seq++; } e.BizDataObject = objData; } } public override void AfterBindData(EventArgs e) { int count = this.View.Model.GetEntryRowCount("FPayDetailList"); for (int i = 0; i < payBillData.Count(); i++) { this.View.GetFieldEditor<DecimalFieldEditor>("FAmount", i).Scale = Convert.ToInt16(payBillData[i]["FAMOUNTDIGITS"]);//设置精度 } } } }