예제 #1
0
        /// <summary>
        /// 运行完一个流程,并返回它的workid.
        /// </summary>
        /// <returns></returns>
        public Int64 RunCompeleteOneWork()
        {
            string fk_flow   = "024";
            string startUser = "******";

            BP.Port.Emp starterEmp = new Port.Emp(startUser);

            Flow fl = new Flow(fk_flow);

            //让zhanghaicheng登录, 在以后,就可以访问WebUser.No, WebUser.Name 。
            BP.WF.Dev2Interface.Port_Login(startUser);

            //创建空白工作, 发起开始节点.
            Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow);
            //执行发送,并获取发送对象,.
            SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);

            //执行第二步 :  .
            BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID);
            objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);

            //执行第三步完成:  .
            BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID);
            objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);
            return(workid);
        }
예제 #2
0
        /// <summary>
        /// 创建一个测试场景,让他跑到结束节点.
        /// </summary>
        public Int64 CreateTastCase()
        {
            string fk_flow   = "088";
            string startUser = "******";

            BP.Port.Emp starterEmp = new Port.Emp(startUser);

            Flow fl = new Flow(fk_flow);

            //让周天娇登录, 在以后,就可以访问WebUser.No, WebUser.Name 。
            BP.WF.Dev2Interface.Port_Login(startUser);

            //创建空白工作, 发起开始节点.
            Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow);

            //执行向 分流点 发送, qifenglin接受.
            SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);

            if (objs.VarAcceptersID != "qifenglin")
            {
                throw new Exception("@接受人错误,应当是qifenglin,现在是:" + objs.VarAcceptersID);
            }

            //让分流点的发起人登录.
            BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID);
            //执行向下发送.
            objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);

            if (objs.VarAcceptersID != "zhangyifan,zhoushengyu,")
            {
                throw new Exception("@接受人错误,应当是zhangyifan,zhoushengyu,现在是:" + objs.VarAcceptersID);
            }

            string    sql = "SELECT WorkID,FK_Emp FROM WF_GenerWorkerlist WHERE FID=" + workid;
            DataTable dt  = DBAccess.RunSQLReturnTable(sql);

            foreach (DataRow dr in dt.Rows)
            {
                Int64  id  = Int64.Parse(dr["WorkID"].ToString());
                string emp = dr[1].ToString();
                BP.WF.Dev2Interface.Port_Login(emp);
                objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, id);
            }


            //让qifenglin登录,发到最后一个节点,完成tastcase.
            BP.WF.Dev2Interface.Port_Login("zhanghaicheng");
            objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);
            if (objs.VarAcceptersID != "zhoupeng")
            {
                throw new Exception("@接受人错误,应当是zhoupeng,现在是:" + objs.VarAcceptersID);
            }

            return(workid);
        }
