BPM不同表单之间子表的赋值

上次写的是同一个表单的子表之间赋值,这次是不同表单之间子表的赋值

首先,我们给需要赋值的表单添加一个复制按钮

$.MvcSheet.AddAction({
            Action: "start",
            Icon: "fa-copy",       // 按钮图标
            Text: "复制",           // 按钮名称
            OnActionDone: function (e) {
                window.open("../../../StartInstance.aspx?WorkflowCode=" + $.MvcSheetUI.SheetInfo.WorkflowCode + "&PageAction=Close&objectid=" + $.MvcSheetUI.SheetInfo.BizObjectID);
            },
            PostSheetInfo: false         // 是否提交表单数据,如果 false,那么不返回表单的数据
        });

WorkflowCode是流程编码,也就是说StartInstance需要知道你的流程编码来创建哪个流程因为我的就是重新创建一个本流程,只不过是不同表单之间的所以直接$.MvcSheetUI.SheetInfo.WorkflowCode获取。BizObjectID是数据模型id

然后根据实际需求,在应该开放的节点加上前端调用后端代码

//从前端调用后台方法
                $.MvcSheet.Action({
                    Async: false,
                    Action: "GetWorkplan",   // 后台方法名称
                    Datas: [],//传入参数,用逗号分开,这是是例子,这个方法是没有输入参数的
                    LoadControlValue: true, // 是否获取表单数据
                    PostSheetInfo: false,    // 是否获取已经改变的表单数据
                    OnActionDone: function (e) {
                        //这里e是后台返回的值,这里是一个类,如果是多行可以返回List<类>,下面用循环就行了
                        if (e && $.MvcSheetUI.SheetInfo.IsOriginateMode) {
                            var j = 1;
                            for (i in e) {
                                $("a[id^='Add_workplanitem']").click();
                                //这里我直接给第一行赋值,如果是多行,可以循环
                                //SetControlValue:第一个参数为数据项;第二个参数为需要赋的值;第三个参数为行号
                                $.MvcSheetUI.SetControlValue("workplanitem.zzxm", e[i]["Zzxm"], j);
                                $.MvcSheetUI.SetControlValue("workplanitem.SLBZ", e[i]["Slbz"], j);
                                $.MvcSheetUI.SetControlValue("workplanitem.SHLBZ", e[i]["Shlbz"], j);
                                $.MvcSheetUI.SetControlValue("workplanitem.ZLBZ", e[i]["Zlbz"], j);
                                j++;
                            }
                        }
                    }
                });

//IsOriginateMode的左右是判断当前是不是第一次填写表单

  $("a[id^='Add_workplanitem']").click();的理解可以参考下边

  $("input[id^='code']");//id属性以code开始的所有input标签

  $("input[id$='code']");//id属性以code结束的所有input标签

  $("input[id*='code']");//id属性包含code的所有input标签

至此,前台代码已经完毕

后台代码:

先创建一个workplan类,把你需要返回的值放到里边

 public List<workplan> GetWorkplan()
        {
            List<workplan> workplanlist = new List<workplan>();
            string objectid = Request.QueryString["objectid"];
            if (!string.IsNullOrWhiteSpace(stryobjectid))
            {
                string strsql = "select * from i_workplanitem where ParentObjectID='{0}' order by parentindex";
                DataTable dt = OThinker.H3.WorkSheet.AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteDataTable(string.Format(strsql, objectid));
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    workplan newworkplan = new workplan();
                    newworkplan.Zzxm = dt.Rows[i]["zzxm"] != null ? dt.Rows[i]["zzxm"].ToString() : "";
                    newworkplan.Slbz = dt.Rows[i]["slbz"] != null ? dt.Rows[i]["slbz"].ToString() : "";
                    newworkplan.Shlbz = dt.Rows[i]["shlbz"] != null ? dt.Rows[i]["shlbz"].ToString() : "";
                    newworkplan.Zlbz = dt.Rows[i]["zlbz"] != null ? dt.Rows[i]["zlbz"].ToString() : "";
                    workplanlist.Add(newworkplan);
                }
            }
            return workplanlist;
        }

posted @ 2017-05-25 10:10  果冻栋吖  阅读(460)  评论(0编辑  收藏  举报