Beispiel #1
0
        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();
        }
Beispiel #2
0
        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' />&nbsp;" + 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' />&nbsp;" + 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();
        }
Beispiel #4
0
        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();
        }
Beispiel #5
0
        /// <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  检查【开始节点】发送数据信息否完整?
        }
Beispiel #6
0
        /// <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  检查【开始节点】发送数据信息否完整?
        }
Beispiel #7
0
        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' />&nbsp;" + 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' />&nbsp;" + 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' />&nbsp;" + 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();
        }
Beispiel #8
0
        /// <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 + ")条");
        }