protected void Page_Load(object sender, EventArgs e) { if (this.DoType == "DelIt") { try { WorkFlow wf = new WorkFlow(this.FK_Flow, this.WorkID); wf.DoDeleteWorkFlowByReal(true); } catch (Exception ex) { this.Response.Write(ex.Message); BP.Sys.PubClass.Alert(ex.Message); } return; } Flow fl = new Flow(this.FK_Flow); GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.Retrieve(GenerWorkFlowAttr.FK_Flow, this.FK_Flow, GenerWorkFlowAttr.FK_Dept); this.Pub1.AddTable("width='100%'"); this.Pub1.AddCaptionLeft(fl.Name); this.Pub1.AddTR(); this.Pub1.AddTDTitle("IDX"); this.Pub1.AddTDTitle("部门"); this.Pub1.AddTDTitle("发起人"); this.Pub1.AddTDTitle("发起时间"); this.Pub1.AddTDTitle("当前停留节点"); this.Pub1.AddTDTitle("标题"); this.Pub1.AddTDTitle("操作"); this.Pub1.AddTREnd(); int idx = 0; foreach (GenerWorkFlow item in gwfs) { idx++; this.Pub1.AddTR(); this.Pub1.AddTDIdx(idx); this.Pub1.AddTD(item.DeptName); this.Pub1.AddTD(item.StarterName); this.Pub1.AddTD(item.RDT); this.Pub1.AddTD(item.NodeName); this.Pub1.AddTDB(item.Title); this.Pub1.AddTDBegin(); this.Pub1.Add("<a href=\"javascript:WinOpen('/WF/WorkOpt/OneWork/ChartTrack.aspx?WorkID=" + item.WorkID + "&FK_Flow=" + this.FK_Flow + "&FID=" + item.FID + "','ds'); \" >轨迹图</a>-"); this.Pub1.Add("<a href=\"javascript:WinOpen('./../WFRpt.aspx?WorkID=" + item.WorkID + "&FK_Flow=" + this.FK_Flow + "&FID=" + item.FID + "','ds'); \" >报告</a>-"); this.Pub1.Add("[<a href=\"javascript:DelIt('" + item.FK_Flow + "','" + item.WorkID + "');\"><img src='/WF/Img/Btn/Delete.gif' border=0/>删除</a>]"); this.Pub1.Add("[<a href=\"javascript:FlowShift('" + item.FK_Flow + "','" + item.WorkID + "');\">移交</a>]"); this.Pub1.Add("[<a href=\"javascript:FlowSkip('" + item.FK_Flow + "','" + item.WorkID + "');\">跳转</a>]"); this.Pub1.AddTDEnd(); this.Pub1.AddTREnd(); } this.Pub1.AddTableEnd(); }
public void InsertSubFlows(string flowNo, int fid, Int64 workid, int layer) { //该流程的子流程信息, 并按照流程排序. GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.Retrieve(GenerWorkFlowAttr.PWorkID, workid, GenerWorkFlowAttr.FK_Flow); //流程. if (gwfs.Count == 0) { return; } string myFlowNo = ""; foreach (GenerWorkFlow item in gwfs) { if (item.WFState == WFState.Blank) { continue; } if (myFlowNo.Contains(item.FK_Flow) == false) { myFlowNo = myFlowNo + "," + item.FK_Flow; //输出流程. BP.WF.Flow fl = new Flow(item.FK_Flow); string html = "<div style='float:left'>" + DataType.GenerSpace(layer * 2) + "<img src='../Img/Max.gif' /> " + fl.Name + "</div>"; this.AddTR(); this.AddTD(" class=TRSum colspan=6", html); this.AddTREnd(); } this.AddTR(); this.AddTD("style='word-break:break-all;'", DataType.GenerSpace(layer * 2) + "<a href=\"javascript:OpenIt('../WFRpt.aspx?WorkID=" + item.WorkID + "&FK_Flow=" + item.FK_Flow + "')\" ><img src='../Img/Dot.png' width='9px' /> " + item.Title + "</a>"); this.AddTD(item.NodeName); //到达节点名称. if (item.WFState == WFState.Complete) { this.AddTD("已完成"); } else { this.AddTD("未完成"); } this.AddTD(item.TodoEmps); //到达人员. this.AddTD(BP.DA.DataType.ParseSysDate2DateTimeFriendly(item.RDT)); //日期. this.AddTD(item.FlowNote); //流程备注. this.AddTREnd(); //加载他下面的子流程. InsertSubFlows(item.FK_Flow, item.FK_Node, item.WorkID, layer + 1); } }
protected void Page_Load(object sender, EventArgs e) { //查询出来所有子流程的数据. GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.Retrieve(GenerWorkFlowAttr.PWorkID, this.WorkID); this.AddTable(); this.AddTR(); this.AddTDTitle("序"); this.AddTDTitle("标题"); this.AddTDTitle("停留节点"); this.AddTDTitle("状态"); this.AddTDTitle("处理人"); this.AddTDTitle("处理时间"); this.AddTDTitle("信息"); //this.AddTDTitle("操作"); this.AddTREnd(); int idx = 0; foreach (GenerWorkFlow item in gwfs) { idx++; this.AddTR(); this.AddTDIdx(idx); this.AddTD("style='word-break:break-all;'", "<a href='" + Glo.CCFlowAppPath + "WF/WFRpt.aspx?WorkID=" + item.WorkID + "&FK_Flow=" + item.FK_Flow + "' target=_blank >" + item.Title + "</a>"); this.AddTD(item.NodeName); if (item.WFState == WFState.Complete) { this.AddTD("已完成"); } else { this.AddTD("未完成"); } this.AddTD(item.TodoEmps); this.AddTD(item.RDT); this.AddTD(item.FlowNote); this.AddTREnd(); } this.AddTableEnd(); }
public void BindFHLWork(GenerFH hf) { this.AddH4(hf.Title); this.AddHR(); this.AddFieldSet("当前节点基本信息"); this.AddBR("接受时间:" + hf.RDT); this.AddBR("接受人:" + hf.ToEmpsMsg); this.AddFieldSetEndBR(); GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.Retrieve(GenerWorkFlowAttr.FID, this.FID); this.AddFieldSet("分流人员信息"); this.AddTable(); this.AddTR(); this.AddTDTitle("标题"); this.AddTDTitle("发起人"); this.AddTDTitle("发起日期"); this.AddTDTitle(""); this.AddTREnd(); foreach (GenerWorkFlow gwf in gwfs) { if (gwf.WorkID == this.FID) { continue; } this.AddTR(); this.AddTD(gwf.Title); this.AddTD(gwf.Starter); this.AddTD(gwf.RDT); this.AddTD("<a href='" + this.Request.ApplicationPath + "WF/WFRpt.aspx?WorkID=" + gwf.WorkID + "&FK_Flow=" + gwf.FK_Flow + "&FID=" + gwf.FID + "' target=_b" + gwf.WorkID + ">工作报告</a>"); this.AddTREnd(); } this.AddTableEndWithBR(); this.AddFieldSetEnd(); }
/// <summary> /// 创建流程,发送分流点第1步. /// </summary> public void Step1() { // 让zhanghaicheng 登录. BP.WF.Dev2Interface.Port_Login(userNo); //创建空白工作, 发起开始节点. workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow); #region 检查 创建流程后的数据是否完整 ? // "检查创建这个空白是否有数据完整?; sql = "SELECT * FROM " + fl.PTable + " WHERE OID=" + workid; DataTable dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 0) { throw new Exception("@发起流程出错误,不应该找不到报表数据."); } // 检查节点表单表是否有数据?; sql = "SELECT * FROM ND501 WHERE OID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 0) { throw new Exception("@不应该在开始节点表单表中找不到数据,"); } if (dt.Rows[0]["Rec"].ToString() != WebUser.No) { throw new Exception("@记录人应该是当前人员."); } // 检查创建这个空白是否有数据完整?; sql = "SELECT * FROM WF_EmpWorks WHERE WorkID=" + workid + " AND FK_Emp='" + WebUser.No + "'"; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 0) { throw new Exception("@找到当前人员的待办就是错误的."); } #endregion 检查发起流程后的数据是否完整? //开始节点:执行发送,并获取发送对象. 主线程向子线程发送. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid); #region 第1步: 检查【开始节点】发送对象返回的信息是否完整? //从获取的发送对象里获取到下一个工作者. zhangyifan(张一帆)、zhoushengyu(周升雨). if (objs.VarAcceptersID != "zhangyifan,zhoushengyu,") { throw new Exception("@下一步的接受人不正确, zhangyifan,zhoushengyu, 现在是:" + objs.VarAcceptersID); } if (objs.VarToNodeID != 502) { throw new Exception("@应该是 502节点. 现在是:" + objs.VarToNodeID); } if (objs.VarWorkID != workid) { throw new Exception("@主线程的workid不应该变化:" + objs.VarWorkID); } if (objs.VarCurrNodeID != 501) { throw new Exception("@当前节点的编号不能变化:" + objs.VarCurrNodeID); } if (objs.VarTreadWorkIDs == null) { throw new Exception("@没有获取到两条子线程ID."); } if (objs.VarTreadWorkIDs.Contains(",") == false) { throw new Exception("@没有获取到两条子线程的WorkID:" + objs.VarTreadWorkIDs); } #endregion 检查【开始节点】发送对象返回的信息是否完整? #region 第2步: 检查流程引擎控制系统表是否符合预期. gwf = new GenerWorkFlow(workid); if (gwf.FK_Node != 501) { throw new Exception("@主线程向子线程发送时,主线程的FK_Node应该不变化,现在:" + gwf.FK_Node); } if (gwf.WFState != WFState.Runing) { throw new Exception("@主线程向子线程发送时,主线程的 WFState 应该 WFState.Runing :" + gwf.WFState.ToString()); } if (gwf.Starter != WebUser.No) { throw new Exception("@应该是发起人员,现在是:" + gwf.Starter); } //找出发起人的工作列表. gwl = new GenerWorkerList(workid, 501, WebUser.No); if (gwl.IsPass == true) { throw new Exception("@干流上的pass状态应该是通过,此人已经没有他的待办工作了."); } //找出子线程上的工作人员. GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.Retrieve(GenerWorkerListAttr.FID, workid); if (gwfs.Count != 2) { throw new Exception("@应该有两个流程注册,现在是:" + gwfs.Count + "个."); } //检查它们的注册数据是否完整. foreach (GenerWorkFlow item in gwfs) { if (item.Starter != WebUser.No) { throw new Exception("@当前的人员应当是发起人,现在是:" + item.Starter); } if (item.FK_Node != 502) { throw new Exception("@当前节点应当是 502 ,现在是:" + item.FK_Node); } if (item.WFState != WFState.Runing) { throw new Exception("@当前 WFState 应当是 Runing ,现在是:" + item.WFState.ToString()); } } //找出子线程工作处理人员的工作列表. GenerWorkerLists gwls = new GenerWorkerLists(); gwls.Retrieve(GenerWorkerListAttr.FID, workid); if (gwls.Count != 2) { throw new Exception("@应该在子线程上查询出来两个待办,现在只有(" + gwls.Count + ")个。"); } //检查子线程的待办完整性. foreach (GenerWorkerList item in gwls) { if (item.IsPass) { throw new Exception("@不应该是已经通过,因为他们没有处理。"); } if (item.IsEnable == false) { throw new Exception("@应该是:IsEnable "); } //if (item.Sender.Contains(WebUser.No) == false) // throw new Exception("@发送人,应该是当前人员。现在是:" + item.Sender); if (item.FK_Flow != "005") { throw new Exception("@应该是 005 现在是:" + item.FK_Flow); } if (item.FK_Node != 502) { throw new Exception("@应该是 502 现在是:" + item.FK_Node); } } //取主线程的待办工作. sql = "SELECT * FROM WF_EmpWorks WHERE WorkID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 0) { throw new Exception("@不应当出现主线程的待办在 WF_EmpWorks 视图中. " + sql); } //取待办子线程的待办工作. sql = "SELECT * FROM WF_EmpWorks WHERE FID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 2) { throw new Exception("@应该取出来两个子线程的 WF_EmpWorks 视图中. " + sql); } #endregion end 检查流程引擎控制系统表是否符合预期. #region 第3步: 检查【开始节点】发送节点表单-数据信息否完整? //检查节点表单表是否有数据? sql = "SELECT * FROM ND501 WHERE OID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 1) { throw new Exception("@应该找到开始节点表单数据,但是没有。"); } if (dt.Rows[0]["Rec"].ToString() != WebUser.No) { throw new Exception("@没有向主线程开始节点表里写入Rec字段,现在是:" + dt.Rows[0]["Rec"].ToString() + "应当是:" + WebUser.No); } //检查节点表单表是否有数据,以及数据是否正确? sql = "SELECT * FROM ND502 WHERE FID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 2) { throw new Exception("@应该在第一个子线程节点上找到两个数据。"); } foreach (DataRow dr in dt.Rows) { if (dr["Rec"].ToString() == "zhangyifan") { continue; } if (dr["Rec"].ToString() == "zhoushengyu") { continue; } throw new Exception("@子线程表单数据没有正确的写入Rec字段."); } sql = "SELECT * FROM ND5Rpt WHERE OID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows[0][GERptAttr.FlowEnder].ToString() != "zhanghaicheng") { throw new Exception("@应该是 zhanghaicheng 是 FlowEnder ."); } if (dt.Rows[0][GERptAttr.FlowStarter].ToString() != "zhanghaicheng") { throw new Exception("@应该是 zhanghaicheng 是 FlowStarter ."); } if (dt.Rows[0][GERptAttr.FlowEndNode].ToString() != "502") { throw new Exception("@应该是 502 是 FlowEndNode ."); } if (int.Parse(dt.Rows[0][GERptAttr.WFState].ToString()) != (int)WFState.Runing) { throw new Exception("@应该是 WFState.Runing 是当前的状态。"); } if (int.Parse(dt.Rows[0][GERptAttr.FID].ToString()) != 0) { throw new Exception("@应该是 FID =0 "); } if (dt.Rows[0]["FK_NY"].ToString() != DataType.CurrentYearMonth) { throw new Exception("@ FK_NY 字段填充错误. "); } #endregion 检查【开始节点】发送数据信息否完整? }
/// <summary> /// 创建流程,发送分流点第1步. /// </summary> public void Step1() { // 让zhoupeng 登录. BP.WF.Dev2Interface.Port_Login(userNo); //创建空白工作, 发起开始节点. workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, WebUser.No, null, 0, null); #region 检查 创建流程后的数据是否完整 ? // "检查创建这个空白是否有数据完整?; sql = "SELECT * FROM " + fl.PTable + " WHERE OID=" + workid; DataTable dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 0) { throw new Exception("@发起流程出错误,不应该找不到报表数据."); } // 检查节点表单表是否有数据?; sql = "SELECT * FROM ND901 WHERE OID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 0) { throw new Exception("@不应该在开始节点表单表中找不到数据,"); } if (dt.Rows[0]["Rec"].ToString() != WebUser.No) { throw new Exception("@记录人应该是当前人员."); } // 检查创建这个空白是否有数据完整?; sql = "SELECT * FROM WF_EmpWorks WHERE WorkID=" + workid + " AND FK_Emp='" + WebUser.No + "'"; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 0) { throw new Exception("@找到当前人员的待办就是错误的."); } #endregion 检查发起流程后的数据是否完整? //组织参数. Hashtable ht = new Hashtable(); ht.Add("KeFuBu", 1); ht.Add("ShiChangBu", 1); ht.Add("YanFaBu", 1); //开始节点:执行发送,并获取发送对象. 主线程向子线程发送. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht); #region 第1步: 检查【开始节点】发送对象返回的信息是否完整? //从获取的发送对象里获取到下一个工作者: zhanghaicheng,qifenglin,guoxiangbin . if (objs.VarAcceptersID != "zhanghaicheng,qifenglin,guoxiangbin,") { throw new Exception("@下一步的接受人不正确, zhanghaicheng,qifenglin,guoxiangbin, .现在是:" + objs.VarAcceptersID); } if (objs.VarToNodeID != 901) { throw new Exception("@应该是 901节点. 现在是:" + objs.VarToNodeID); } if (objs.VarWorkID != workid) { throw new Exception("@主线程的workid不应该变化:" + objs.VarWorkID); } if (objs.VarCurrNodeID != 901) { throw new Exception("@当前节点的编号不能变化:" + objs.VarCurrNodeID); } if (objs.VarTreadWorkIDs == null) { throw new Exception("@没有获取到三条子线程ID."); } if (objs.VarTreadWorkIDs.Contains(",") == false) { throw new Exception("@没有获取到三条子线程的WorkID:" + objs.VarTreadWorkIDs); } #endregion 检查【开始节点】发送对象返回的信息是否完整? #region 第2步: 检查流程引擎控制系统表是否符合预期. gwf = new GenerWorkFlow(workid); if (gwf.FK_Node != 901) { throw new Exception("@主线程向子线程发送时,主线程的FK_Node应该不变化,现在:" + gwf.FK_Node); } if (gwf.WFState != WFState.Runing) { throw new Exception("@主线程向子线程发送时,主线程的 WFState 应该 WFState.Runing :" + gwf.WFState.ToString()); } if (gwf.Starter != WebUser.No) { throw new Exception("@应该是发起人员,现在是:" + gwf.Starter); } //找出发起人的工作列表. gwl = new GenerWorkerList(workid, 901, WebUser.No); if (gwl.IsPass == true) { throw new Exception("@干流上的pass状态应该是通过,此人已经没有他的待办工作了."); } //找出子线程上的工作人员. GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.Retrieve(GenerWorkerListAttr.FID, workid); if (gwfs.Count != 3) { throw new Exception("@应该有两个流程注册,现在是:" + gwfs.Count + "个."); } //检查它们的注册数据是否完整. foreach (GenerWorkFlow item in gwfs) { if (item.Starter != WebUser.No) { throw new Exception("@当前的人员应当是发起人,现在是:" + item.Starter); } //Node nd = new Node(item.FK_Node); //if (nd.iss //if (item.FK_Node == 901) // throw new Exception("@当前节点应当是 902 ,现在是:" + item.FK_Node); if (item.WFState != WFState.Runing) { throw new Exception("@当前 WFState 应当是 Runing ,现在是:" + item.WFState.ToString()); } } //找出子线程工作处理人员的工作列表. GenerWorkerLists gwls = new GenerWorkerLists(); gwls.Retrieve(GenerWorkerListAttr.FID, workid); if (gwls.Count != 3) { throw new Exception("@应该在子线程上查询出来 3 个待办,现在只有(" + gwls.Count + ")个。"); } //检查子线程的待办完整性. foreach (GenerWorkerList item in gwls) { if (item.IsPass) { throw new Exception("@不应该是已经通过,因为他们没有处理。"); } if (item.IsEnable == false) { throw new Exception("@应该是:IsEnable "); } if (item.Sender.Contains(WebUser.No) == false) { throw new Exception("@发送人,应该是当前人员。现在是:" + item.Sender); } if (item.FK_Flow != "009") { throw new Exception("@应该是 009 现在是:" + item.FK_Flow); } //if (item.FK_Node != 902) // throw new Exception("@应该是 902 现在是:" + item.FK_Node); } //取主线程的待办工作. sql = "SELECT * FROM WF_EmpWorks WHERE WorkID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 0) { throw new Exception("@不应当出现主线程的待办在 WF_EmpWorks 视图中. " + sql); } //取待办子线程的待办工作. sql = "SELECT * FROM WF_EmpWorks WHERE FID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 3) { throw new Exception("@应该取出来两个子线程的 WF_EmpWorks 视图中. " + sql); } #endregion end 检查流程引擎控制系统表是否符合预期. #region 第3步: 检查【开始节点】发送节点表单-数据信息否完整? //检查节点表单表是否有数据? sql = "SELECT * FROM ND901 WHERE OID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 1) { throw new Exception("@应该找到开始节点表单数据,但是没有。"); } if (dt.Rows[0]["Rec"].ToString() != WebUser.No) { throw new Exception("@没有向主线程开始节点表里写入Rec字段,现在是:" + dt.Rows[0]["Rec"].ToString() + "应当是:" + WebUser.No); } //找出子线程工作处理人员的工作列表. gwls = new GenerWorkerLists(); gwls.Retrieve(GenerWorkerListAttr.FID, workid); //检查子线程节点数据表是否正确。 foreach (GenerWorkerList item in gwls) { sql = "SELECT * FROM ND" + item.FK_Node + " WHERE OID=" + item.WorkID; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 1) { throw new Exception("@不应该发现不到子线程节点数据。"); } foreach (DataColumn dc in dt.Columns) { string val = dt.Rows[0][dc.ColumnName].ToString(); switch (dc.ColumnName) { case WorkAttr.FID: if (val != workid.ToString()) { throw new Exception("@不应当不等于workid."); } break; case WorkAttr.Rec: if (val != item.FK_Emp) { throw new Exception("@不应当不等于:" + item.FK_Emp); } break; case WorkAttr.MyNum: if (string.IsNullOrEmpty(val)) { throw new Exception("@不应当为空:" + dc.ColumnName); } break; case WorkAttr.RDT: if (string.IsNullOrEmpty(val)) { throw new Exception("@ RDT 不应当为空:" + dc.ColumnName); } break; case WorkAttr.CDT: if (string.IsNullOrEmpty(val)) { throw new Exception("@ CDT 不应当为空:" + dc.ColumnName); } break; case WorkAttr.Emps: if (string.IsNullOrEmpty(val) || val.Contains(WebUser.No) == false) { throw new Exception("@ Emps 不应当为空,或者不包含发起人。"); } break; default: break; } //结束列的col判断。 } } // 检查报表数据是否完整。 sql = "SELECT * FROM ND9Rpt WHERE OID=" + workid; dt = DBAccess.RunSQLReturnTable(sql); foreach (DataColumn dc in dt.Rows) { string val = (string)dt.Rows[0][dc.ColumnName]; switch (dc.ColumnName) { case GERptAttr.FID: if (int.Parse(val) != 0) { throw new Exception("@应该是 FID =0 "); } break; case GERptAttr.FK_Dept: if (val != WebUser.FK_Dept) { throw new Exception("@ FK_Dept 字段填充错误,应当是:" + WebUser.FK_Dept + ",现在是:" + val); } break; case GERptAttr.FK_NY: if (val != DataType.CurrentYearMonth) { throw new Exception("@ FK_NY 字段填充错误. "); } break; case GERptAttr.FlowDaySpan: if (val != "0") { throw new Exception("@ FlowDaySpan 应当是 0 . "); } break; case GERptAttr.FlowEmps: if (val.Contains(WebUser.No) == false) { throw new Exception("@ 应该包含 zhoupeng , 现在是: " + val); } break; case GERptAttr.FlowEnder: if (val != "zhoupeng") { throw new Exception("@应该是 zhoupeng 是 FlowEnder ."); } break; case GERptAttr.FlowEnderRDT: break; case GERptAttr.FlowEndNode: if (val != "901") { throw new Exception("@应该是 901 是 FlowEndNode ."); } break; case GERptAttr.FlowStarter: if (val != "zhoupeng") { throw new Exception("@应该是 zhoupeng 是 FlowStarter ."); } break; case GERptAttr.MyNum: if (val != "1") { throw new Exception("@ MyNum 应当是1 . "); } break; case GERptAttr.PFlowNo: if (val != "") { throw new Exception("@ PFlowNo 应当是 '' 现在是:" + val); } break; case GERptAttr.PWorkID: if (val != "0") { throw new Exception("@ PWorkID 应当是 '0' 现在是:" + val); } break; case GERptAttr.Title: if (string.IsNullOrEmpty(val)) { throw new Exception("@ Title 不应当是空 " + val); } break; case GERptAttr.WFState: if (int.Parse(val) != (int)WFState.Runing) { throw new Exception("@应该是 WFState.Runing 是当前的状态。"); } break; default: break; } } #endregion 检查【开始节点】发送数据信息否完整? }
protected void Page_Load(object sender, EventArgs e) { //查询出来所有子流程的数据. FrmSubFlow sf = new FrmSubFlow(this.FK_Node); Node nd = new Node(this.FK_Node); this.AddTable(" width='100%' "); if (sf.SFCaption.Length != 0) { this.AddCaption(sf.SFCaption); //标题可以为空 } if (sf.SFDefInfo.Trim().Length == 0) { return; } this.AddTR(); this.AddTDTitleExt("标题"); this.AddTDTitleExt("停留节点"); this.AddTDTitleExt("状态"); this.AddTDTitleExt("处理人"); this.AddTDTitleExt("处理时间"); this.AddTDTitleExt("信息"); this.AddTREnd(); /*有要启动的子流程, 生成启动子流程的连接.*/ string html = ""; string[] strs = sf.SFDefInfo.Split(','); foreach (string str in strs) { if (string.IsNullOrEmpty(str) == true) { continue; } if (str.Length != 3) { continue; } //输出标题. BP.WF.Flow fl = new Flow(str); if (sf.SFSta == FrmSubFlowSta.Enable) { html = "<div style='float:left'><img src='../Img/Max.gif' /> " + fl.Name + "</div> <div style='float:right'><a href=\"javascript:OpenIt('../MyFlow.aspx?FK_Flow=" + fl.No + "&PWorkID=" + this.WorkID + "&PNodeID=" + sf.NodeID + "&PFlowNo=" + nd.FK_Flow + "&PFID=" + this.FID + "')\" >[启动流程]</a></style>"; } if (sf.SFSta == FrmSubFlowSta.Readonly) { html = "<div style='float:left'><img src='../Img/Max.gif' /> " + fl.Name + "</div></style>"; } this.AddTR(); this.AddTD(" class=TRSum colspan=6", html); this.AddTREnd(); //该流程的子流程信息. GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.Retrieve(GenerWorkFlowAttr.PWorkID, this.WorkID, GenerWorkFlowAttr.FK_Flow, str); //流程. foreach (GenerWorkFlow item in gwfs) { if (item.WFState == WFState.Blank) { continue; } this.AddTR(); this.AddTD("style='word-break:break-all;'", "<a href=\"javascript:OpenIt('../WFRpt.aspx?WorkID=" + item.WorkID + "&FK_Flow=" + item.FK_Flow + "')\" ><img src='../Img/Dot.png' width='9px' /> " + item.Title + "</a>"); this.AddTD(item.NodeName); //到达节点名称. if (item.WFState == WFState.Complete) { this.AddTD("已完成"); } else { this.AddTD("未完成"); } this.AddTD(item.TodoEmps); //到达人员. this.AddTD(BP.DA.DataType.ParseSysDate2DateTimeFriendly(item.RDT)); //日期. this.AddTD(item.FlowNote); //流程备注. this.AddTREnd(); //加载他下面的子流程. InsertSubFlows(item.FK_Flow, item.FK_Node, item.WorkID, 1); } } this.AddTableEnd(); }
/// <summary> /// 重新产生标题,根据新的规则. /// </summary> public string DoGenerFlowEmps() { if (WebUser.No != "admin") { return("非admin用户不能执行。"); } Flow fl = new Flow(this.No); GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.Retrieve(GenerWorkFlowAttr.FK_Flow, this.No); foreach (GenerWorkFlow gwf in gwfs) { string emps = ""; string sql = "SELECT EmpFrom FROM ND" + int.Parse(this.No) + "Track WHERE WorkID=" + gwf.WorkID; DataTable dt = BP.DA.DBAccess.RunSQLReturnTable(sql); foreach (DataRow dr in dt.Rows) { if (emps.Contains("," + dr[0].ToString() + ",")) { continue; } } sql = "UPDATE " + fl.PTable + " SET FlowEmps='" + emps + "' WHERE OID=" + gwf.WorkID; DBAccess.RunSQL(sql); sql = "UPDATE WF_GenerWorkFlow SET Emps='" + emps + "' WHERE WorkID=" + gwf.WorkID; DBAccess.RunSQL(sql); } Node nd = fl.HisStartNode; Works wks = nd.HisWorks; wks.RetrieveAllFromDBSource(WorkAttr.Rec); string table = nd.HisWork.EnMap.PhysicsTable; string tableRpt = "ND" + int.Parse(this.No) + "Rpt"; Sys.MapData md = new Sys.MapData(tableRpt); foreach (Work wk in wks) { if (wk.Rec != WebUser.No) { BP.Web.WebUser.Exit(); try { Emp emp = new Emp(wk.Rec); BP.Web.WebUser.SignInOfGener(emp); } catch { continue; } } string sql = ""; string title = BP.WF.WorkFlowBuessRole.GenerTitle(fl, wk); Paras ps = new Paras(); ps.Add("Title", title); ps.Add("OID", wk.OID); ps.SQL = "UPDATE " + table + " SET Title=" + SystemConfig.AppCenterDBVarStr + "Title WHERE OID=" + SystemConfig.AppCenterDBVarStr + "OID"; DBAccess.RunSQL(ps); ps.SQL = "UPDATE " + md.PTable + " SET Title=" + SystemConfig.AppCenterDBVarStr + "Title WHERE OID=" + SystemConfig.AppCenterDBVarStr + "OID"; DBAccess.RunSQL(ps); ps.SQL = "UPDATE WF_GenerWorkFlow SET Title=" + SystemConfig.AppCenterDBVarStr + "Title WHERE WorkID=" + SystemConfig.AppCenterDBVarStr + "OID"; DBAccess.RunSQL(ps); } Emp emp1 = new Emp("admin"); BP.Web.WebUser.SignInOfGener(emp1); return("全部生成成功,影响数据(" + wks.Count + ")条"); }