예제 #3
0
        public void Test1()
        {
            string fk_flow   = "024";
            string startUser = "******";

            BP.Port.Emp starterEmp = new Port.Emp(startUser);

            Flow fl = new Flow(fk_flow);

            //让zhanghaicheng登录, 在以后,就可以访问WebUser.No, WebUser.Name 。
            BP.WF.Dev2Interface.Port_Login(startUser);

            //创建空白工作, 发起开始节点.
            Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow);

            //执行发送,并获取发送对象,.
            SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);

            //下一个工作者.
            string nextUser = objs.VarAcceptersID;

            // 下一个发送的节点ID
            int nextNodeID = objs.VarToNodeID;

            // 让 nextUser = zhoupeng 登录.
            BP.WF.Dev2Interface.Port_Login(nextUser);

            //获取第二个节点上的退回集合.
            DataTable dt = BP.WF.Dev2Interface.DB_GenerWillReturnNodes(objs.VarToNodeID, workid, 0);

            #region 检查获取第二步退回的节点数据是否符合预期.
            if (dt.Rows.Count != 1)
            {
                throw new Exception("@在第二个节点是获取退回节点集合时,不符合数据预期,应该只能获取一个退回节点,现在是:" + dt.Rows.Count);
            }

            int nodeID = int.Parse(dt.Rows[0]["No"].ToString());
            if (nodeID != 2401)
            {
                throw new Exception("@在第二个节点是获取退回节点集合时,被退回的点应该是2401");
            }

            string RecNo = dt.Rows[0]["Rec"].ToString();
            if (RecNo != startUser)
            {
                throw new Exception("@在第二个节点是获取退回节点集合时,被退回人应该是" + startUser + ",现在是" + RecNo);
            }
            #endregion 检查获取第二步退回的节点数据是否符合预期.

            //在第二个节点执行退回.
            BP.WF.Dev2Interface.Node_ReturnWork(fk_flow, workid, 0,
                                                objs.VarToNodeID, 2401, "退回测试", false);

            #region 检查退回后的数据完整性.
            GenerWorkFlow gwf = new GenerWorkFlow(workid);
            if (gwf.WFState != WFState.ReturnSta)
            {
                throw new Exception("@执行退回,流程状态应该是退回,现在是:" + gwf.WFState.ToString());
            }

            if (gwf.FK_Node != 2401)
            {
                throw new Exception("@执行退回,当前节点应该是2401, 现在是" + gwf.FK_Node.ToString());
            }

            //检查流程报表是否符合需求。
            sql = "SELECT * FROM " + fl.PTable + " WHERE oid=" + 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 GERptAttr.Title:
                    if (DataType.IsNullOrEmpty(val))
                    {
                        throw new Exception("@退回后流程标题丢失了");
                    }
                    break;

                case GERptAttr.FID:
                    if (val != "0")
                    {
                        throw new Exception("@应当是0");
                    }
                    break;

                case GERptAttr.FK_Dept:
                    if (val != starterEmp.FK_Dept)
                    {
                        throw new Exception("@发起人的部门发生了变化,应当是(" + starterEmp.FK_Dept + "),现在是:" + val);
                    }
                    break;

                case GERptAttr.FK_NY:
                    if (val != DataType.CurrentYearMonth)
                    {
                        throw new Exception("@应当是" + DataType.CurrentYearMonth + ", 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowDaySpan:
                    if (val != "0")
                    {
                        throw new Exception("@应当是 0 , 现在是:" + val);
                    }
                    break;

                //case GERptAttr.FlowEmps:
                //    if (val.Contains("zhanghaicheng") == false || val.Contains("zhoupeng") == false)
                //        throw new Exception("@应当包含的人员,现在不存在, 现在是:" + val);
                //    break;
                //case GERptAttr.FlowEnder:
                //    if (val != "zhanghaicheng")
                //        throw new Exception("@应当是 zhanghaicheng , 现在是:" + val);
                //    break;
                case GERptAttr.FlowEnderRDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("@应当是 当前日期, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowEndNode:
                    if (val != "2401")
                    {
                        throw new Exception("@应当是 2401, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowStarter:
                    if (val != startUser)
                    {
                        throw new Exception("@应当是 " + startUser + ", 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowStartRDT:
                    if (DataType.IsNullOrEmpty(val))
                    {
                        throw new Exception("@应当不能为空,现在是:" + val);
                    }
                    break;

                case GERptAttr.WFState:
                    if (int.Parse(val) != (int)WFState.ReturnSta)
                    {
                        throw new Exception("@应当是  WFState.Complete 现在是" + val);
                    }
                    break;

                default:
                    break;
                }
            }
            #endregion 检查退回后的数据完整性.
        }
예제 #4
0
        /// <summary>
        /// 说明 :此测试针对于演示环境中的 001 流程编写的单元测试代码。
        /// 涉及到了: 创建,发送,撤销,方向条件、退回等功能。
        /// </summary>
        public override void Do()
        {
            string fk_flow = "001";
            string startUser = "******";
            BP.Port.Emp starterEmp = new Port.Emp(startUser);


            Flow fl = new Flow(fk_flow);

            //让周天娇登录, 在以后,就可以访问WebUser.No, WebUser.Name 。
            BP.WF.Dev2Interface.Port_Login(startUser);

            //创建空白工作, 发起开始节点.
            Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, WebUser.No, null, 0, null);

            //执行发送,并获取发送对象,.
            SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);

            //下一个工作者.
            string nextUser = objs.VarAcceptersID;
            // 下一个发送的节点ID
            int nextNodeID = objs.VarToNodeID;

            // 让 nextUser = qifenglin 登录.
            BP.WF.Dev2Interface.Port_Login(nextUser);

            //获取第二个节点上的退回集合.
            DataTable dt = BP.WF.Dev2Interface.DB_GenerWillReturnNodes(objs.VarToNodeID, workid, 0);

            #region 检查获取第二步退回的节点数据是否符合预期.
            if (dt.Rows.Count != 1)
                throw new Exception("@在第二个节点是获取退回节点集合时,不符合数据预期,应该只能获取一个退回节点,现在是:" + dt.Rows.Count);

            int nodeID = int.Parse(dt.Rows[0]["No"].ToString());
            if (nodeID != 101)
                throw new Exception("@在第二个节点是获取退回节点集合时,被退回的点应该是101");

            string RecNo = dt.Rows[0]["Rec"].ToString();
            if (RecNo != startUser)
                throw new Exception("@在第二个节点是获取退回节点集合时,被退回人应该是" + startUser + ",现在是" + RecNo);
            #endregion 检查获取第二步退回的节点数据是否符合预期.

            //在第二个节点执行退回.
            BP.WF.Dev2Interface.Node_ReturnWork(fk_flow, workid,0,objs.VarToNodeID, 101, "退回测试", false);

            #region 检查退回后的数据完整性.
            GenerWorkFlow gwf = new GenerWorkFlow(workid);
            if (gwf.WFState != WFState.ReturnSta)
                throw new Exception("@执行退回,流程状态应该是退回,现在是:" + gwf.WFState.ToString());

            if (gwf.FK_Node != 101)
                throw new Exception("@执行退回,当前节点应该是101, 现在是" + gwf.FK_Node.ToString());

            sql = "SELECT WFState from nd1rpt where oid=" + workid;
            int wfstate = DBAccess.RunSQLReturnValInt(sql, -1);
            if (wfstate != (int)WFState.ReturnSta)
                throw new Exception("@在第二个节点退回后rpt数据不正确,流程状态应该是退回,现在是:" + wfstate);

            //检查流程报表是否符合需求。
            sql = "SELECT * FROM "+fl.PTable+" WHERE oid=" + 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 GERptAttr.Title:
                        if (string.IsNullOrEmpty(val))
                            throw new Exception("@退回后流程标题丢失了");
                        break;
                    case GERptAttr.FID:
                        if (val != "0")
                            throw new Exception("@应当是0");
                        break;
                    case GERptAttr.FK_Dept:
                        if (val != starterEmp.FK_Dept)
                            throw new Exception("@发起人的部门发生了变化,应当是(" + starterEmp.FK_Dept + "),现在是:" + val);
                        break;
                    case GERptAttr.FK_NY:
                        if (val != DataType.CurrentYearMonth)
                            throw new Exception("@应当是" + DataType.CurrentYearMonth + ", 现在是:" + val);
                        break;
                    case GERptAttr.FlowDaySpan:
                        if (val != "0")
                            throw new Exception("@应当是 0 , 现在是:" + val);
                        break;
                    //case GERptAttr.FlowEmps:
                    //    if (val.Contains("zhanghaicheng") == false || val.Contains("zhoupeng") == false)
                    //        throw new Exception("@应当包含的人员,现在不存在, 现在是:" + val);
                    //    break;
                    //case GERptAttr.FlowEnder:
                    //    if (val != "zhanghaicheng")
                    //        throw new Exception("@应当是 zhanghaicheng , 现在是:" + val);
                    //    break;
                    case GERptAttr.FlowEnderRDT:
                        if (val.Contains(DataType.CurrentData) == false)
                            throw new Exception("@应当是 当前日期, 现在是:" + val);
                        break;
                    case GERptAttr.FlowEndNode:
                        if (val != "101")
                            throw new Exception("@应当是 101, 现在是:" + val);
                        break;
                    case GERptAttr.FlowStarter:
                        if (val != startUser)
                            throw new Exception("@应当是 " + startUser + ", 现在是:" + val);
                        break;
                    case GERptAttr.FlowStartRDT:
                        if (string.IsNullOrEmpty(val))
                            throw new Exception("@应当不能为空,现在是:" + val);
                        break;
                    case GERptAttr.WFState:
                        if (int.Parse(val) != (int)WFState.ReturnSta)
                            throw new Exception("@应当是  WFState.Complete 现在是" + val);
                        break;
                    default:
                        break;
                }
            }
            #endregion 检查退回后的数据完整性.

            //让发起人登录,并发送到部门经理审批.
            BP.WF.Dev2Interface.Port_Login(startUser);
            objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);

            //让第二步骤的qifengin登录并处理它,发送到总经理审批。
            BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID);

            Hashtable ht = new Hashtable();
            ht.Add("HeJiFeiYong", 999999); //金额大于1w 就让它发送到总经理审批节点上去.
            objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht);

            // 让zhoupeng登录, 并执行退回.
            BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID);

            //获取第三个节点上的退回集合.
            dt = BP.WF.Dev2Interface.DB_GenerWillReturnNodes(objs.VarToNodeID, workid, 0);

            #region 检查获取第二步退回的节点数据是否符合预期.
            if (dt.Rows.Count != 2)
                throw new Exception("@在第三个节点是获取退回节点集合时,不符合数据预期,应该 获取2个退回节点,现在是:" + dt.Rows.Count);

            if (dt.Rows[0][0].ToString() != "101")
                throw new Exception("@应该是101,现在是:" + dt.Rows[0][0].ToString());

            if (dt.Rows[1][0].ToString() != "102")
                throw new Exception("@应该是102,现在是:" + dt.Rows[0][0].ToString());

            #endregion 检查获取第二步退回的节点数据是否符合预期.

            //在第3个节点执行退回.
            BP.WF.Dev2Interface.Node_ReturnWork(fk_flow, workid, 0, objs.VarToNodeID, 101, "总经理-退回测试", false);

            #region 检查总经理-退回后的数据完整性.
            gwf = new GenerWorkFlow(workid);
            if (gwf.WFState != WFState.ReturnSta)
                throw new Exception("@执行退回,流程状态应该是退回,现在是:" + gwf.WFState.ToString());

            if (gwf.FK_Node != 101)
                throw new Exception("@执行退回,当前节点应该是101, 现在是" + gwf.FK_Node.ToString());
            #endregion 检查退回后的数据完整性.

            // 让发起人登录, 并执行发送.
            BP.WF.Dev2Interface.Port_Login(startUser);
            objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);

            // 让部门经理登录登录, 并执行发送.
            BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID);
            ht = new Hashtable();
            ht.Add("HeJiFeiYong", 999999);
            objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht);

            //让总经理登录.
            BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID);

            //执行退回并原路返回.
            BP.WF.Dev2Interface.Node_ReturnWork(fk_flow, workid,0, objs.VarToNodeID, 101, "总经理-退回并原路返回-测试", true);

            //让发起人登录, 此人在发起时,应该直接发送给第三个节点的退回人,就是zhoupeng才正确.
            BP.WF.Dev2Interface.Port_Login(startUser);
            objs=BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);

            #region 开始检查数据是否完整.
            if (objs.VarAcceptersID != "zhoupeng")
                throw new Exception("@退回并原路返回错误,应该发送给zhoupeng,但是目前发送到了:"+objs.VarAcceptersID);
            #endregion

        }
