Пример #1
0
    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();
    }
Пример #2
0
        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();
        }
Пример #3
0
        /// <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));
            }
        }
Пример #4
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();
        }
Пример #5
0
    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, "&nbsp;");
        this.AddTREnd();
        this.AddTableEnd();
    }
Пример #6
0
        /// <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();
        }
Пример #7
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();
        }
Пример #9
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();
        }
Пример #10
0
        /// <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("[{}]");
            }
        }
Пример #11
0
        /// <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("[{}]");
            }
        }
Пример #12
0
        /// <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>");
        }
Пример #13
0
        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);
        }
Пример #14
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 + ")条");
        }
Пример #15
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  检查【开始节点】发送数据信息否完整?
        }
Пример #16
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();
        }
Пример #17
0
        /// <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));
        }
Пример #18
0
        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>&nbsp;");
                //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>&nbsp;");
                this.Pub1.Add("<a href=\"javascript:FlowShift('" + item.FK_Flow + "','" + item.WorkID + "');\" class='easyui-linkbutton'>移交</a>&nbsp;");
                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();
        }
Пример #19
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  检查【开始节点】发送数据信息否完整?
        }