软件环境: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["字段编码"] = "";
bizObjects["字段编码"] = "";
}
this.ActionContext.InstanceData["子表编码"].Value = bizObjects;
}
return base.LoadDataFields();
}