예제 #5
0
        /// <summary>
        /// 步骤1 让zhoupeng 登录去处理.
        /// </summary>
        public void Step2()
        {
            //让 zhouepng 登录.
            BP.WF.Dev2Interface.Port_Login("zhoupeng");

            //让他向下发送.
            objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workID);

            #region 第1步: 检查发送对象.
            //从获取的发送对象里获取到下一个工作者. zhangyifan(张一帆)、zhoushengyu(周升雨).
            if (objs.VarAcceptersID != "zhanghaicheng")
            {
                throw new Exception("@下一步的接受人不正确, 应当是: zhanghaicheng.现在是:" + objs.VarAcceptersID);
            }

            if (objs.VarToNodeID != 2399)
            {
                throw new Exception("@应该是 2399 节点. 现在是:" + objs.VarToNodeID);
            }

            if (objs.VarWorkID != workID)
            {
                throw new Exception("@主线程的workid不应该变化:" + objs.VarWorkID);
            }

            if (objs.VarCurrNodeID != 2302)
            {
                throw new Exception("@当前节点的编号不能变化,现在是:" + objs.VarCurrNodeID);
            }

            if (objs.VarTreadWorkIDs != null)
            {
                throw new Exception("@不应当获得子线程WorkID.");
            }

            #endregion 第1步: 检查发送对象.

            #region 第2步: 检查流程引擎表.
            //检查待办是否存在。
            sql = "SELECT * FROM WF_EmpWorks WHERE WorkID=" + workID + " AND FK_Emp='" + objs.VarAcceptersID + "'";
            dt  = DBAccess.RunSQLReturnTable(sql);
            if (dt.Rows.Count == 0)
            {
                throw new Exception("@不应该找不到当前人员的待办.");
            }

            gwf = new GenerWorkFlow(workID);

            if (gwf.FK_Dept != starterEmp.FK_Dept)
            {
                throw new Exception("@发起人的部门有变化,应当是" + starterEmp.FK_Dept + ",现在是:" + gwf.FK_Dept);
            }

            if (gwf.Starter != starterEmp.No)
            {
                throw new Exception("@发起人的 No 有变化,应当是" + starterEmp.No + ",现在是:" + gwf.Starter);
            }

            //判断当前点.
            if (gwf.FK_Node != 2399)
            {
                throw new Exception("@当前点应该是 2399 现在是:" + gwf.FK_Node);
            }

            //判断当前点.
            if (gwf.FID != 0)
            {
                throw new Exception("@当前点应该是 FID=0  现在是:" + gwf.FID);
            }

            //判断PWorkID,没有谁调用它,应当是 0.
            if (gwf.PWorkID != 0)
            {
                throw new Exception("@没有谁调用它, 当前点应该是 PWorkID=0  现在是:" + gwf.PWorkID);
            }

            //判断 WFState .
            if (gwf.WFState != WFState.Runing)
            {
                throw new Exception("@应当是 WFState=Runing 现在是:" + gwf.WFState.ToString());
            }

            //检查开始节点 发送人的WF_GenerWorkerList 的.
            gwl         = new GenerWorkerList();
            gwl.FK_Emp  = Web.WebUser.No;
            gwl.FK_Node = 2302;
            gwl.WorkID  = workID;
            gwl.Retrieve();

            // 没有分合流应当是 0 .
            if (gwl.FID != 0)
            {
                throw new Exception("@没有分合流应当是 0.");
            }

            if (gwl.IsEnable == false)
            {
                throw new Exception("@应该是启用的状态 ");
            }

            if (gwl.IsPass == false)
            {
                throw new Exception("@应该是通过的状态 ");
            }

            if (gwl.Sender.Contains("zhanghaicheng") == false)
            {
                throw new Exception("@应该是 包含当前状态 . ");
            }

            //检查接受人的 WF_GenerWorkerList 的.
            gwl         = new GenerWorkerList();
            gwl.FK_Emp  = objs.VarAcceptersID;
            gwl.FK_Node = 2399;
            gwl.WorkID  = workID;
            gwl.Retrieve();

            // 没有分合流应当是 0 .
            if (gwl.FID != 0)
            {
                throw new Exception("@没有分合流应当是 0.");
            }

            if (gwl.IsEnable == false)
            {
                throw new Exception("@应该是启用的状态 ");
            }

            if (gwl.IsPass == true)
            {
                throw new Exception("@应该是未通过的状态 ");
            }

            if (gwl.Sender.Contains(WebUser.No) == false)
            {
                throw new Exception("@应该是 当前人发送的,现在是: " + gwl.Sender);
            }
            #endregion 第2步: 检查流程引擎表.

            #region 第3步: 检查节点数据表.
            sql = "SELECT * FROM ND2301 WHERE OID=" + 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.CDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("CDT,日期错误.");
                    }
                    break;

                case WorkAttr.RDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("RDT,日期错误.");
                    }
                    break;

                case WorkAttr.Emps:
                    if (val.Contains("zhanghaicheng") == false)
                    {
                        throw new Exception("应当包含当前人员,现在是:" + val);
                    }
                    break;

                case WorkAttr.FID:
                    if (val != "0")
                    {
                        throw new Exception("应当 = 0,现在是:" + val);
                    }
                    break;

                case WorkAttr.MyNum:
                    if (val != "1")
                    {
                        throw new Exception("应当 = 1,现在是:" + val);
                    }
                    break;

                case WorkAttr.Rec:
                    if (val != objs.VarAcceptersID)
                    {
                        throw new Exception("应当 Rec=zhanghaicheng,现在是:" + val);
                    }
                    break;

                //case WorkAttr.Sender:
                //    if (val != "zhanghaicheng")
                //        throw new Exception("应当 Sender= zhanghaicheng,现在是:" + val);
                //    break;
                default:
                    break;
                }
            }

            //检查节点2的数据.
            sql = "SELECT * FROM ND2302 WHERE OID=" + workID;
            dt  = DBAccess.RunSQLReturnTable(sql);
            if (dt.Rows.Count != 1)
            {
                throw new Exception("@发起流程出错误,不应该找不到 ND2302 的数据.");
            }
            foreach (DataColumn dc in dt.Columns)
            {
                string val = dt.Rows[0][dc.ColumnName].ToString();
                switch (dc.ColumnName)
                {
                case WorkAttr.CDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("CDT,日期错误.");
                    }
                    break;

                case WorkAttr.RDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("RDT,日期错误.");
                    }
                    break;

                case WorkAttr.Emps:
                    if (val.Contains(WebUser.No) == false)
                    {
                        throw new Exception("应当包含当前人员,现在是:" + val);
                    }
                    break;

                case WorkAttr.FID:
                    if (val != "0")
                    {
                        throw new Exception("应当 = 0,现在是:" + val);
                    }
                    break;

                case WorkAttr.MyNum:
                    if (val != "1")
                    {
                        throw new Exception("应当 = 1,现在是:" + val);
                    }
                    break;

                case WorkAttr.Rec:
                    if (val != "zhoupeng")
                    {
                        throw new Exception("应当 Rec= zhoupeng,现在是:" + val);
                    }
                    break;

                default:
                    break;
                }
            }

            //检查节点3的数据.
            sql = "SELECT * FROM ND2399 WHERE OID=" + workID;
            dt  = DBAccess.RunSQLReturnTable(sql);
            if (dt.Rows.Count != 1)
            {
                throw new Exception("@发起流程出错误,不应该找不到 ND2399 的数据.");
            }
            foreach (DataColumn dc in dt.Columns)
            {
                string val = dt.Rows[0][dc.ColumnName].ToString();
                switch (dc.ColumnName)
                {
                case WorkAttr.CDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("CDT,日期错误.");
                    }
                    break;

                case WorkAttr.RDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("RDT,日期错误.");
                    }
                    break;

                case WorkAttr.Emps:
                    if (val.Contains("zhanghaicheng") == false)
                    {
                        throw new Exception("应当包含当前人员,现在是:" + val);
                    }
                    break;

                case WorkAttr.FID:
                    if (val != "0")
                    {
                        throw new Exception("应当 = 0,现在是:" + val);
                    }
                    break;

                case WorkAttr.MyNum:
                    if (val != "1")
                    {
                        throw new Exception("应当 = 1,现在是:" + val);
                    }
                    break;

                case WorkAttr.Rec:
                    if (val != objs.VarAcceptersID)
                    {
                        throw new Exception("应当 Rec= " + objs.VarAcceptersID + ",现在是:" + val);
                    }
                    break;

                //case WorkAttr.Sender:
                //    if (val != WebUser.No)
                //        throw new Exception("应当 Sender= " + WebUser.No + ",现在是:" + val);
                //    break;
                default:
                    break;
                }
            }

            //检查流程表的数据.
            sql = "SELECT * FROM " + fl.PTable + " WHERE OID=" + 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 GERptAttr.FID:
                    if (val != "0")
                    {
                        throw new Exception("@应当是0");
                    }
                    break;

                case GERptAttr.FK_Dept:
                    BP.Port.Emp emp = new Port.Emp("zhanghaicheng");
                    if (val != emp.FK_Dept)
                    {
                        throw new Exception("@应当是" + emp.FK_Dept + ", 现在是:" + val);
                    }
                    break;

                case GERptAttr.FK_NY:
                    if (val != DataType.CurrentYearMonth)
                    {
                        throw new Exception("@应当是" + DataType.CurrentYearMonth + ", 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowDaySpan:
                    if (val != "0")
                    {
                        throw new Exception("@应当是 0 , 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowEmps:
                    if (val.Contains(WebUser.No) == false)
                    {
                        throw new Exception("@应当是包含当前人员, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowEnder:
                    if (val != WebUser.No)
                    {
                        throw new Exception("@应当是 当前人员, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowEnderRDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("@应当是 当前日期, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowEndNode:
                    if (val != "2399")
                    {
                        throw new Exception("@应当是 2399, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowStarter:
                    if (val == WebUser.No)
                    {
                        throw new Exception("@应当是  WebUser.No, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowStartRDT:
                    if (string.IsNullOrEmpty(val))
                    {
                        throw new Exception("@应当不能为空,现在是:" + 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 现在是" + val);
                    }
                    break;

                default:
                    break;
                }
            }
            #endregion 第3步: 检查节点数据表.
        }
예제 #6
0
        /// <summary>
        /// 步骤3 让zhanghaicheng 结束流程.
        /// </summary>
        public void Step3()
        {
            //让 zhanghaicheng 登录.
            BP.WF.Dev2Interface.Port_Login("zhanghaicheng");

            //让他向下发送.
            objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workID);

            #region 第1步: 检查发送对象.
            //从获取的发送对象里获取到下一个工作者. zhangyifan(张一帆)、zhoushengyu(周升雨).
            if (objs.VarAcceptersID != null)
            {
                throw new Exception("@接受人员应当为空." + objs.VarAcceptersID);
            }

            if (objs.VarToNodeID != 0)
            {
                throw new Exception("@应当是 0  现在是:" + objs.VarToNodeID);
            }

            if (objs.VarWorkID != workID)
            {
                throw new Exception("@主线程的workid不应该变化:" + objs.VarWorkID);
            }

            if (objs.VarCurrNodeID != 2399)
            {
                throw new Exception("@当前节点的编号不能变化,现在是:" + objs.VarCurrNodeID);
            }

            if (objs.VarTreadWorkIDs != null)
            {
                throw new Exception("@不应当获得子线程WorkID.");
            }

            #endregion 第1步: 检查发送对象.

            #region 第2步: 检查流程引擎表.
            //检查待办是否存在。
            sql = "SELECT * FROM WF_EmpWorks WHERE WorkID=" + workID;
            dt  = DBAccess.RunSQLReturnTable(sql);
            if (dt.Rows.Count != 0)
            {
                throw new Exception("@不应该有待办.");
            }


            sql = "SELECT * FROM WF_GenerWorkFlow WHERE WorkID=" + workID;
            dt  = DBAccess.RunSQLReturnTable(sql);
            if (dt.Rows.Count != 0)
            {
                throw new Exception("@流程信息未删除.");
            }

            sql = "SELECT * FROM WF_GenerWorkerList  WHERE WorkID=" + workID;
            dt  = DBAccess.RunSQLReturnTable(sql);
            if (dt.Rows.Count != 0)
            {
                throw new Exception("@工作人员信息未删除..");
            }
            #endregion 第2步: 检查流程引擎表.

            #region 第3步: 检查节点数据表.
            sql = "SELECT * FROM ND2301 WHERE OID=" + 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 GERptAttr.Title:
                    if (string.IsNullOrEmpty(val))
                    {
                        throw new Exception("@流程走完后标题丢失了");
                    }
                    break;

                case WorkAttr.CDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("CDT,日期错误.");
                    }
                    break;

                case WorkAttr.RDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("RDT,日期错误.");
                    }
                    break;

                case WorkAttr.Emps:
                    if (val.Contains(WebUser.No) == false)
                    {
                        throw new Exception("应当包含当前人员,现在是:" + val);
                    }
                    break;

                case WorkAttr.FID:
                    if (val != "0")
                    {
                        throw new Exception("应当 = 0,现在是:" + val);
                    }
                    break;

                case WorkAttr.MyNum:
                    if (val != "1")
                    {
                        throw new Exception("应当 = 1,现在是:" + val);
                    }
                    break;

                case WorkAttr.Rec:
                    if (val != "zhanghaicheng")
                    {
                        throw new Exception("应当 Rec=zhanghaicheng,现在是:" + val);
                    }
                    break;

                //case WorkAttr.Sender:
                //    if (val != "zhanghaicheng")
                //        throw new Exception("应当 Sender= zhanghaicheng,现在是:" + val);
                //    break;
                default:
                    break;
                }
            }

            //检查节点2的数据.
            sql = "SELECT * FROM ND2302 WHERE OID=" + workID;
            dt  = DBAccess.RunSQLReturnTable(sql);
            if (dt.Rows.Count != 1)
            {
                throw new Exception("@发起流程出错误,不应该找不到 ND2302 的数据.");
            }
            foreach (DataColumn dc in dt.Columns)
            {
                string val = dt.Rows[0][dc.ColumnName].ToString();
                switch (dc.ColumnName)
                {
                case WorkAttr.CDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("CDT,日期错误.");
                    }
                    break;

                case WorkAttr.RDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("RDT,日期错误.");
                    }
                    break;

                case WorkAttr.Emps:
                    if (val.Contains("zhoupeng") == false)
                    {
                        throw new Exception("应当包含当前人员,现在是:" + val);
                    }
                    break;

                case WorkAttr.Rec:
                    if (val != "zhoupeng")
                    {
                        throw new Exception("应当 Rec= zhoupeng,现在是:" + val);
                    }
                    break;

                case WorkAttr.FID:
                    if (val != "0")
                    {
                        throw new Exception("应当 = 0,现在是:" + val);
                    }
                    break;

                case WorkAttr.MyNum:
                    if (val != "1")
                    {
                        throw new Exception("应当 = 1,现在是:" + val);
                    }
                    break;

                default:
                    break;
                }
            }

            //检查节点3的数据.
            sql = "SELECT * FROM ND2399 WHERE OID=" + workID;
            dt  = DBAccess.RunSQLReturnTable(sql);
            if (dt.Rows.Count != 1)
            {
                throw new Exception("@发起流程出错误,不应该找不到 ND2399 的数据.");
            }
            foreach (DataColumn dc in dt.Columns)
            {
                string val = dt.Rows[0][dc.ColumnName].ToString();
                switch (dc.ColumnName)
                {
                case WorkAttr.CDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("CDT,日期错误.");
                    }
                    break;

                case WorkAttr.RDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("RDT,日期错误.");
                    }
                    break;

                case WorkAttr.Emps:
                    if (val.Contains(WebUser.No) == false)
                    {
                        throw new Exception("应当包含当前人员,现在是:" + val);
                    }
                    break;

                case WorkAttr.FID:
                    if (val != "0")
                    {
                        throw new Exception("应当 = 0,现在是:" + val);
                    }
                    break;

                case WorkAttr.MyNum:
                    if (val != "1")
                    {
                        throw new Exception("应当 = 1,现在是:" + val);
                    }
                    break;

                case WorkAttr.Rec:
                    if (val != "zhanghaicheng")
                    {
                        throw new Exception("应当 Rec= zhanghaicheng,现在是:" + val);
                    }
                    break;

                default:
                    break;
                }
            }

            BP.Port.Emp emp = new Port.Emp("zhanghaicheng");

            //检查流程表的数据.
            sql = "SELECT * FROM " + fl.PTable + " WHERE OID=" + 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 GERptAttr.FID:
                    if (val != "0")
                    {
                        throw new Exception("@应当是0");
                    }
                    break;

                case GERptAttr.FK_Dept:
                    if (val != emp.FK_Dept)
                    {
                        throw new Exception("@发起人的部门发生了变化,应当是(" + emp.FK_Dept + "),现在是:" + val);
                    }
                    break;

                case GERptAttr.FK_NY:
                    if (val != DataType.CurrentYearMonth)
                    {
                        throw new Exception("@应当是" + DataType.CurrentYearMonth + ", 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowDaySpan:
                    if (val != "0")
                    {
                        throw new Exception("@应当是 0 , 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowEmps:
                    if (val.Contains("zhanghaicheng") == false || val.Contains("zhoupeng") == false)
                    {
                        throw new Exception("@应当包含的人员,现在不存在, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowEnder:
                    if (val != "zhanghaicheng")
                    {
                        throw new Exception("@应当是 zhanghaicheng , 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowEnderRDT:
                    if (val.Contains(DataType.CurrentData) == false)
                    {
                        throw new Exception("@应当是 当前日期, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowEndNode:
                    if (val != "2399")
                    {
                        throw new Exception("@应当是 2399, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowStarter:
                    if (val != "zhanghaicheng")
                    {
                        throw new Exception("@应当是 zhanghaicheng, 现在是:" + val);
                    }
                    break;

                case GERptAttr.FlowStartRDT:
                    if (string.IsNullOrEmpty(val))
                    {
                        throw new Exception("@应当不能为空,现在是:" + val);
                    }
                    break;

                case GERptAttr.Title:
                    if (string.IsNullOrEmpty(val))
                    {
                        throw new Exception("@不能为空title" + val);
                    }
                    break;

                case GERptAttr.WFState:
                    if (int.Parse(val) != (int)WFState.Complete)
                    {
                        throw new Exception("@应当是  WFState.Complete 现在是" + val);
                    }
                    break;

                default:
                    break;
                }
            }
            #endregion 第3步: 检查节点数据表.
        }
예제 #7
0
        /// <summary>
        /// 发送测试
        /// </summary>
        public override void Do()
        {
            //初始化变量.
            fk_flow = "023";
            userNo  = "zhanghaicheng";
            fl      = new Flow(fk_flow);

            //执行登录.
            BP.WF.Dev2Interface.Port_Login(userNo);

            //执行第1步检查,创建工作与发送.
            this.workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, userNo, null);

            //下一步骤的接受人员定义多个.
            string toEmps = "zhoushengyu,zhangyifan,";

            //向发送多个人.
            objs = BP.WF.Dev2Interface.Node_SendWork(this.fk_flow, this.workid, null, null, 0, toEmps);


            #region 检查发送变量是否正确?
            if (objs.VarAcceptersID != toEmps)
            {
                throw new Exception("@应该是接受者ID多人,现在是:" + objs.VarAcceptersID);
            }

            if (objs.VarAcceptersName != "周升雨,张一帆,")
            {
                throw new Exception("@应该是接受者Name多人,现在是:" + objs.VarAcceptersID);
            }

            if (objs.VarCurrNodeID != 2301)
            {
                throw new Exception("@当前节点应该是 2301 ,现在是:" + objs.VarCurrNodeID);
            }

            if (objs.VarToNodeID != 2302)
            {
                throw new Exception("@到达节点应该是 2302 ,现在是:" + objs.VarToNodeID);
            }
            #endregion 检查发送变量是否正确?

            #region 检查流程引擎表是否正确?
            GenerWorkFlow gwf = new GenerWorkFlow();
            gwf.WorkID = this.workid;
            if (gwf.RetrieveFromDBSources() != 1)
            {
                throw new Exception("@丢失了流程引擎注册表数据");
            }
            if (gwf.FK_Dept != WebUser.FK_Dept)
            {
                throw new Exception("@隶属部门错误应当是:" + WebUser.FK_Dept + ",现在是:" + gwf.FK_Dept);
            }

            if (gwf.FK_Flow != fk_flow)
            {
                throw new Exception("@流程编号错误应当是:" + fk_flow + ",现在是:" + gwf.FK_Flow);
            }

            if (gwf.FK_Node != 2302)
            {
                throw new Exception("@当前节点错误应当是:" + 2302 + ",现在是:" + gwf.FK_Node);
            }

            if (gwf.Starter != userNo)
            {
                throw new Exception("@当前 Starter 错误应当是:" + userNo + ",现在是:" + gwf.Starter);
            }

            if (gwf.StarterName != WebUser.Name)
            {
                throw new Exception("@当前 StarterName 错误应当是:" + WebUser.Name + ",现在是:" + gwf.StarterName);
            }

            if (string.IsNullOrEmpty(gwf.Title))
            {
                throw new Exception("@ Title 错误, 不能为空. ");
            }

            GenerWorkerLists wls = new GenerWorkerLists();
            wls.Retrieve(GenerWorkerListAttr.WorkID, this.workid);
            if (wls.Count != 3)
            {
                throw new Exception("@应当有三个数据,现在是:" + wls.Count);
            }
            foreach (GenerWorkerList wl in wls)
            {
                if (wl.FID != 0)
                {
                    throw new Exception("@ FID 错误,应该是" + 0 + ",现在是:" + wl.FID);
                }

                if (wl.FK_Emp == "zhanghaicheng")
                {
                    if (wl.FK_Dept1 != WebUser.FK_Dept)
                    {
                        throw new Exception("@部门错误,应该是" + WebUser.FK_Dept + ",现在是:" + wl.FK_Dept1);
                    }

                    if (wl.FK_Flow != fk_flow)
                    {
                        throw new Exception("@ FK_Flow 错误,应该是" + fk_flow + ",现在是:" + wl.FK_Flow);
                    }

                    if (wl.FK_Node != 2301)
                    {
                        throw new Exception("@ FK_Node 错误,应该是" + 2301 + ",现在是:" + wl.FK_Node);
                    }

                    if (wl.IsEnable == false)
                    {
                        throw new Exception("@ IsEnable 错误,应该是true,现在是:" + wl.IsEnable);
                    }

                    if (wl.IsRead == true)
                    {
                        throw new Exception("@ IsRead 错误,应该是false,现在是:" + wl.IsEnable);
                    }

                    if (wl.IsPass == false)
                    {
                        throw new Exception("@ IsPass 错误,应该是true,现在是:" + wl.IsEnable);
                    }

                    if (wl.Sender != WebUser.No + ",张海成")
                    {
                        throw new Exception("@ Sender 错误,应该是" + WebUser.No + ",张海成 ,现在是:" + wl.Sender);
                    }
                }

                if (wl.FK_Emp == "zhoushengyu" || wl.FK_Emp == "zhangyifan")
                {
                    BP.Port.Emp emp = new Port.Emp(wl.FK_Emp);

                    if (wl.FK_Dept1 != emp.FK_Dept)
                    {
                        throw new Exception("@部门错误,应该是" + emp.FK_Dept + ",现在是:" + wl.FK_Dept1);
                    }

                    if (wl.FK_Flow != fk_flow)
                    {
                        throw new Exception("@ FK_Flow 错误,应该是" + fk_flow + ",现在是:" + wl.FK_Flow);
                    }

                    if (wl.FK_Node != 2302)
                    {
                        throw new Exception("@ FK_Node 错误,应该是" + 2302 + ",现在是:" + wl.FK_Node);
                    }

                    if (wl.IsEnable == false)
                    {
                        throw new Exception("@ IsEnable 错误,应该是true,现在是:" + wl.IsEnable);
                    }

                    if (wl.IsRead == true)
                    {
                        throw new Exception("@ IsRead 错误,应该是false,现在是:" + wl.IsEnable);
                    }

                    if (wl.IsPass == true)
                    {
                        throw new Exception("@ IsPass 错误,应该是false,现在是:" + wl.IsEnable);
                    }

                    if (wl.Sender != "zhanghaicheng")
                    {
                        throw new Exception("@ Sender 错误,应该是" + WebUser.No + ",现在是:" + wl.Sender);
                    }
                }
            }

            string sql = "SELECT COUNT(*) FROM WF_EmpWorks WHERE WorkID=" + this.workid + " AND FK_Emp='zhoushengyu'";
            if (DBAccess.RunSQLReturnValInt(sql) != 1)
            {
                throw new Exception("@不应该查询不到 zhoushengyu 的待办.");
            }

            sql = "SELECT COUNT(*) FROM WF_EmpWorks WHERE WorkID=" + this.workid + " AND FK_Emp='zhangyifan'";
            if (DBAccess.RunSQLReturnValInt(sql) != 1)
            {
                throw new Exception("@不应该查询不到 zhangyifan 的待办.");
            }
            #endregion 检查流程引擎表是否正确?

            // 让其中的一个人登录.
            BP.WF.Dev2Interface.Port_Login("zhoushengyu");
            //让他发送.
            BP.WF.Dev2Interface.Node_SendWork(this.fk_flow, this.workid);


            #region 检查流程引擎表是否正确?
            sql = "SELECT COUNT(*) FROM WF_EmpWorks WHERE WorkID=" + this.workid + " AND FK_Emp='zhoushengyu'";
            if (DBAccess.RunSQLReturnValInt(sql) != 0)
            {
                throw new Exception("@不应该在查询到 zhoushengyu 的待办.");
            }

            sql = "SELECT COUNT(*) FROM WF_EmpWorks WHERE WorkID=" + this.workid + " AND FK_Emp='zhangyifan'";
            if (DBAccess.RunSQLReturnValInt(sql) != 0)
            {
                throw new Exception("@不应该在查询到 zhangyifan 的待办.");
            }
            #endregion 检查流程引擎表是否正确?


            //删除该测试数据.
            BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(this.fk_flow, workid, true);
        }
예제 #8
0
        /// <summary>
        /// 执行.
        /// </summary>
        public override void Do()
        {
            #region 发送
            string      fk_flow    = "005";
            string      startUser  = "******";
            BP.Port.Emp starterEmp = new Port.Emp(startUser);

            Flow fl = new Flow(fk_flow);

            //让 zhanghaicheng 登录, 在以后,就可以访问WebUser.No, WebUser.Name 。
            BP.WF.Dev2Interface.Port_Login(startUser);

            //创建空白工作, 发起开始节点.
            Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow);

            //执行向 分流点 发送, qifenglin接受.
            SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid);
            if (objs.VarAcceptersID != "zhangyifan,zhoushengyu,")
            {
                throw new Exception("@接受人错误,应当是zhangyifan,zhoushengyu现在是:" + objs.VarAcceptersID);
            }
            #endregion

            //获得workid.
            string[] workids = objs.VarTreadWorkIDs.Split(',');

            Int64 workID1 = Int64.Parse(workids[0]);
            Int64 workID2 = Int64.Parse(workids[1]);

            //让一个子线程登录.
            BP.WF.Dev2Interface.Port_Login("zhangyifan");

            //执行退回.
            string info = BP.WF.Dev2Interface.Node_ReturnWork("005", workID1, workid, 502, 501, startUser, false);

            #region 检查执行退回是否符合要求。
            GenerWorkFlow gwf = new GenerWorkFlow(workID1);
            if (gwf.WFState != WFState.ReturnSta)
            {
                throw new Exception("@子线程的状态应该是退回,现在是:" + gwf.WFStateText);
            }

            if (gwf.Starter != "zhanghaicheng")
            {
                throw new Exception("@子线程的流程发起人应该是,zhanghaicheng,现在是:" + gwf.Starter);
            }

            if (gwf.FK_Node != 501)
            {
                throw new Exception("@子线程的当前节点应该是 501,现在是:" + gwf.FK_Node);
            }

            //检查是否有待办。
            DataTable dt     = BP.WF.Dev2Interface.DB_GenerEmpWorksOfDataTable("zhanghaicheng", "005");
            bool      isHave = false;
            foreach (DataRow dr in dt.Rows)
            {
                if (dr[GenerWorkerListAttr.WorkID].ToString() != workID1.ToString())
                {
                    continue;
                }
                if (dr[GenerWorkerListAttr.FK_Node].ToString() != "501")
                {
                    continue;
                }

                isHave = true;
            }
            if (isHave == false)
            {
                throw new Exception("@没有找到合流节点的待办...");
            }
            #endregion 检查执行退回是否符合要求。
        }