/// <summary> /// 合流点向分流点退回 /// </summary> private string ExeReturn3_2() { //删除分流点与合流点之间的子线程数据。 if (this.ReurnToNode.IsStartNode == false) { throw new Exception("@没有处理的模式。"); } //删除子线程节点数据。 GenerWorkerLists gwls = new GenerWorkerLists(); gwls.Retrieve(GenerWorkFlowAttr.FID, this.WorkID); foreach (GenerWorkerList item in gwls) { /* 删除 子线程数据 */ DBAccess.RunSQL("DELETE ND" + item.FK_Node + " WHERE OID=" + item.WorkID); } //删除流程控制数据。 DBAccess.RunSQL("DELETE WF_GenerWorkFlow WHERE FID=" + this.WorkID); DBAccess.RunSQL("DELETE WF_GenerWorkerList WHERE FID=" + this.WorkID); DBAccess.RunSQL("DELETE WF_GenerFH WHERE FID=" + this.WorkID); return(ExeReturn1_1()); }
/// <summary> /// 分流点退回给子线程 /// </summary> /// <returns></returns> private string ExeReturn2_4() { //更新运动到节点,但是仍然是退回状态. GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID); gwf.FK_Node = this.ReturnToNode.NodeID; gwf.Update(); //更新退回到的人员信息可见. GenerWorkerLists gwls = new GenerWorkerLists(); gwls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, this.ReturnToNode.NodeID); foreach (GenerWorkerList item in gwls) { item.IsPassInt = 0; item.Update(); this.ReturnToEmp = item.FK_Emp + "," + item.FK_EmpText; } // 去掉合流节点工作人员的待办. gwls = new GenerWorkerLists(); gwls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, this.HisNode.NodeID); foreach (GenerWorkerList item in gwls) { item.IsPassInt = 0; item.IsRead = false; item.Update(); } return("成功的把信息退回到:" + this.ReturnToNode.Name + " , 退回给:(" + this.ReturnToEmp + ")"); }
/// <summary> /// 执行修复 /// </summary> /// <returns></returns> public string DoRepare() { if (this.DoSelfTestInfo() == "没有发现异常。") { return("没有发现异常。"); } string sql = "SELECT FK_Node FROM WF_GenerWorkerlist WHERE WORKID='" + this.WorkID + "' ORDER BY FK_Node desc"; DataTable dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 0) { /*如果是开始工作节点,就删除它。*/ WorkFlow wf = new WorkFlow(new Flow(this.FK_Flow), this.WorkID, this.FID); wf.DoDeleteWorkFlowByReal(true); return("此流程是因为发起工作失败被系统删除。"); } int FK_Node = int.Parse(dt.Rows[0][0].ToString()); Node nd = new Node(FK_Node); if (nd.IsStartNode) { /*如果是开始工作节点,就删除它。*/ WorkFlow wf = new WorkFlow(new Flow(this.FK_Flow), this.WorkID, this.FID); wf.DoDeleteWorkFlowByReal(true); return("此流程是因为发起工作失败被系统删除。"); } this.FK_Node = nd.NodeID; this.NodeName = nd.Name; this.Update(); string str = ""; GenerWorkerLists wls = new GenerWorkerLists(); wls.Retrieve(GenerWorkerListAttr.FK_Node, FK_Node, GenerWorkerListAttr.WorkID, this.WorkID); foreach (GenerWorkerList wl in wls) { str += wl.FK_Emp + wl.FK_EmpText + ","; } return("此流程是因为[" + nd.Name + "]工作发送失败被回滚到当前位置,请转告[" + str + "]流程修复成功。"); }
public string DoCheck(int days, string checker, string note1, string note2) { this.ApplyDays = days; this.Checker = checker; this.ApplyNote1 = note1; this.ApplyNote2 = note2; // 调整当前预警与 GenerWorkerLists wls = new GenerWorkerLists(this.WorkID, this.NodeId); wls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, this.NodeId); foreach (GenerWorkerList wl in wls) { // wl.DTOfWarning = DataType.AddDays(wl.DTOfWarning, days); // wl.SDT = DataType.AddDays(wl.SDT, days); wl.DirectUpdate(); } this.RunState = 2; /*进入提交审核状态*/ this.Update(); return("执行成功,已经交给" + checker + "审核。"); }
/// <summary> /// 合流点向子线程退回 /// </summary> private string ExeReturn3_4() { GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID); gwf.FK_Node = this.ReurnToNode.NodeID; gwf.WFState = WFState.Runing; gwf.Update(); string info = "@工作已经成功的退回到(" + ReurnToNode.Name + ")退回给:"; GenerWorkerLists gwls = new GenerWorkerLists(); gwls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, this.ReurnToNode.NodeID); string toEmp = ""; string toEmpName = ""; foreach (GenerWorkerList item in gwls) { item.IsPass = false; item.IsRead = false; item.Update(); info += item.FK_Emp + "," + item.FK_EmpText; toEmp = item.FK_Emp; toEmpName = item.FK_EmpText; } //删除已经发向合流点的汇总数据. MapDtls dtls = new MapDtls("ND" + this.HisNode.NodeID); foreach (MapDtl dtl in dtls) { /*如果是合流数据*/ if (dtl.IsHLDtl) { BP.DA.DBAccess.RunSQL("DELETE " + dtl.PTable + " WHERE OID=" + this.WorkID); } } // 记录退回轨迹。 ReturnWork rw = new ReturnWork(); rw.WorkID = this.WorkID; rw.ReturnToNode = this.ReurnToNode.NodeID; rw.ReturnNodeName = this.ReurnToNode.Name; rw.ReturnNode = this.HisNode.NodeID; // 当前退回节点. rw.ReturnToEmp = toEmp; //退回给。 rw.MyPK = DBAccess.GenerOIDByGUID().ToString(); rw.Note = Msg; rw.IsBackTracking = this.IsBackTrack; rw.Insert(); // 加入track. this.AddToTrack(ActionType.Return, toEmp, toEmpName, this.ReurnToNode.NodeID, this.ReurnToNode.Name, Msg); // 返回退回信息. return(info); }
/// <summary> /// 子线程退回给分流点 /// </summary> /// <returns></returns> private string ExeReturn5_2() { GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID); gwf.FK_Node = this.ReturnToNode.NodeID; string info = "@工作已经成功的退回到(" + ReturnToNode.Name + ")退回给:"; //查询退回到的工作人员列表. GenerWorkerLists gwls = new GenerWorkerLists(); gwls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, this.ReturnToNode.NodeID); string toEmp = ""; string toEmpName = ""; if (gwls.Count == 1) { /*有可能多次退回的情况,表示曾经退回过n次。*/ foreach (GenerWorkerList item in gwls) { item.IsPass = false; // 显示待办, 这个是合流节点的工作人员. item.IsRead = false; // item.Update(); info += item.FK_Emp + "," + item.FK_EmpText; toEmp = item.FK_Emp; toEmpName = item.FK_EmpText; info += "(" + item.FK_Emp + "," + item.FK_EmpText + ")"; } } else { // 找到合流点的发送人. Nodes nds = this.HisNode.FromNodes; gwls = new GenerWorkerLists(); GenerWorkerList gwl = new GenerWorkerList(); foreach (Node nd in nds) { gwls.Retrieve(GenerWorkerListAttr.WorkID, this.FID, GenerWorkerListAttr.FK_Node, nd.NodeID, GenerWorkerListAttr.IsPass, 1); if (gwls.Count == 0) { continue; } if (gwls.Count != 1) { throw new Exception("@应该只有一个记录,现在有多个,可能错误。"); } //求出分流节点的发送人. gwl = (GenerWorkerList)gwls[0]; toEmp = gwl.FK_Emp; toEmpName = gwl.FK_EmpText; info += "(" + toEmp + "," + toEmpName + ")"; } if (string.IsNullOrEmpty(toEmp) == true) { throw new Exception("@在退回时出现错误,没有找到分流节点的发送人。"); } // 插入一条数据, 行程一个工作人员记录,这个记录就是子线程的延长点. 给合流点上的接受人设置待办. gwl.WorkID = this.WorkID; gwl.FID = this.FID; gwl.IsPass = false; if (gwl.IsExits == false) { gwl.Insert(); } else { gwl.Update(); } } // 记录退回轨迹。 ReturnWork rw = new ReturnWork(); rw.WorkID = this.WorkID; rw.ReturnToNode = this.ReturnToNode.NodeID; rw.ReturnNodeName = this.ReturnToNode.Name; rw.ReturnNode = this.HisNode.NodeID; // 当前退回节点. rw.ReturnToEmp = toEmp; //退回给。 rw.MyPK = DBAccess.GenerOIDByGUID().ToString(); rw.Note = Msg; rw.IsBackTracking = this.IsBackTrack; rw.Insert(); // 加入track. this.AddToTrack(ActionType.Return, toEmp, toEmpName, this.ReturnToNode.NodeID, this.ReturnToNode.Name, Msg); gwf.WFState = WFState.ReturnSta; gwf.FK_Node = this.ReturnToNode.NodeID; gwf.NodeName = this.ReturnToNode.Name; gwf.Starter = toEmp; gwf.StarterName = toEmpName; gwf.Update(); //找到当前的工作数据. GenerWorkerList currWorker = new GenerWorkerList(); int i = currWorker.Retrieve(GenerWorkerListAttr.FK_Emp, WebUser.No, GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, this.HisNode.NodeID); if (i != 1) { throw new Exception("@当前的工作人员列表数据丢失了,流程引擎错误."); } //设置当前的工作数据为退回状态,让其不能看到待办, 这个是约定的值. currWorker.IsPassInt = (int)WFState.ReturnSta; currWorker.Update(); // 返回退回信息. return(info); }