軟體環境:H3 BPM 9.2.7
業務需求:
現在想要實作一個效果:在打開表單、選擇合同階段後能夠讀取背景資料,将多行資料自動填入下方的子表。
本文将用三種方法實作自動填入子表的功能。
方法一
前台使用如下幾個函數就可以實作了,在合同的onchange事件擷取資料以後處理。
複制代碼
//擷取子表
var dtl = $.MvcSheetUI.GetElement("子表名").SheetGridView();
//增加子表行
dtl.addbtn.click(); 或 dtl._AddRow();
//設定子表明細資料
$.MvcSheetUI.SetControlValue("子表字段名", "", row);
方法二:
或者使用背景處理資料的方式
// 執行背景事件
$.MvcSheet.Action(
{
Action: "TestAction", // 背景方法名稱
Datas: ["輸入參數"], // 輸入參數,格式 ["{資料項名稱}","String值","控件ID"],當包含資料項名稱時 LoadControlValue必須為true
LoadControlValue: true, // 是否擷取表單資料
PostSheetInfo: true, // 是否擷取已經改變的表單資料
OnActionDone: function (e) {
// 執行完成後回調事件
}
}
背景方法裡面直接修改ActionContext.InstanceData["子表名"]中的資料。
方法三:背景添加
public override MvcViewContext LoadDataFields()
{
if (this.ActionContext.IsOriginateMode)
{
BizObject[] bizObjects = new BizObject[數組長度];
BizObjectSchema childSchema = this.ActionContext.Schema.GetProperty("子表編碼").ChildSchema;
for (int i = 0; i < DataTable0.Rows.Count; i++)
{
bizObjects = new BizObject(this.ActionContext.Engine, childSchema, this.ActionContext.User.UserID);
bizObjects["字段編碼"] = "";
}
this.ActionContext.InstanceData["子表編碼"].Value = bizObjects;
}
return base.LoadDataFields();
}
本文轉自 lwl_BPM 51CTO部落格,原文連結:http://blog.51cto.com/12438115/1926642,如需轉載請自行聯系原作者