后端代码
protected override void OnSubmit(string actionName, H3.SmartForm.SmartFormPostValue postValue, H3.SmartForm.SubmitSmartFormResponse response)
{
//初始化加载24大类
if(actionName == "initTarget")
{
try
{
H3.SmartForm.SmartFormRequest request = this.Request;//取出当前请求对象
H3.IEngine engine = request.Engine;//取出引擎实例
// //获取当前登录人的人员Id(只能在表单设计后端类、列表设计后端类中获取)
// string currentUserId = this.Request.UserContext.UserId;
//本sql中@name即参数名,与H3.Data.Database.Parameter参数对象一一对应
string sql = "SELECT * FROM i_D1198022e2e77ed14b84c05ac058937cf8364c4 WHERE F0000018 = '成本预算';";
//定义参数集合
List < H3.Data.Database.Parameter > parameters = new List<H3.Data.Database.Parameter>();
// H3.Data.Database.Parameter param = new H3.Data.Database.Parameter(
// "@currentUserId", //参数名
// System.Data.DbType.String, //参数值类型
// currentUserId //参数值
// );
// parameters.Add(param);
System.Data.DataTable dt = this.Engine.Query.QueryTable(sql, parameters.ToArray());
//定义要响应给前端的产品数据集合
List < Dictionary < string, object >> proDataList = new List<Dictionary<string, object>>();
if(dt != null && dt.Rows.Count > 0)
{
//循环处理查询结果
foreach(System.Data.DataRow row in dt.Rows)
{
//将每一条产品数据 转换成一个 Dictionary < string, object > 类型实例
//Dictionary < string, object >是个字典,可以自定义Key,所以这里将F000000X这种无意义的控件编码,转换成了更方便前端使用的 proId、proName 等名称
Dictionary < string, object > proData = new Dictionary<string, object>();
proData["objId"] = row["ObjectId"].ToString();//目标表实例ID
proData["F0000023"] = row["F0000023"].ToString();//成本十二类
proData["F0000030"] = row["F0000030"].ToString();//审批类型
proData["F0000011"] = row["F0000011"].ToString();//分类名称
//将本条数据添加到list集合中
proDataList.Add(proData);
}
}
//初始化响应数据实例(因为response.ReturnData默认值是null,后续要添加响应数据,必须先实例化)
response.ReturnData = new Dictionary<string, object>();
//将 所有产品数据的list集合 添加到响应数据实例中
response.ReturnData.Add("proDataList", proDataList);
} catch(Exception ex)
{
//将 try 中抛出的异常捕获,转换成 response.Errors 响应给前端
response.Errors.Add(ex.Message);
}
}
base.OnSubmit(actionName, postValue, response);
}
前端代码
OnLoad: function() { console.log( "页面页面正在加载中" ); //由于会在回调函数里用到this,而回调函数内直接用this会导致指向错误,所以要在此处先用一个变量存储 var that = this; //判断当前是否处于表单新增模式下 //新增或者//打开草稿数据 if( $.SmartForm.ResponseContext.IsCreateMode || $.SmartForm.ResponseContext.BizObjectStatus == 0 ) { //获取子表控件实例 var proCon = that.D148208e1ddfcef81dc44389ece468edb9d2cb9; //先调用ClearRows函数,清空子表所有行 proCon.ClearRows(); //Post请求后端,因为是查全部数据,所以无需传参数到后端 $.SmartForm.PostForm( "initTarget", {}, function( data ) { if( data.Errors && data.Errors.length ) { $.IShowError( "错误", JSON.stringify( data.Errors ) ); } else { var result = data.ReturnData; //此处先判断后端是否有返回 proDataList 集合,以及 proDataList 集合内元素个数是否 > 0 if( result && result[ "proDataList" ] && result[ "proDataList" ].length ) { //循环list结果 for( var i = 0;i < result[ "proDataList" ].length;i++ ) { //拿出本条数据 var proData = result[ "proDataList" ][ i ]; //将 产品信息 填充到子表 proCon.AddRow( $.IGuid(), { "D148208e1ddfcef81dc44389ece468edb9d2cb9.F0000075": proData[ "objId" ],//关联目标 }); } } } }, function( error ) { $.IShowError( "错误", JSON.stringify( error ) ); }, true //true:不阻塞,false:请求过程中阻塞后续代码执行 ); } },