public void BindWap() { this.Clear(); this.AddFieldSet("<img src='/WF/Img/Home.gif' ><a href='Home.aspx' >Home</a>-<img src='/WF/Img/EmpWorks.gif' >在途工作"); string sql = " SELECT a.WorkID FROM WF_GenerWorkFlow A, WF_GenerWorkerlist B WHERE A.WorkID=B.WorkID AND B.FK_EMP='" + BP.Web.WebUser.No + "' AND B.IsEnable=1"; GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.RetrieveInSQL(GenerWorkFlowAttr.WorkID, "(" + sql + ")"); int i = 0; bool is1 = true; //this.Add("<Table border=0 width='100%'>"); this.AddUL(); foreach (GenerWorkFlow gwf in gwfs) { i++; is1 = this.AddTR(is1); this.AddTDBegin("border=0"); //this.AddUL(); // this.AddLi("MyFlow.aspx?WorkID=" + gwf.WorkID + "&FK_Flow=" + gwf.FK_Flow, gwf.Title + gwf.NodeName); this.AddLi(gwf.Title + gwf.NodeName); this.Add("<a href=\"javascript:Do('您确认吗?','MyFlowInfo" + Glo.FromPageType + ".aspx?DoType=UnSend&FID=" + gwf.FID + "&WorkID=" + gwf.WorkID + "&FK_Flow=" + gwf.FK_Flow + "');\" ><img src='/WF/Img/btn/delete.gif' border=0 />撤消</a>"); this.Add("<a href=\"javascript:WinOpen('./../WF/WFRpt.aspx?WorkID=" + gwf.WorkID + "&FK_Flow=" + gwf.FK_Flow + "&FID=0')\" ><img src='/WF/Img/btn/rpt.gif' border=0 />报告</a>"); } this.AddULEnd(); this.AddFieldSetEnd(); }
public void BindMyWork(int FK_Node) { Node nd = new Node(FK_Node); //Works wks = nd.HisWorks; //Work wk =wks.GetNewEntity; GenerWorkFlows gwfs = new GenerWorkFlows(); QueryObject qo = new QueryObject(gwfs); qo.AddWhereInSQL(GenerWorkFlowAttr.WorkID, "SELECT WorkID FROM WF_GenerWorkerlist WHERE FK_Node=" + FK_Node + " AND FK_Emp='" + WebUser.No + "'"); qo.DoQuery(); this._Text = "<table class='MyWork' id='strs' cellSpacing='0' cellPadding='0' >"; this.Text += "<TR>"; this.Text += "<TD class='MyWorkTitle' nowrap >标题</TD>"; this.Text += "<TD class='MyWorkTitle' nowrap >记录时间</TD>"; this.Text += "<TD class='MyWorkTitle' nowrap >记录人</TD>"; this.Text += "</TR>"; foreach (GenerWorkFlow gwf in gwfs) { this.Text += "<TR class='MyWorkTR' >"; this.Text += "<TD class='MyWorkTD' nowrap ><a href='FlowSV2.aspx?FK_Flow=" + gwf.FK_Flow + "&WorkID=" + gwf.WorkID + "&FK_Node=" + gwf.FK_Node + "' >" + gwf.Title + "</a></TD>"; this.Text += "<TD class='MyWorkTD' nowrap >" + gwf.RDT + "</TD>"; this.Text += "<TD class='MyWorkTD' nowrap >" + gwf.Starter + "</TD>"; this.Text += "<TR>"; } this.Text += "</TABLE>"; this.ParseControl(); }
/// <summary> /// 查询 /// </summary> /// <returns></returns> public string Search_Search() { string TSpan = this.GetRequestVal("TSpan"); string FK_Flow = this.GetRequestVal("FK_Flow"); GenerWorkFlows gwfs = new GenerWorkFlows(); QueryObject qo = new QueryObject(gwfs); qo.AddWhere(GenerWorkFlowAttr.Emps, " LIKE ", "%" + BP.Web.WebUser.No + "%"); if (!DataType.IsNullOrEmpty(TSpan)) { qo.addAnd(); qo.AddWhere(GenerWorkFlowAttr.TSpan, this.GetRequestVal("TSpan")); } if (!DataType.IsNullOrEmpty(FK_Flow)) { qo.addAnd(); qo.AddWhere(GenerWorkFlowAttr.FK_Flow, this.GetRequestVal("FK_Flow")); } qo.Top = 50; if (SystemConfig.AppCenterDBType == DBType.Oracle || SystemConfig.AppCenterDBType == DBType.PostgreSQL) { qo.DoQuery(); DataTable dt = gwfs.ToDataTableField("Ens"); return(BP.Tools.Json.ToJson(dt)); } else { DataTable dt = qo.DoQueryToTable(); return(BP.Tools.Json.ToJson(dt)); } }
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 BindWap_bal() { this.Clear(); int colspan = 7; this.AddTable("width='100%' align=center"); this.AddTR(); this.Add("<TD class=TitleTop colspan=" + colspan + "></TD>"); this.AddTREnd(); this.AddTR(); if (WebUser.IsWap) { this.Add("<TD align=left class=TitleMsg colspan=" + colspan + "><img src='/WF/Img/Home.gif' ><a href='Home.aspx' >Home</a>-<img src='/WF/Img/EmpWorks.gif' >在途工作</TD>"); } else { this.Add("<TD class=TitleMsg colspan=" + colspan + " align=left><img src='/WF/Img/Runing.gif' ><b>在途工作</b></TD>"); } this.AddTREnd(); this.AddTR(); this.AddTDTitle("nowarp=true", "序"); this.AddTDTitle("nowarp=true", "名称"); this.AddTDTitle("nowarp=true", "当前节点"); this.AddTDTitle("nowarp=true", "发起日期"); this.AddTDTitle("nowarp=true", "发起人"); this.AddTDTitle("nowarp=true", "操作"); this.AddTDTitle("nowarp=true", "报告"); this.AddTREnd(); string sql = " SELECT a.WorkID FROM WF_GenerWorkFlow A, WF_GenerWorkerlist B WHERE A.WorkID=B.WorkID AND B.FK_EMP='" + BP.Web.WebUser.No + "' AND B.IsEnable=1"; GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.RetrieveInSQL(GenerWorkFlowAttr.WorkID, "(" + sql + ")"); int i = 0; bool is1 = false; foreach (GenerWorkFlow gwf in gwfs) { i++; is1 = this.AddTR(is1); this.AddTD(i); this.AddTDA("MyFlow.aspx?WorkID=" + gwf.WorkID + "&FK_Flow=" + gwf.FK_Flow, gwf.Title); this.AddTD(gwf.NodeName); this.AddTD(gwf.RDT); this.AddTD(gwf.StarterName); this.AddTD("<a href=\"javascript:Do('您确认吗?','MyFlowInfo" + Glo.FromPageType + ".aspx?DoType=UnSend&FID=" + gwf.FID + "&WorkID=" + gwf.WorkID + "&FK_Flow=" + gwf.FK_Flow + "');\" ><img src='/WF/Img/Btn/delete.gif' border=0 />撤消</a>"); this.AddTD("<a href=\"javascript:WinOpen('./../WF/WFRpt.aspx?WorkID=" + gwf.WorkID + "&FK_Flow=" + gwf.FK_Flow + "&FID=0')\" ><img src='/WF/Img/Btn/rpt.gif' border=0 />报告</a>"); this.AddTREnd(); } this.AddTRSum(); this.AddTD("colspan=" + colspan, " "); this.AddTREnd(); this.AddTableEnd(); }
/// <summary> /// 流程 /// </summary> /// <param name="fl"></param> public void BindIt(BP.WF.Flow fl) { GenerWorkFlows gwfs = new GenerWorkFlows(); QueryObject qo = new QueryObject(gwfs); qo.AddWhereInSQL(GenerWorkFlowAttr.WorkID, " SELECT WorkID FROM WF_GenerWorkFlow WHERE FK_Node IN ( SELECT FK_Node FROM WF_GenerWorkerlist WHERE FK_Emp='" + Web.WebUser.No + "' AND FK_Flow='" + fl.No + "' AND WORKID=WF_GenerWorkFlow.WORKID AND ISENABLE=1 ) "); qo.addOrderBy(GenerWorkFlowAttr.FK_Node, GenerWorkFlowAttr.WorkID); qo.DoQuery(); if (gwfs.Count == 0) { this.UCFlow1.AddMsgOfInfo("流程" + fl.Name, "没有您[" + WebUser.No + WebUser.Name + "]的当前待办工作."); } if (gwfs.Count == 1) { this.Response.Redirect("MyFlow.aspx?FK_Flow=" + fl.No + "&WorkID=" + gwfs[0].GetValByKey(GenerWorkFlowAttr.WorkID).ToString(), true); return; } this.UCFlow1.AddTable(); this.UCFlow1.AddCaptionLeft(fl.Name); this.UCFlow1.AddTR(); this.UCFlow1.AddTDTitle("IDX"); this.UCFlow1.AddTDTitle("标题"); this.UCFlow1.AddTDTitle("停留节点"); this.UCFlow1.AddTDTitle("发起日期"); // this.UCFlow1.AddTDTitle("预先警日期"); this.UCFlow1.AddTDTitle("应完成日期"); this.UCFlow1.AddTDTitle("记录人"); this.UCFlow1.AddTDTitle("工作序号"); this.UCFlow1.AddTREnd(); int i = 0; foreach (GenerWorkFlow gwf in gwfs) { i++; //this.AddTR("onmouseover='TROver(this)' onmouseout='TROut(this)' onclick=\"WinOpen('MyFlow.aspx?FK_Flow="+fl.No+"&WorkID="+dr[WorkAttr.OID ].ToString()+"' )\" " ); this.UCFlow1.AddTR("title='在列表中根据标题选择您的代办工作' onmouseover='TROver(this)' onmouseout='TROut(this)' onclick=\"javascript:window.location.href='MyFlow.aspx?FK_Flow=" + fl.No + "&WorkID=" + gwf.WorkID + "'\" "); this.UCFlow1.AddTDIdx(i); this.UCFlow1.AddTD(gwf.Title); this.UCFlow1.AddTD(gwf.NodeName); this.UCFlow1.AddTD(gwf.RDT); this.UCFlow1.AddTD(""); // this.UCFlow1.AddTD(gwf.w); // this.UCFlow1.AddTD(gwf.RDT); this.UCFlow1.AddTD(gwf.StarterName); //this.UCFlow1.AddTD(gwf.FK_Taxpayer); //this.UCFlow1.AddTD(gwf.TaxpayerName); this.UCFlow1.AddTD(gwf.WorkID); this.UCFlow1.AddTREnd(); } this.UCFlow1.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> /// 获取挂起数据,传入流程编号与项目编号 /// </summary> /// <returns></returns> private string GetHunupFlowData() { try { string FK_Flow = getUTF8ToString("FK_Flow"); string ProjNo = getUTF8ToString("ProjNo"); int state = (int)WFState.HungUp; string sql = "SELECT a.WorkID FROM WF_GenerWorkFlow A, WF_GenerWorkerlist B WHERE A.FK_Flow='" + FK_Flow + "' AND A.WFState=" + state + " AND A.WorkID=B.WorkID AND B.FK_Emp='" + WebUser.No + "' AND A.WorkID in (select OID from V_FlowData where ProjNo ='" + ProjNo + "') AND B.IsEnable=1 "; GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.RetrieveInSQL(GenerWorkFlowAttr.WorkID, "(" + sql + ")"); DataTable dt = gwfs.ToDataTableField(); return(GetEasyUIJson(dt)); } catch { return("[{}]"); } }
/// <summary> /// 获取在途数据,传入流程编号和项目编号 /// </summary> /// <returns></returns> private string GetRuningFlowData() { try { string FK_Flow = getUTF8ToString("FK_Flow"); string ProjNo = getUTF8ToString("ProjNo"); string sql = "SELECT a.WorkID FROM WF_GenerWorkFlow A, WF_GenerWorkerlist B WHERE A.FK_Flow='" + FK_Flow + "' AND A.WorkID=B.WorkID AND B.FK_Emp='" + WebUser.No + "' AND A.WorkID in (select OID from V_FlowData where ProjNo ='" + ProjNo + "') AND B.IsEnable=1 AND (B.IsPass=1 or B.IsPass < 0 ) "; GenerWorkFlows gwfs = new GenerWorkFlows(); gwfs.RetrieveInSQL(GenerWorkFlowAttr.WorkID, "(" + sql + ")"); DataTable dt = gwfs.ToDataTableField(); //按照接受日期排序 dt.DefaultView.Sort = "RDT DESC"; return(GetEasyUIJson(dt.DefaultView.ToTable())); } catch { return("[{}]"); } }
/// <summary> /// 发送 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Btn_Send_Click(object sender, EventArgs e) { string info = ""; /*step2 : 检查子子流程是否都已经完成,如果没有完成了,就提示错误。*/ GenerWorkFlows gwfs = BP.WF.Dev2Interface.DB_SubFlows(this.WorkID); if (gwfs.Count > 0) { info += "<br>如下子流程没有完成,您不能提交."; foreach (GenerWorkFlow item in gwfs) { info += "<br>" + item.Title; } } if (string.IsNullOrEmpty(info) == false) { this.Response.Write(info); return; } string msg = BP.WF.Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID).ToMsgOfHtml(); this.Response.Write("<font color=red>" + msg + "</font>"); }
protected void Btn_Send_Click(object sender, EventArgs e) { string info = ""; /*step1 : 发送前要检查是否有设备没有启动。*/ string sql = "SELECT COUNT(*) FROM tab_wf_commonkpioptivalue WHERE ParentWorkID=" + this.WorkID + " AND WORKID=0"; int numUnSendSubFlow = DBAccess.RunSQLReturnValInt(sql); if (numUnSendSubFlow > 0) { info += "<br>有" + numUnSendSubFlow + "设备没有发起子流程,所以您不能执行地市局的此流程发送."; } /*step2 : 检查子子流程是否都已经完成,如果没有完成了,就提示错误。*/ GenerWorkFlows gwfs = BP.WF.Dev2Interface.DB_SubFlows(this.WorkID); if (gwfs.Count > 0) { info += "<br>如下子流程没有完成,您不能提交."; foreach (GenerWorkFlow item in gwfs) { info += "<br>" + item.Title; } } if (string.IsNullOrEmpty(info) == false) { this.Response.Write(info); return; } /*step3 : 执行向下发送。*/ string msg = BP.WF.Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID).ToMsgOfHtml(); //提示发送消息。 this.Session["info"] = msg; this.Response.Redirect("ShowMsg.aspx?ss" + BP.DA.DataType.CurrentDataTime, true); }
/// <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 + ")条"); }
/// <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 检查【开始节点】发送数据信息否完整? }
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> /// <returns></returns> public string Search_Init() { DataSet ds = new DataSet(); string sql = ""; string tSpan = this.GetRequestVal("TSpan"); if (tSpan == "") { tSpan = null; } #region 1、获取时间段枚举/总数. SysEnums ses = new SysEnums("TSpan"); DataTable dtTSpan = ses.ToDataTableField(); dtTSpan.TableName = "TSpan"; ds.Tables.Add(dtTSpan); if (this.FK_Flow == null) { sql = "SELECT TSpan as No, COUNT(WorkID) as Num FROM WF_GenerWorkFlow WHERE (Emps LIKE '%" + WebUser.No + "%' OR Starter='" + WebUser.No + "') AND WFState > 1 GROUP BY TSpan"; } else { sql = "SELECT TSpan as No, COUNT(WorkID) as Num FROM WF_GenerWorkFlow WHERE FK_Flow='" + this.FK_Flow + "' AND (Emps LIKE '%" + WebUser.No + "%' OR Starter='" + WebUser.No + "') AND WFState > 1 GROUP BY TSpan"; } DataTable dtTSpanNum = BP.DA.DBAccess.RunSQLReturnTable(sql); foreach (DataRow drEnum in dtTSpan.Rows) { string no = drEnum["IntKey"].ToString(); foreach (DataRow dr in dtTSpanNum.Rows) { if (dr["No"].ToString() == no) { drEnum["Lab"] = drEnum["Lab"].ToString() + "(" + dr["Num"] + ")"; break; } } } #endregion #region 2、处理流程类别列表. if (tSpan == "-1") { sql = "SELECT FK_Flow as No, FlowName as Name, COUNT(WorkID) as Num FROM WF_GenerWorkFlow WHERE (Emps LIKE '%" + WebUser.No + "%' OR TodoEmps LIKE '%" + BP.Web.WebUser.No + ",%' OR Starter='" + WebUser.No + "') AND WFState > 1 AND FID = 0 GROUP BY FK_Flow, FlowName"; } else { sql = "SELECT FK_Flow as No, FlowName as Name, COUNT(WorkID) as Num FROM WF_GenerWorkFlow WHERE TSpan=" + tSpan + " AND (Emps LIKE '%" + WebUser.No + "%' OR TodoEmps LIKE '%" + BP.Web.WebUser.No + ",%' OR Starter='" + WebUser.No + "') AND WFState > 1 AND FID = 0 GROUP BY FK_Flow, FlowName"; } DataTable dtFlows = BP.DA.DBAccess.RunSQLReturnTable(sql); if (SystemConfig.AppCenterDBType == DBType.Oracle || SystemConfig.AppCenterDBType == DBType.PostgreSQL) { dtFlows.Columns[0].ColumnName = "No"; dtFlows.Columns[1].ColumnName = "Name"; dtFlows.Columns[2].ColumnName = "Num"; } dtFlows.TableName = "Flows"; ds.Tables.Add(dtFlows); #endregion #region 3、处理流程实例列表. GenerWorkFlows gwfs = new GenerWorkFlows(); String sqlWhere = ""; sqlWhere = "(1 = 1)AND (((Emps LIKE '%" + WebUser.No + "%')OR(TodoEmps LIKE '%" + WebUser.No + "%')OR(Starter = '" + WebUser.No + "')) AND (WFState > 1)"; if (tSpan != "-1") { sqlWhere += "AND (TSpan = '" + tSpan + "') "; } if (this.FK_Flow != null) { sqlWhere += "AND (FK_Flow = '" + this.FK_Flow + "')) "; } else { sqlWhere += ")"; } sqlWhere += "ORDER BY RDT DESC"; if (SystemConfig.AppCenterDBType == DBType.Oracle) { sql = "SELECT NVL(WorkID, 0) WorkID,NVL(FID, 0) FID ,FK_Flow,FlowName,Title, NVL(WFSta, 0) WFSta,WFState, Starter, StarterName,Sender,NVL(RDT, '2018-05-04 19:29') RDT,NVL(FK_Node, 0) FK_Node,NodeName, TodoEmps FROM (select * from WF_GenerWorkFlow where " + sqlWhere + ") where rownum <= 500"; } else if (SystemConfig.AppCenterDBType == DBType.MSSQL) { sql = "SELECT TOP 500 ISNULL(WorkID, 0) WorkID,ISNULL(FID, 0) FID ,FK_Flow,FlowName,Title, ISNULL(WFSta, 0) WFSta,WFState, Starter, StarterName,Sender,ISNULL(RDT, '2018-05-04 19:29') RDT,ISNULL(FK_Node, 0) FK_Node,NodeName, TodoEmps FROM WF_GenerWorkFlow where " + sqlWhere; } else if (SystemConfig.AppCenterDBType == DBType.MySQL || SystemConfig.AppCenterDBType == DBType.PostgreSQL) { sql = "SELECT IFNULL(WorkID, 0) WorkID,IFNULL(FID, 0) FID ,FK_Flow,FlowName,Title, IFNULL(WFSta, 0) WFSta,WFState, Starter, StarterName,Sender,IFNULL(RDT, '2018-05-04 19:29') RDT,IFNULL(FK_Node, 0) FK_Node,NodeName, TodoEmps FROM WF_GenerWorkFlow where " + sqlWhere + " LIMIT 500"; } DataTable mydt = BP.DA.DBAccess.RunSQLReturnTable(sql); if (SystemConfig.AppCenterDBType == DBType.Oracle || SystemConfig.AppCenterDBType == DBType.PostgreSQL) { mydt.Columns[0].ColumnName = "WorkID"; mydt.Columns[1].ColumnName = "FID"; mydt.Columns[2].ColumnName = "FK_Flow"; mydt.Columns[3].ColumnName = "FlowName"; mydt.Columns[4].ColumnName = "Title"; mydt.Columns[5].ColumnName = "WFSta"; mydt.Columns[6].ColumnName = "WFState"; mydt.Columns[7].ColumnName = "Starter"; mydt.Columns[8].ColumnName = "StarterName"; mydt.Columns[9].ColumnName = "Sender"; mydt.Columns[10].ColumnName = "RDT"; mydt.Columns[11].ColumnName = "FK_Node"; mydt.Columns[12].ColumnName = "NodeName"; mydt.Columns[13].ColumnName = "TodoEmps"; } mydt.TableName = "WF_GenerWorkFlow"; if (mydt != null) { mydt.Columns.Add("TDTime"); foreach (DataRow dr in mydt.Rows) { dr["TDTime"] = GetTraceNewTime(dr["FK_Flow"].ToString(), int.Parse(dr["WorkID"].ToString()), int.Parse(dr["FID"].ToString())); } } #endregion ds.Tables.Add(mydt); return(BP.Tools.Json.ToJson(ds)); }
private void BindSearch() { Flow fl = new Flow(this.FK_Flow); var gwfs = new GenerWorkFlows(); var qo = new QueryObject(gwfs); qo.AddWhere(GenerWorkFlowAttr.FK_Flow, FK_Flow); if (!string.IsNullOrWhiteSpace(Depts)) { qo.addAnd(); qo.AddWhereIn(GenerWorkFlowAttr.FK_Dept, "(" + Depts + ")"); } if (!string.IsNullOrWhiteSpace(Emps)) { qo.addAnd(); qo.AddWhereIn(GenerWorkFlowAttr.Starter, "(" + Emps.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Aggregate(string.Empty, (curr, next) => curr + "'" + next + "',").TrimEnd(',') + ")"); } if (!string.IsNullOrWhiteSpace(DateFrom)) { qo.addAnd(); qo.AddWhere(GenerWorkFlowAttr.RDT, ">", DateFrom); } if (!string.IsNullOrWhiteSpace(DateTo)) { qo.addAnd(); qo.AddWhere(GenerWorkFlowAttr.RDT, "<=", DateTo); } if (!string.IsNullOrWhiteSpace(Keywords)) { qo.addAnd(); qo.AddWhere(GenerWorkFlowAttr.Title, "LIKE", "%" + Keywords + "%"); } qo.addOrderBy(GenerWorkFlowAttr.RDT); var url = string.Format("FlowDB.aspx?FK_Flow={0}&WorkID={1}&IsSearch=1&Depts={2}&DeptsText={3}&Emps={4}&EmpsText={5}&DateFrom={6}&DateTo={7}&Keywords={8}", FK_Flow, WorkID, Depts, DeptsText, Emps, EmpsText, DateFrom, DateTo, Keywords); Pub2.BindPageIdxEasyUi(qo.GetCount(), url, this.PageIdx, SystemConfig.PageSize); qo.DoQuery(gwfs.GetNewEntity.PK, SystemConfig.PageSize, this.PageIdx); this.Pub1.AddTable("class='Table' cellspacing='0' cellpadding='0' border='0' style='width:100%'"); Pub1.AddTR(); Pub1.AddTDGroupTitle("colspan='8'", fl.Name); Pub1.AddTREnd(); this.Pub1.AddTR(); this.Pub1.AddTDGroupTitle("style='text-align:center'", "序号"); this.Pub1.AddTDGroupTitle("部门"); this.Pub1.AddTDGroupTitle("发起人"); this.Pub1.AddTDGroupTitle("发起时间"); this.Pub1.AddTDGroupTitle("当前停留节点"); this.Pub1.AddTDGroupTitle("标题"); this.Pub1.AddTDGroupTitle("处理人"); this.Pub1.AddTDGroupTitle("操作"); this.Pub1.AddTREnd(); int idx = 0; foreach (GenerWorkFlow item in gwfs) { idx++; this.Pub1.AddTR(); this.Pub1.AddTDIdx(SystemConfig.PageSize * (this.PageIdx - 1) + idx); this.Pub1.AddTD(item.DeptName); this.Pub1.AddTD(item.StarterName); this.Pub1.AddTD(item.RDT); this.Pub1.AddTD(item.NodeName); this.Pub1.AddTD(item.Title); this.Pub1.AddTD(item.TodoEmps); this.Pub1.AddTDBegin(); this.Pub1.Add("<a href=\"javascript:WinOpen('./../../WFRpt.aspx?WorkID=" + item.WorkID + "&FK_Flow=" + this.FK_Flow + "&FID=" + item.FID + "','ds'); \" class='easyui-linkbutton'>轨迹</a> "); //this.Pub1.Add("<a href=\"javascript:WinOpen('../../../WFRpt.aspx?WorkID=" + item.WorkID + "&FK_Flow=" + this.FK_Flow + "&FID=" + item.FID + "&FK_Node=" + item.FK_Node + "','ds'); \" >报告</a>-"); this.Pub1.Add("<a href=\"javascript:DelIt('" + item.FK_Flow + "','" + item.WorkID + "');\" class='easyui-linkbutton' data-options=\"iconCls:'icon-delete'\" onclick=\"return confirm('您确定要删除吗?');\">删除</a> "); this.Pub1.Add("<a href=\"javascript:FlowShift('" + item.FK_Flow + "','" + item.WorkID + "');\" class='easyui-linkbutton'>移交</a> "); this.Pub1.Add("<a href=\"javascript:FlowSkip('" + item.FK_Flow + "','" + item.WorkID + "');\" class='easyui-linkbutton'>跳转</a>"); this.Pub1.AddTDEnd(); this.Pub1.AddTREnd(); } this.Pub1.AddTableEnd(); }
/// <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 检查【开始节点】发送数据信息否完整? }