/// <summary> /// 复制流程,从“已启用”或“已升级”的流程进入设计,需要先复制一份流程供设计 /// 状态为“新增”,版本为当前最高版本 + 1 /// </summary> public SysProcess CopyProcess() { SysProcess result; using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope()) { using (BizDataContext db = new BizDataContext()) { //新流程 SysProcess newP = _process.ConvertTo <SysProcess>(); newP.ProcessId = db.GetNextIdentity(); //版本处理 newP.ProcessStatus = (int)ProcessState.Created; string maxVersion = db.Set <SysProcess>().Where(p => p.ProcessType == _process.ProcessType).OrderByDescending(p => p.ProcessVersion).First().ProcessVersion; newP.ProcessVersion = (maxVersion.ToInt() + 1).ToString(); result = newP; db.Insert(newP); //新流程参与人 var ppList = db.Set <SysProcessParticipant>().Where(p => p.ProcessId == _process.ProcessId).ToList(); Dictionary <long?, SysProcessParticipant> tempPpDict = new Dictionary <long?, SysProcessParticipant>(); foreach (var pp in ppList) { SysProcessParticipant newPp = pp.ConvertTo <SysProcessParticipant>(); newPp.ParticipantId = db.GetNextIdentity(); newPp.ProcessId = newP.ProcessId; tempPpDict[pp.ParticipantId] = newPp; //记录原始ID和新对象的关系 } foreach (var newPp in tempPpDict.Values) { if (newPp.Param_ParticipantId != null) //通过刚才记录的关系找到实际的值 { newPp.Param_ParticipantId = tempPpDict[newPp.Param_ParticipantId].ParticipantId; } db.Insert(newPp); } //新活动 var aList = db.Set <SysActivity>().Where(p => p.ProcessId == _process.ProcessId).ToList(); Dictionary <long?, SysActivity> tempADict = new Dictionary <long?, SysActivity>(); foreach (var a in aList) { SysActivity newA = a.ConvertTo <SysActivity>(); newA.ActivityId = db.GetNextIdentity(); newA.ProcessId = newP.ProcessId; tempADict[a.ActivityId] = newA;//记录原始ID和新对象的关系 db.Insert(newA); //新活动参与人 var apList = db.Set <SysActivityParticipant>().Where(p => p.ActivityId == a.ActivityId).ToList(); foreach (var ap in apList) { SysActivityParticipant newAp = ap.ConvertTo <SysActivityParticipant>(); newAp.ActivityParticipantId = db.GetNextIdentity(); newAp.ActivityId = newA.ActivityId; newAp.ParticipantId = tempPpDict[newAp.ParticipantId].ParticipantId; //通过刚才记录的关系找到实际的值 db.Insert(newAp); } } //连接线 var tList = db.Set <SysTransition>().Where(p => p.ProcessId == _process.ProcessId).ToList(); foreach (var t in tList) { SysTransition newT = t.ConvertTo <SysTransition>(); newT.TransitionId = db.GetNextIdentity(); newT.ProcessId = newP.ProcessId; //通过刚才记录的关系找到实际的值 newT.PreActivityId = tempADict[newT.PreActivityId].ActivityId; newT.PostActivityId = tempADict[newT.PostActivityId].ActivityId; db.Insert(newT); } //表单活动权限 var fpList = db.Set <SysFormPrivilege>().Where(p => p.ProcessId == _process.ProcessId).ToList(); foreach (var fp in fpList) { SysFormPrivilege newFp = fp.ConvertTo <SysFormPrivilege>(); newFp.PrivilegeId = db.GetNextIdentity(); newFp.ProcessId = newP.ProcessId; newFp.ActivityId = tempADict[newFp.ActivityId].ActivityId;//通过刚才记录的关系找到实际的值 db.Insert(newFp); } } ts.Complete(); } return(result); }
/// <summary> /// 保存 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnSave_Click(object sender, EventArgs e) { try { //现有配置 var fpDict = this.DataHelper.Set <SysFormPrivilege>() .Where(p => p.ProcessId == this.ProcessId && p.ActivityId == this.SelectedActivityId && p.FormId == this.FormId).ToList().ToDictionary(p => p.FormFieldId); using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope()) { using (BizDataContext db = new BizDataContext()) { foreach (RepeaterItem section in rSection.Items) { Repeater rField = section.FindControl("rField") as Repeater; foreach (RepeaterItem field in rField.Items) { var hf = field.FindControl("hf") as HiddenField; var ccInvisible = field.FindControl("ccInvisible") as RadioButton; var ccReadOnly = field.FindControl("ccReadOnly") as RadioButton; var ccReadWrite = field.FindControl("ccReadWrite") as RadioButton; if (hf != null && ccInvisible != null && ccReadOnly != null && ccReadWrite != null) { var id = hf.Value.ToLong(); FormFieldPrivilege privilege = FormFieldPrivilege.Invisible; if (ccReadOnly.Checked) { privilege = FormFieldPrivilege.ReadOnly; } else if (ccReadWrite.Checked) { privilege = FormFieldPrivilege.ReadWrite; } if (fpDict.ContainsKey(id)) { var fp = fpDict[id]; if (fp.DisplayPrivilege != (int)privilege) { fp.DisplayPrivilege = (int)privilege; db.UpdatePartial(fp, p => new { p.DisplayPrivilege }); } } else { SysFormPrivilege fp = new SysFormPrivilege() { PrivilegeId = db.GetNextIdentity(), FormFieldId = id, FormId = this.FormId, ProcessId = this.ProcessId, ActivityId = this.SelectedActivityId, DisplayPrivilege = (int)privilege, CreateTime = DateTime.Now, CreateUserId = this.LoginUserID, }; db.Insert(fp); } } } } } ts.Complete(); } this.AjaxAlertAndEnableButton("保存成功"); } catch (Exception ex) { this.AjaxAlertAndEnableButton(ex); } }