예제 #1
0
        /// <summary>
        /// 创建并且发送流程
        /// </summary>
        /// <returns></returns>
        public void CreateAndSendWork(string flowNo, Hashtable htWork, DataSet workDtls,
                                      string flowStarter, string title, Int64 parentWorkID, string parentFlowNo)
        {
            Int64 work_id = Dev2Interface.Node_CreateStartNodeWork(flowNo, htWork, workDtls,
                                                                   flowStarter, title, parentWorkID, parentFlowNo);

            Dev2Interface.Node_SendWork(flowNo, work_id);
        }
예제 #2
0
        void btn_Author_Cancel_Click(object sender, EventArgs e)
        {
            bool bResult = Dev2Interface.Flow_AuthorCancel();

            if (bResult == true)
            {
                this.Alert("撤销成功。");
                this.Response.Redirect("AuthorDemo.aspx");
            }
        }
예제 #3
0
        private void FormLoad()
        {
            var dataTable = Dev2Interface.DB_GenerCanStartFlowsOfDataTable(WebUser.No);

            gcFlowControl.DataSource = dataTable;
            RepositoryItemHyperLinkEdit repHyperLink = new RepositoryItemHyperLinkEdit();

            gcFlowControl.RepositoryItems.Add(repHyperLink);
            gvFlow.Columns["Map"].ColumnEdit = repHyperLink;
            repHyperLink.LinkColor           = Color.Maroon;
            repHyperLink.NullText            = "查看";
        }
        public static void SetFlowTitle(string userNo, string flowNo, long workId, string title)
        {
            UserLogin(userNo);

            try
            {
                Dev2Interface.Flow_SetFlowTitle(flowNo, workId, title);
            }
            catch
            {
                return;
            }
        }
예제 #5
0
        /// <summary>
        /// 发送案件
        /// </summary>
        /// <returns></returns>
        private string Send()
        {
            //首先执行保存.
            this.Save();
            string resultMsg = "";

            try
            {
                if (Dev2Interface.Flow_IsCanDoCurrentWork(this.FK_Flow, this.FK_Node, this.WorkID, WebUser.No) == false)
                {
                    resultMsg = "error|您好:" + BP.Web.WebUser.No + ", " + WebUser.Name + "当前的工作已经被处理,或者您没有执行此工作的权限。";
                }
                else
                {
                    SendReturnObjs returnObjs = Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID);
                    //  resultMsg = returnObjs.ToMsgOfHtml();
                    resultMsg = returnObjs.ToMsgOfHtml();

                    //执行抄送.

                    BP.WF.Dev2Interface.Node_CC_WriteTo_Todolist(returnObjs.VarToNodeID, returnObjs.VarToNodeID,
                                                                 this.WorkID, "zhoupeng", "周朋");

                    BP.WF.Dev2Interface.Flow_SetFlowTitle(this.FK_Flow, this.WorkID, "sdsdsdfsdfsdfsdf");

                    //BP.WF.Dev2Interface.DB_GenerCanStartFlowsOfDataTable();

                    #region 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常.

                    /*这里有两种情况
                     * 1,从中间的节点,通过批量处理,也就是说合并审批处理的情况,这种情况子流程需要执行到下一步。
                     * 2,从流程已经完成,或者正在运行中,也就是说合并审批处理的情况. */
                    try
                    {
                        //处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常.
                        BP.WF.Glo.DealBuinessAfterSendWork(this.FK_Flow, this.WorkID, this.DoFunc, WorkIDs);
                    }
                    catch (Exception ex)
                    {
                        resultMsg = "sysError|" + ex.Message.Replace("@", "<br/>");
                        return(resultMsg);
                    }
                    #endregion 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常.
                }
            }
            catch (Exception ex)
            {
                resultMsg = "sysError|" + ex.Message.Replace("@", "<br/>");
            }
            return(resultMsg);
        }
예제 #6
0
        private Int64 GetThreadID(Int64 workID)
        {
            //获取它的待办, 从而获取子线程id.
            var dt = Dev2Interface.DB_GenerEmpWorksOfDataTable(WebUser.No, WFState.Runing, fk_flow);

            foreach (DataRow dr in dt.Rows)
            {
                Int64 fid = Int64.Parse(dr["FID"].ToString());
                if (fid != workID)
                {
                    continue;
                }

                return(Int64.Parse(dr["WorkID"].ToString()));
            }
            throw new Exception("@没有找到.");
        }
예제 #7
0
        /// <summary>
        /// 发送案件
        /// </summary>
        /// <returns></returns>
        private string Send()
        {
            //首先执行保存.
            this.Save();
            string resultMsg = "";

            try
            {
                if (Dev2Interface.Flow_IsCanDoCurrentWork(this.FK_Flow, this.FK_Node, this.WorkID, WebUser.No) == false)
                {
                    resultMsg = "error|您好:" + BP.Web.WebUser.No + ", " + WebUser.Name + "当前的工作已经被处理,或者您没有执行此工作的权限。";
                }
                else
                {
                    SendReturnObjs returnObjs = Dev2Interface.Node_SendWork(this.FK_Flow,
                                                                            this.WorkID, 112301, "zhangsan,lisi,wangwu");

                    //  returnObjs.v
                    //  resultMsg = returnObjs.ToMsgOfHtml();
                    resultMsg = returnObjs.ToMsgOfHtml();

                    #region 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常.

                    /*这里有两种情况
                     * 1,从中间的节点,通过批量处理,也就是说合并审批处理的情况,这种情况子流程需要执行到下一步。
                     * 2,从流程已经完成,或者正在运行中,也就是说合并审批处理的情况. */
                    try
                    {
                        //处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常.
                        BP.WF.Glo.DealBuinessAfterSendWork(this.FK_Flow, this.WorkID, this.DoFunc, WorkIDs);
                    }
                    catch (Exception ex)
                    {
                        resultMsg = "sysError|" + ex.Message.Replace("@", "<br/>");
                        return(resultMsg);
                    }
                    #endregion 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常.
                }
            }
            catch (Exception ex)
            {
                resultMsg = "sysError|" + ex.Message.Replace("@", "<br/>");
            }
            return(resultMsg);
        }
예제 #8
0
        void btn_Author_Set_Click(object sender, EventArgs e)
        {
            TB  tb_Author     = this.Pub1.GetTBByID("TB_Author_No");
            DDL ddl_AuthorWay = this.Pub1.GetDDLByID("ddl_AuthorWay");
            TB  tb_FlowNos    = this.Pub1.GetTBByID("TB_Author_FlowNos");

            if (tb_Author == null || ddl_AuthorWay == null || tb_FlowNos == null)
            {
                return;
            }
            bool bResult = Dev2Interface.Flow_AuthorSave(tb_Author.Text, int.Parse(ddl_AuthorWay.SelectedItem.Value), tb_FlowNos.Text);

            if (bResult == true)
            {
                this.Alert("设置成功。");
                this.Response.Redirect("AuthorDemo.aspx");
            }
        }
예제 #9
0
        /// <summary>
        /// 执行发送到指定节点
        /// </summary>
        /// <returns></returns>
        private string SendCaseToNode()
        {
            int    ToNode    = Convert.ToInt32(getUTF8ToString("ToNode"));
            string resultMsg = "";

            try
            {
                if (Dev2Interface.Flow_IsCanDoCurrentWork(this.FK_Flow, this.FK_Node, this.WorkID, WebUser.No) == false)
                {
                    return(resultMsg = "error|您好:" + BP.Web.WebUser.No + ", " + WebUser.Name + "当前的工作已经被处理,或者您没有执行此工作的权限。");
                }
                SendReturnObjs returnObjs = Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID, ToNode, null);
                resultMsg = returnObjs.ToMsgOfHtml();
                if (resultMsg.IndexOf("@<a") > 0)
                {
                    string kj = resultMsg.Substring(0, resultMsg.IndexOf("@<a"));
                    resultMsg = resultMsg.Substring(resultMsg.IndexOf("@<a")) + "<br/><br/>" + kj;
                }
                //撤销单据
                int docindex = resultMsg.IndexOf("@<img src='../../Img/FileType/doc.gif' />");
                if (docindex != -1)
                {
                    String kj           = resultMsg.Substring(0, docindex);
                    String kp           = "";
                    int    nextdocindex = resultMsg.IndexOf("@", docindex + 1);
                    if (nextdocindex != -1)
                    {
                        kp = resultMsg.Substring(nextdocindex);
                    }
                    resultMsg = kj + kp;
                }
                //撤销 撤销本次发送
                int UnSendindex = resultMsg.IndexOf("@<a href='MyFlowInfo.aspx?DoType=UnSend");
                if (UnSendindex != -1)
                {
                    String kj = resultMsg.Substring(0, UnSendindex);
                    String kp = "";
                    int    nextUnSendindex = resultMsg.IndexOf("@", UnSendindex + 1);
                    if (nextUnSendindex != -1)
                    {
                        kp = resultMsg.Substring(nextUnSendindex);
                    }
                    resultMsg = kj + "<a href='javascript:UnSend();'><img src='../../Img/Action/UnSend.png' border=0/>撤销本次发送</a>" + kp;
                }

                resultMsg = resultMsg.Replace("指定特定的处理人处理", "指定人员");
                resultMsg = resultMsg.Replace("发手机短信提醒他(们)", "短信通知");
                resultMsg = resultMsg.Replace("撤销本次发送", "撤销案件");
                resultMsg = resultMsg.Replace("新建流程", "发起案件");
                resultMsg = resultMsg.Replace("。", "");
                resultMsg = resultMsg.Replace(",", "");

                resultMsg = resultMsg.Replace("@下一步", "<br/><br/>&nbsp;&nbsp;&nbsp;下一步");
                resultMsg = "success|<br/>" + resultMsg.Replace("@", "&nbsp;&nbsp;&nbsp;");

                #region 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常.

                /*这里有两种情况
                 * 1,从中间的节点,通过批量处理,也就是说合并审批处理的情况,这种情况子流程需要执行到下一步。
                 * 2,从流程已经完成,或者正在运行中,也就是说合并审批处理的情况. */
                try
                {
                    //处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常.
                    BP.WF.Glo.DealBuinessAfterSendWork(this.FK_Flow, this.WorkID, this.DoFunc, WorkIDs, this.CFlowNo, 0, null);
                }
                catch (Exception ex)
                {
                    resultMsg = "sysError|" + ex.Message.Replace("@", "<br/>");
                    return(resultMsg);
                }
                #endregion 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常.
            }
            catch (Exception ex)
            {
                resultMsg = "sysError|" + ex.Message.Replace("@", "<br/>");
            }
            return(resultMsg);
        }
예제 #10
0
        /// <summary>
        /// 执行撤消
        /// </summary>
        private string DoUnSendIt()
        {
            GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID);

            if (gwf.WFState == WFState.Complete)
            {
                return("err@该流程已经完成,您不能撤销。");
            }


            // 如果停留的节点是分合流。
            Node nd = new Node(gwf.FK_Node);

            /*该节点不允许退回.*/
            if (nd.HisCancelRole == CancelRole.None)
            {
                throw new Exception("当前节点,不允许撤销。");
            }


            if (nd.IsStartNode && nd.HisNodeWorkType != NodeWorkType.StartWorkFL)
            {
                throw new Exception("当前节点是开始节点,所以您不能撤销。");
            }

            //如果撤销到的节点和当前流程运行到的节点相同,则是分流、或者分河流
            if (this.UnSendToNode == nd.NodeID)
            {
                //如果当前节点是分流、分合流节点则可以撤销
                if (nd.HisNodeWorkType == NodeWorkType.StartWorkFL ||
                    nd.HisNodeWorkType == NodeWorkType.WorkFL ||
                    nd.HisNodeWorkType == NodeWorkType.WorkFHL)
                {
                    //获取当前节点的子线程
                    string truckTable = "ND" + int.Parse(nd.FK_Flow) + "Track";
                    string threadSQL  = "SELECT FK_Node,WorkID FROM WF_GenerWorkFlow  WHERE FID=" + this.WorkID + " AND FK_Node"
                                        + " IN(SELECT DISTINCT(NDTo) FROM " + truckTable + "  WHERE ActionType=" + (int)ActionType.ForwardFL + " AND WorkID=" + this.WorkID + " AND NDFrom='" + nd.NodeID + "'"
                                        + "  ) ";
                    DataTable dt = DBAccess.RunSQLReturnTable(threadSQL);
                    if (dt == null || dt.Rows.Count == 0)
                    {
                        throw new Exception("err@流程运行错误:当不存在子线程时,改过程应该处于待办状态");
                    }


                    foreach (DataRow dr in dt.Rows)
                    {
                        Node threadnd = new Node(dr["FK_Node"].ToString());
                        // 调用撤消发送前事件。
                        nd.HisFlow.DoFlowEventEntity(EventListOfNode.UndoneBefore, nd, nd.HisWork, null);

                        BP.WF.Dev2Interface.Node_FHL_KillSubFlow(threadnd.FK_Flow, this.WorkID, long.Parse(dr["WorkID"].ToString())); //杀掉子线程.

                        // 调用撤消发送前事件。
                        nd.HisFlow.DoFlowEventEntity(EventListOfNode.UndoneAfter, nd, nd.HisWork, null);
                    }

                    return("撤销成功");
                }
            }



            //如果启用了对方已读,就不能撤销.
            if (nd.CancelDisWhenRead == true)
            {
                //撤销到的节点是干流程节点/子线程撤销到子线程
                int i = DBAccess.RunSQLReturnValInt("SELECT SUM(IsRead) AS Num FROM WF_GenerWorkerList WHERE WorkID=" + this.WorkID + " AND FK_Node=" + gwf.FK_Node, 0);
                if (i >= 1)
                {
                    return("err@当前待办已经有[" + i + "]个工作人员打开了该工作,您不能执行撤销.");
                }
                else
                {
                    //干流节点撤销到子线程
                    i = DBAccess.RunSQLReturnValInt("SELECT SUM(IsRead) AS Num FROM WF_GenerWorkerList WHERE WorkID=" + this.FID + " AND FK_Node=" + gwf.FK_Node, 0);
                    if (i >= 1)
                    {
                        return("err@当前待办已经有[" + i + "]个工作人员打开了该工作,您不能执行撤销.");
                    }
                }
            }


            #region 如果是越轨流程状态 @fanleiwei.
            string sql = "SELECT COUNT(*) AS Num FROM WF_GenerWorkerlist WHERE WorkID=" + this.WorkID + " AND IsPass=80";
            if (DBAccess.RunSQLReturnValInt(sql, 0) != 0)
            {
                //求出来越轨子流程workid并把它删除掉.
                GenerWorkFlow gwfSubFlow = new GenerWorkFlow();
                int           i          = gwfSubFlow.Retrieve(GenerWorkFlowAttr.PWorkID, this.WorkID);
                if (i == 1)
                {
                    BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(gwfSubFlow.FK_Flow, gwfSubFlow.WorkID, true);
                }

                //执行回复当前节点待办..
                sql = "UPDATE WF_GenerWorkerlist SET IsPass=0 WHERE IsPass=80 AND FK_Node=" + gwf.FK_Node + " AND WorkID=" + this.WorkID;
                DBAccess.RunSQL(sql);

                return("撤销延续流程执行成功,撤销到[" + gwf.NodeName + "],撤销给[" + gwf.TodoEmps + "]");
            }
            #endregion 如果是越轨流程状态 .

            if (BP.WF.Dev2Interface.Flow_IsCanDoCurrentWork(this.WorkID, WebUser.No) == true)
            {
                return("info@您有处理当前工作的权限,可能您已经执行了撤销,请使用退回或者发送功能.");
            }


            #region 判断是否是会签状态,是否是会签人做的撤销. 主持人是不能撤销的.
            if (gwf.HuiQianTaskSta != HuiQianTaskSta.None)
            {
                string IsEnableUnSendWhenHuiQian = SystemConfig.AppSettings["IsEnableUnSendWhenHuiQian"];
                if (DataType.IsNullOrEmpty(IsEnableUnSendWhenHuiQian) == false && IsEnableUnSendWhenHuiQian.Equals("0"))
                {
                    return("info@当前节点是会签状态,您不能执行撤销.");
                }

                GenerWorkerList gwl        = new GenerWorkerList();
                int             numOfmyGwl = gwl.Retrieve(GenerWorkerListAttr.FK_Emp, WebUser.No,
                                                          GenerWorkerListAttr.WorkID, this.WorkID,
                                                          GenerWorkerListAttr.FK_Node, gwf.FK_Node);

                //如果没有找到当前会签人.
                if (numOfmyGwl == 0)
                {
                    return("err@当前节点[" + gwf.NodeName + "]是会签状态,[" + gwf.TodoEmps + "]在执行会签,您不能执行撤销.");
                }

                if (gwl.IsHuiQian == true)
                {
                }

                //如果是会签人,就让其显示待办.
                gwl.IsPassInt = 0;
                gwl.IsEnable  = true;
                gwl.Update();

                // 在待办人员列表里加入他. 要判断当前人员是否是主持人,如果是主持人的话,主持人是否在发送的时候,
                // 就选择方向与接受人.
                if (gwf.HuiQianZhuChiRen == WebUser.No)
                {
                    gwf.TodoEmps = WebUser.No + "," + BP.Web.WebUser.Name + ";" + gwf.TodoEmps;
                }
                else
                {
                    gwf.TodoEmps = gwf.TodoEmps + BP.Web.WebUser.Name + ";";
                }

                gwf.Update();

                return("会签人撤销成功.");
            }
            #endregion 判断是否是会签状态,是否是会签人做的撤销.

            if (gwf.FID != 0)
            {
                //执行子线程的撤销.
                return(DoThreadUnSend());
            }

            //定义当前的节点.
            WorkNode wn = this.GetCurrentWorkNode();

            #region 求的撤销的节点.
            int cancelToNodeID = 0;
            if (nd.HisCancelRole == CancelRole.SpecNodes)
            {
                /*指定的节点可以撤销,首先判断当前人员是否有权限.*/
                NodeCancels ncs = new NodeCancels();
                ncs.Retrieve(NodeCancelAttr.FK_Node, wn.HisNode.NodeID);
                if (ncs.Count == 0)
                {
                    throw new Exception("@流程设计错误, 您设置了当前节点(" + wn.HisNode.Name + ")可以让指定的节点人员撤销,但是您没有设置指定的节点.");
                }

                /* 查询出来. */
                sql = "SELECT FK_Node FROM WF_GenerWorkerList WHERE FK_Emp='" + WebUser.No + "' AND IsPass=1 AND IsEnable=1 AND WorkID=" + wn.HisWork.OID + " ORDER BY RDT DESC ";
                DataTable dt = DBAccess.RunSQLReturnTable(sql);
                if (dt.Rows.Count == 0)
                {
                    throw new Exception("err@撤销流程错误,您没有权限执行撤销发送.");
                }

                // 找到将要撤销到的NodeID.
                foreach (DataRow dr in dt.Rows)
                {
                    foreach (NodeCancel nc in ncs)
                    {
                        if (nc.CancelTo == int.Parse(dr[0].ToString()))
                        {
                            cancelToNodeID = nc.CancelTo;
                            break;
                        }
                    }

                    if (cancelToNodeID != 0)
                    {
                        break;
                    }
                }

                if (cancelToNodeID == 0)
                {
                    throw new Exception("@撤销流程错误,您没有权限执行撤销发送,当前节点不可以执行撤销.");
                }
            }

            if (nd.HisCancelRole == CancelRole.OnlyNextStep)
            {
                /*如果仅仅允许撤销上一步骤.*/
                WorkNode wnPri = wn.GetPreviousWorkNode();

                GenerWorkerList wl  = new GenerWorkerList();
                int             num = wl.Retrieve(GenerWorkerListAttr.FK_Emp, BP.Web.WebUser.No,
                                                  GenerWorkerListAttr.FK_Node, wnPri.HisNode.NodeID, GenerWorkerListAttr.WorkID, this.WorkID);
                if (num == 0)
                {
                    throw new Exception("err@您不能执行撤消发送,因为当前工作不是您发送的或下一步工作已处理。");
                }
                cancelToNodeID = wnPri.HisNode.NodeID;
            }

            if (cancelToNodeID == 0)
            {
                throw new Exception("err@没有求出要撤销到的节点.");
            }
            #endregion 求的撤销的节点.

            if (this.UnSendToNode != 0 && gwf.FK_Node != this.UnSendToNode)
            {
                Node toNode = new Node(this.UnSendToNode);

                /* 要撤销的节点是分流节点,并且当前节点不在分流节点而是在合流节点的情况, for:华夏银行.
                 * 1, 分流节点发送给n个人.
                 * 2, 其中一个人发送到合流节点,另外一个人退回给分流节点。
                 * 3,现在分流节点的人接收到一个待办,并且需要撤销整个分流节点的发送.
                 * 4, UnSendToNode 这个时间没有值,并且当前干流节点的停留的节点与要撤销到的节点不一致。
                 */
                if (toNode.HisNodeWorkType == NodeWorkType.WorkFL && nd.HisNodeWorkType == NodeWorkType.WorkHL)
                {
                    return(DoUnSendInFeiLiuHeiliu(gwf));
                }
            }

            #region 判断当前节点的模式.
            switch (nd.HisNodeWorkType)
            {
            case NodeWorkType.WorkFHL:
                return(this.DoUnSendFeiLiu(gwf));

            case NodeWorkType.WorkFL:
            case NodeWorkType.StartWorkFL:
                break;

            case NodeWorkType.WorkHL:
                if (this.IsMainFlow)
                {
                    /* 首先找到与他最近的一个分流点,并且判断当前的操作员是不是分流点上的工作人员。*/
                    return(this.DoUnSendHeiLiu_Main(gwf));
                }
                else
                {
                    return(this.DoUnSendSubFlow(gwf));    //是子流程时.
                }
                break;

            case NodeWorkType.SubThreadWork:
                break;

            default:
                break;
            }
            #endregion 判断当前节点的模式.

            /********** 开始执行撤销. **********************/
            Node cancelToNode = new Node(cancelToNodeID);

            #region 如果撤销到的节点是普通的节点,并且当前的节点是分流(分流)节点,并且分流(分流)节点已经发送下去了,就不允许撤销了.
            if (cancelToNode.HisRunModel == RunModel.Ordinary &&
                nd.HisRunModel == RunModel.HL &&
                nd.HisRunModel == RunModel.FHL &&
                nd.HisRunModel == RunModel.FL)
            {
                /* 检查一下是否还有没有完成的子线程,如果有就抛出不允许撤销的异常。 */
                sql = "SELECT COUNT(*) as NUM FROM WF_GenerWorkerList WHERE FID=" + this.WorkID + " AND IsPass=0";
                if (BP.DA.DBAccess.RunSQLReturnValInt(sql) != 0)
                {
                    return("err@不允许撤销,因为有未完成的子线程.");
                }

                //  return this.DoUnSendHeiLiu_Main(gwf);
            }
            #endregion 如果撤销到的节点是普通的节点,并且当前的节点是分流节点,并且分流节点已经发送下去了.


            #region 如果当前是协作组长模式,就要考虑当前是否是会签节点,如果是会签节点,就要处理。
            if (cancelToNode.TodolistModel == TodolistModel.TeamupGroupLeader ||
                cancelToNode.TodolistModel == TodolistModel.Teamup)
            {
                sql = "SELECT ActionType FROM ND" + int.Parse(this.FlowNo) + "Track WHERE NDFrom=" + cancelToNodeID + " AND EmpFrom='" + WebUser.No + "' AND WorkID=" + this.WorkID;
                DataTable dt = DBAccess.RunSQLReturnTable(sql);
                foreach (DataRow dr in dt.Rows)
                {
                    int        ac = int.Parse(dr[0].ToString());
                    ActionType at = (ActionType)ac;
                    if (at == ActionType.TeampUp)
                    {
                        /*如果是写作人员,就不允许他撤销 */
                        throw new Exception("@您是节点[" + cancelToNode.Name + "]的会签人,您不能执行撤销。");
                    }
                }
            }
            #endregion 如果当前是协作组长模式

            WorkNode wnOfCancelTo = new WorkNode(this.WorkID, cancelToNodeID);

            // 调用撤消发送前事件。
            string msg = nd.HisFlow.DoFlowEventEntity(EventListOfNode.UndoneBefore, nd, wn.HisWork, null);

            #region  除当前节点数据。
            // 删除产生的工作列表。
            GenerWorkerLists wls = new GenerWorkerLists();
            wls.Delete(GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, gwf.FK_Node);

            // 删除工作信息,如果是按照ccflow格式存储的。
            if (this.HisFlow.HisDataStoreModel == BP.WF.Template.DataStoreModel.ByCCFlow)
            {
                wn.HisWork.Delete();
            }

            // 删除附件信息。
            DBAccess.RunSQL("DELETE FROM Sys_FrmAttachmentDB WHERE FK_MapData='ND" + gwf.FK_Node + "' AND RefPKVal='" + this.WorkID + "'");
            #endregion  除当前节点数据。

            // 更新.
            gwf.FK_Node  = cancelToNode.NodeID;
            gwf.NodeName = cancelToNode.Name;
            //恢复上一步发送人
            DataTable dtPrevTrack = Dev2Interface.Flow_GetPreviousNodeTrack(this.WorkID, cancelToNode.NodeID);
            if (dtPrevTrack != null && dtPrevTrack.Rows.Count > 0)
            {
                gwf.Sender = dtPrevTrack.Rows[0]["EmpFrom"].ToString();
            }

            if (cancelToNode.IsEnableTaskPool && Glo.IsEnableTaskPool)
            {
                gwf.TaskSta = TaskSta.Takeback;
            }
            else
            {
                gwf.TaskSta = TaskSta.None;
            }

            gwf.TodoEmps = WebUser.No + "," + WebUser.Name + ";";
            gwf.Update();

            if (cancelToNode.IsEnableTaskPool && Glo.IsEnableTaskPool)
            {
                //设置全部的人员不可用。
                BP.DA.DBAccess.RunSQL("UPDATE WF_GenerWorkerlist SET IsPass=0,  IsEnable=-1 WHERE WorkID=" + this.WorkID + " AND FK_Node=" + gwf.FK_Node);

                //设置当前人员可用。
                BP.DA.DBAccess.RunSQL("UPDATE WF_GenerWorkerlist SET IsPass=0,  IsEnable=1  WHERE WorkID=" + this.WorkID + " AND FK_Node=" + gwf.FK_Node + " AND FK_Emp='" + WebUser.No + "'");
            }
            else
            {
                BP.DA.DBAccess.RunSQL("UPDATE WF_GenerWorkerlist SET IsPass=0 WHERE WorkID=" + this.WorkID + " AND FK_Node=" + gwf.FK_Node + " AND FK_Emp='" + WebUser.No + "'");
            }

            //更新当前节点,到rpt里面。
            BP.DA.DBAccess.RunSQL("UPDATE " + this.HisFlow.PTable + " SET FlowEndNode=" + gwf.FK_Node + " WHERE OID=" + this.WorkID);

            // 记录日志..
            wn.AddToTrack(ActionType.UnSend, WebUser.No, WebUser.Name, cancelToNode.NodeID, cancelToNode.Name, "无");

            //删除审核组件设置“协作模式下操作员显示顺序”为“按照接受人员列表先后顺序(官职大小)”,而生成的待审核轨迹信息
            FrmWorkCheck fwc = new FrmWorkCheck(nd.NodeID);
            if (fwc.FWCSta == FrmWorkCheckSta.Enable && fwc.FWCOrderModel == FWCOrderModel.SqlAccepter)
            {
                BP.DA.DBAccess.RunSQL("DELETE FROM ND" + int.Parse(nd.FK_Flow) + "Track WHERE WorkID = " + this.WorkID +
                                      " AND ActionType = " + (int)ActionType.WorkCheck + " AND NDFrom = " + nd.NodeID +
                                      " AND NDTo = " + nd.NodeID + " AND (Msg = '' OR Msg IS NULL)");
            }

            // 删除数据.
            if (wn.HisNode.IsStartNode)
            {
                DBAccess.RunSQL("DELETE FROM WF_GenerWorkFlow WHERE WorkID=" + this.WorkID);
                DBAccess.RunSQL("DELETE FROM WF_GenerWorkerlist WHERE WorkID=" + this.WorkID + " AND FK_Node=" + nd.NodeID);
            }
            else
            {
                DBAccess.RunSQL("DELETE FROM WF_GenerWorkerlist WHERE WorkID=" + this.WorkID + " AND FK_Node=" + nd.NodeID);
            }

            //首先删除当前节点的,审核意见.
            string delTrackSQl = "DELETE FROM ND" + int.Parse(nd.FK_Flow) + "Track WHERE WorkID=" + this.WorkID + " AND NDFrom=" + nd.NodeID + " AND ActionType =22 ";
            DBAccess.RunSQL(delTrackSQl);

            if (wn.HisNode.IsEval)
            {
                /*如果是质量考核节点,并且撤销了。*/
                DBAccess.RunSQL("DELETE FROM WF_CHEval WHERE FK_Node=" + wn.HisNode.NodeID + " AND WorkID=" + this.WorkID);
            }

            #region 恢复工作轨迹,解决工作抢办。
            if (cancelToNode.IsStartNode == false && cancelToNode.IsEnableTaskPool == false)
            {
                WorkNode        ppPri = wnOfCancelTo.GetPreviousWorkNode();
                GenerWorkerList wl    = new GenerWorkerList();
                wl.Retrieve(GenerWorkerListAttr.FK_Node, wnOfCancelTo.HisNode.NodeID, GenerWorkerListAttr.WorkID, this.WorkID);
                // BP.DA.DBAccess.RunSQL("UPDATE WF_GenerWorkerList SET IsPass=0 WHERE FK_Node=" + backtoNodeID + " AND WorkID=" + this.WorkID);
                RememberMe rm = new RememberMe();
                rm.Retrieve(RememberMeAttr.FK_Node, wnOfCancelTo.HisNode.NodeID, RememberMeAttr.FK_Emp, ppPri.HisWork.Rec);

                string[] empStrs = rm.Objs.Split('@');
                foreach (string s in empStrs)
                {
                    if (s == "" || s == null)
                    {
                        continue;
                    }

                    if (s == wl.FK_Emp)
                    {
                        continue;
                    }
                    GenerWorkerList wlN = new GenerWorkerList();
                    wlN.Copy(wl);
                    wlN.FK_Emp = s;

                    WF.Port.WFEmp myEmp = new Port.WFEmp(s);
                    wlN.FK_EmpText = myEmp.Name;

                    wlN.Insert();
                }
            }
            #endregion 恢复工作轨迹,解决工作抢办。

            #region 如果是开始节点, 检查此流程是否有子流程,如果有则删除它们。
            if (nd.IsStartNode)
            {
                /*要检查一个是否有 子流程,如果有,则删除它们。*/
                GenerWorkFlows gwfs = new GenerWorkFlows();
                gwfs.Retrieve(GenerWorkFlowAttr.PWorkID, this.WorkID);
                if (gwfs.Count > 0)
                {
                    foreach (GenerWorkFlow item in gwfs)
                    {
                        /*删除每个子线程.*/
                        BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(item.FK_Flow, item.WorkID, true);
                    }
                }
            }
            #endregion

            //调用撤消发送后事件。
            msg += nd.HisFlow.DoFlowEventEntity(EventListOfNode.UndoneAfter, nd, wn.HisWork, null);

            if (wnOfCancelTo.HisNode.IsStartNode)
            {
                switch (wnOfCancelTo.HisNode.HisFormType)
                {
                case NodeFormType.FoolForm:
                case NodeFormType.FreeForm:
                    return("@撤消执行成功." + msg);

                    break;

                default:
                    return("@撤销成功." + msg);

                    break;
                }
            }
            else
            {
                // 更新是否显示。
                //  DBAccess.RunSQL("UPDATE WF_ForwardWork SET IsRead=1 WHERE WORKID=" + this.WorkID + " AND FK_Node=" + cancelToNode.NodeID);
                switch (wnOfCancelTo.HisNode.HisFormType)
                {
                case NodeFormType.FoolForm:
                case NodeFormType.FreeForm:
                    return("@撤消执行成功. " + msg);

                    break;

                default:
                    return("撤销成功:" + msg);

                    break;
                }
            }
            return("工作已经被您撤销到:" + cancelToNode.Name);
        }
예제 #11
0
        /// <summary>
        /// 执行
        /// </summary>
        /// <returns>返回执行结果</returns>
        public override object Do()
        {
            //string sql = "SELECT * FROM WF_EmpWorks WHERE FK_Node IN (SELECT NodeID FROM WF_Node WHERE OutTimeDeal >0 ) AND SDT <='" + DataType.CurrentData + "' ORDER BY FK_Emp";
            //改成小于号SDT <'" + DataType.CurrentData
            string sql = "SELECT * FROM WF_EmpWorks WHERE FK_Node IN (SELECT NodeID FROM WF_Node WHERE OutTimeDeal >0 ) AND SDT <'" + DataType.CurrentData + "' ORDER BY FK_Emp";
            //string sql = "SELECT * FROM WF_EmpWorks WHERE FK_Node IN (SELECT NodeID FROM WF_Node WHERE OutTimeDeal >0 ) AND SDT <='2013-12-30' ORDER BY FK_Emp";
            DataTable dt          = DBAccess.RunSQLReturnTable(sql);
            string    msg         = "";
            string    dealWorkIDs = "";

            foreach (DataRow dr in dt.Rows)
            {
                string FK_Emp  = dr["FK_Emp"].ToString();
                string fk_flow = dr["FK_Flow"].ToString();
                int    fk_node = int.Parse(dr["FK_Node"].ToString());
                Int64  workid  = Int64.Parse(dr["WorkID"].ToString());
                Int64  fid     = Int64.Parse(dr["FID"].ToString());

                // 方式两个人同时处理一件工作, 一个人处理后,另外一个人还可以处理的情况.
                if (dealWorkIDs.Contains("," + workid + ","))
                {
                    continue;
                }
                dealWorkIDs += "," + workid + ",";

                if (WebUser.No != FK_Emp)
                {
                    Emp emp = new Emp(FK_Emp);
                    BP.Web.WebUser.SignInOfGener(emp);
                }

                BP.WF.Template.NodeExt nd = new BP.WF.Template.NodeExt();
                nd.NodeID = fk_node;
                nd.Retrieve();

                // 首先判断是否有启动的表达式, 它是是否自动执行的总阀门。
                if (DataType.IsNullOrEmpty(nd.DoOutTimeCond) == false)
                {
                    Node nodeN = new Node(nd.NodeID);
                    Work wk    = nodeN.HisWork;
                    wk.OID = workid;
                    wk.Retrieve();
                    string exp = nd.DoOutTimeCond.Clone() as string;
                    if (Glo.ExeExp(exp, wk) == false)
                    {
                        continue; // 不能通过条件的设置.
                    }
                }

                switch (nd.HisOutTimeDeal)
                {
                case OutTimeDeal.None:
                    break;

                case OutTimeDeal.AutoTurntoNextStep:     //自动转到下一步骤.
                    if (DataType.IsNullOrEmpty(nd.DoOutTime))
                    {
                        /*如果是空的,没有特定的点允许,就让其它向下执行。*/
                        msg += BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid).ToMsgOfText();
                    }
                    else
                    {
                        int nextNode = Dev2Interface.Node_GetNextStepNode(fk_flow, workid);
                        if (nd.DoOutTime.Contains(nextNode.ToString()))     /*如果包含了当前点的ID,就让它执行下去.*/
                        {
                            msg += BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid).ToMsgOfText();
                        }
                    }
                    break;

                case OutTimeDeal.AutoJumpToSpecNode:     //自动的跳转下一个节点.
                    if (DataType.IsNullOrEmpty(nd.DoOutTime))
                    {
                        throw new Exception("@设置错误,没有设置要跳转的下一步节点.");
                    }
                    int nextNodeID = int.Parse(nd.DoOutTime);
                    msg += BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, null, null, nextNodeID, null).ToMsgOfText();
                    break;

                case OutTimeDeal.AutoShiftToSpecUser:     //移交给指定的人员.
                    msg += BP.WF.Dev2Interface.Node_Shift(workid, nd.DoOutTime, "来自ccflow的自动消息:(" + BP.Web.WebUser.Name + ")工作未按时处理(" + nd.Name + "),现在移交给您。");
                    break;

                case OutTimeDeal.SendMsgToSpecUser:     //向指定的人员发消息.
                    BP.WF.Dev2Interface.Port_SendMsg(nd.DoOutTime,
                                                     "来自ccflow的自动消息:(" + BP.Web.WebUser.Name + ")工作未按时处理(" + nd.Name + ")",
                                                     "感谢您选择ccflow.", "SpecEmp" + workid);
                    break;

                case OutTimeDeal.DeleteFlow:     //删除流程.
                    msg += BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fk_flow, workid, true);
                    break;

                case OutTimeDeal.RunSQL:
                    msg += BP.DA.DBAccess.RunSQL(nd.DoOutTime);
                    break;

                default:
                    throw new Exception("@错误没有判断的超时处理方式." + nd.HisOutTimeDeal);
                }
            }
            Emp emp1 = new Emp("admin");

            BP.Web.WebUser.SignInOfGener(emp1);
            return(msg);
        }
예제 #12
0
        /// <summary>
        /// 获取被委托待办数据
        /// </summary>
        private void Author_BindData()
        {
            if (string.IsNullOrEmpty(WebUser.No))
            {
                return;
            }

            this.Pub1.AddFieldSet("委托待办数据");
            //当前登录人的委托人
            DataTable dt_Author = Dev2Interface.DB_AuthorEmps();

            if (dt_Author != null && dt_Author.Rows.Count > 0)
            {
                string    empNo = dt_Author.Rows[0]["NO"].ToString();
                DataTable dt    = Dev2Interface.DB_AuthorEmpWorks(empNo);
                //委托人登录
                Dev2Interface.Port_Login(empNo);
                this.Pub1.Add("<b>当前登录人已切换为:" + empNo + "</b>");
                this.Pub1.AddBR();
                if (dt != null && dt.Rows.Count > 0)
                {
                    StringBuilder sBuilder = new StringBuilder();
                    sBuilder.Append("<table width='100%'  cellspacing='0' cellpadding='0' align=left>");
                    sBuilder.Append("<Caption ><div class='CaptionMsg' >待办</div></Caption>");

                    string extStr  = "";
                    string timeKey = DateTime.Now.ToString("yyyyMMddhhff");
                    string GroupBy = this.Request.QueryString["GroupBy"];
                    string appPath = BP.WF.Glo.CCFlowAppPath;//this.Request.ApplicationPath;

                    if (string.IsNullOrEmpty(GroupBy))
                    {
                        if (this.DoType == "CC")
                        {
                            GroupBy = "Rec";
                        }
                        else
                        {
                            GroupBy = "FlowName";
                        }
                    }

                    sBuilder.Append("<tr class='centerTitle'>");
                    sBuilder.Append("<th >ID</th>");
                    sBuilder.Append("<th class='Title' width=40% nowrap=true >标题</th>");

                    if (GroupBy != "FlowName")
                    {
                        sBuilder.Append("<th >" + "<a href='EmpWorks.aspx?GroupBy=FlowName" + extStr + "&T=" + timeKey + "' >流程</a>" + "</th>");
                    }

                    if (GroupBy != "NodeName")
                    {
                        sBuilder.Append("<th >" + "<a href='EmpWorks.aspx?GroupBy=NodeName" + extStr + "&T=" + timeKey + "' >节点</a>" + "</th>");
                    }

                    if (GroupBy != "StarterName")
                    {
                        sBuilder.Append("<th >" + "<a href='EmpWorks.aspx?GroupBy=StarterName" + extStr + "&T=" + timeKey + "' >发起人</a>" + "</th>");
                    }

                    sBuilder.Append("<th >" + "<a href='EmpWorks.aspx?GroupBy=PRI" + extStr + "&T=" + timeKey + "' >优先级</a>" + "</th>");

                    sBuilder.Append("<th >发起日期</th>");
                    sBuilder.Append("<th >接受日期</th>");
                    sBuilder.Append("<th >应完成日期</th>");
                    sBuilder.Append("<th >状态</th>");
                    sBuilder.Append("<th >备注</th>");
                    sBuilder.Append("</tr>");

                    string groupVals = "";
                    foreach (System.Data.DataRow dr in dt.Rows)
                    {
                        if (groupVals.Contains("@" + dr[GroupBy].ToString() + ","))
                        {
                            continue;
                        }
                        groupVals += "@" + dr[GroupBy].ToString() + ",";
                    }

                    int      i       = 0;
                    int      colspan = 10;
                    bool     is1     = false;
                    DateTime cdt     = DateTime.Now;
                    string[] gVals   = groupVals.Split('@');
                    int      gIdx    = 0;
                    foreach (string g in gVals)
                    {
                        if (string.IsNullOrEmpty(g))
                        {
                            continue;
                        }
                        gIdx++;
                        sBuilder.Append("<tr>");
                        if (GroupBy == "Rec")
                        {
                            sBuilder.Append("<td colspan=" + colspan + " class=TRSum onclick=\"GroupBarClick('" + appPath + "','" + gIdx + "')\" " + " >" + "<div style='text-align:left; float:left' ><img src='/WF/Style/Min.gif' alert='Min' id='Img" + gIdx + "'   border=0 />&nbsp;<b>" + g.Replace(",", "") + "</b>" + "</td>");
                        }
                        else
                        {
                            sBuilder.Append("<td colspan=" + colspan + " class=TRSum onclick=\"GroupBarClick('" + appPath + "','" + gIdx + "')\" " + " >" + "<div style='text-align:left; float:left' ><img src='/WF/Style/Min.gif' alert='Min' id='Img" + gIdx + "'   border=0 />&nbsp;<b>" + g.Replace(",", "") + "</b>" + "</td>");
                        }

                        sBuilder.Append("</tr>");

                        foreach (System.Data.DataRow dr in dt.Rows)
                        {
                            if (dr[GroupBy].ToString() + "," != g)
                            {
                                continue;
                            }
                            string sdt   = dr["SDT"] as string;
                            string paras = dr["AtPara"] as string;

                            if (is1)
                            {
                                sBuilder.Append("<tr bgcolor=AliceBlue " + "ID='" + gIdx + "_" + i + "'" + " >");
                            }
                            else
                            {
                                sBuilder.Append("<tr bgcolor=white " + "ID='" + gIdx + "_" + i + "'" + " class=TR>");
                            }

                            is1 = !is1;

                            i++;
                            int isRead = int.Parse(dr["IsRead"].ToString());

                            sBuilder.Append("<td class='Idx' nowrap>" + i + "</td>");
                            if (BP.WF.Glo.IsWinOpenEmpWorks)
                            {
                                if (isRead == 0)
                                {
                                    sBuilder.Append("<td onclick=\"SetImg('" + appPath + "','I" + gIdx + "_" + i + "')\"" + " >" + "<a href=\"javascript:WinOpenIt('/WF/MyFlow.aspx?FK_Flow=" + dr["FK_Flow"] + "&FK_Node=" + dr["FK_Node"] + "&FID=" + dr["FID"] + "&WorkID=" + dr["WorkID"] + "&IsRead=0&T=" + timeKey + "&Paras=" + paras + "');\" ><img class=Icon align='middle'  src='/WF/Img/Mail_UnRead.png' id='I" + gIdx + "_" + i + "' />" + dr["Title"].ToString() + "</a>" + "</td>");
                                }
                                else
                                {
                                    sBuilder.Append("<td  nowrap >" + "<a href=\"javascript:WinOpenIt('/WF/MyFlow.aspx?FK_Flow=" + dr["FK_Flow"] + "&FK_Node=" + dr["FK_Node"] + "&FID=" + dr["FID"] + "&WorkID=" + dr["WorkID"] + "&Paras=" + paras + "&T=" + timeKey + "');\"  ><img src='/WF/Img/Mail_Read.png' id='I" + gIdx + "_" + i + "' class=Icon align='middle'  />" + dr["Title"].ToString() + "</a>" + "</td>");
                                }
                            }
                            else
                            {
                                if (isRead == 0)
                                {
                                    sBuilder.Append("<td onclick=\"SetImg('" + appPath + "','I" + gIdx + "_" + i + "')\" " + " >" + "<a href=\"/WF/MyFlow.aspx?FK_Flow=" + dr["FK_Flow"] + "&FK_Node=" + dr["FK_Node"] + "&FID=" + dr["FID"] + "&WorkID=" + dr["WorkID"] + "&IsRead=0&Paras=" + paras + "&T=" + timeKey + "\"  target='_blank'><img class=Icon src='/WF/Img/Mail_UnRead.png' align='middle'  id='I" + gIdx + "_" + i + "' />" + dr["Title"].ToString() + "</a>" + "</td>");
                                }
                                else
                                {
                                    sBuilder.Append("<td  nowrap >" + "<a href=\"/WF/MyFlow.aspx?FK_Flow=" + dr["FK_Flow"] + "&FK_Node=" + dr["FK_Node"] + "&FID=" + dr["FID"] + "&WorkID=" + dr["WorkID"] + "&Paras=" + paras + "&T=" + timeKey + "\" target='_blank'><img class=Icon src='/WF/Img/Mail_Read.png' align='middle'  id='I" + gIdx + "_" + i + "' />" + dr["Title"].ToString() + "</a>" + "</td>");
                                }
                            }

                            if (GroupBy != "FlowName")
                            {
                                sBuilder.Append("<td  nowrap >" + dr["FlowName"].ToString() + "</td>");
                            }
                            if (GroupBy != "NodeName")
                            {
                                sBuilder.Append("<td  nowrap >" + dr["NodeName"].ToString() + "</td>");
                            }
                            if (GroupBy != "StarterName")
                            {
                                sBuilder.Append("<td  nowrap >" + BP.WF.Glo.GenerUserImgSmallerHtml(dr["Starter"].ToString(), dr["StarterName"].ToString()) + "</td>");
                            }
                            sBuilder.Append("<td  nowrap >" + "<img class=Icon src='/WF/Img/PRI/" + dr["PRI"].ToString() + ".png' class=Icon />" + "</td>");


                            sBuilder.Append("<td  nowrap class='TBDate' >" + BP.DA.DataType.ParseSysDate2DateTimeFriendly(dr["RDT"].ToString()) + "</td>");
                            sBuilder.Append("<td  nowrap class='TBDate' >" + BP.DA.DataType.ParseSysDate2DateTimeFriendly(dr["ADT"].ToString()) + "</td>");
                            sBuilder.Append("<td  nowrap class='TBDate' >" + dr["SDT"].ToString().Substring(5) + "</td>");

                            DateTime mysdt = BP.DA.DataType.ParseSysDate2DateTime(sdt);
                            if (cdt >= mysdt)
                            {
                                if (cdt.ToString("yyyy-MM-dd") == mysdt.ToString("yyyy-MM-dd"))
                                {
                                    sBuilder.Append("<td align=center nowrap >" + "<img src='/WF/Img/TolistSta/0.png' class='Icon'/><font color=green>正常</font>" + "</td>");
                                }
                                else
                                {
                                    sBuilder.Append("<td align=center nowrap >" + "<img src='/WF/Img/TolistSta/2.png' class='Icon'/><font color=red>逾期</font>" + "</td>");
                                }
                            }
                            else
                            {
                                sBuilder.Append("<td align=center nowrap >" + "<img src='/WF/Img/TolistSta/0.png'class='Icon'/>&nbsp;<font color=green>正常</font>" + "</td>");
                            }

                            sBuilder.Append("<td width='200'><div style='width:200px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;' title='" + dr["FlowNote"] + "'>" + dr["FlowNote"] + "</div></td>");
                            sBuilder.Append("</tr>");
                        }
                    }
                    sBuilder.Append("</table>");

                    this.Pub1.Add(sBuilder.ToString());
                }
                else
                {
                    this.Pub1.Add("无数据");
                }
            }
            else
            {
                this.Pub1.Add("无数据");
            }
            this.Pub1.AddFieldSetEndBR();
        }
예제 #13
0
 /// <summary>
 /// 用户登录
 /// </summary>
 /// <param name="userNo"></param>
 public void Login(string userNo)
 {
     Dev2Interface.Port_Login(userNo);
 }
 protected void lbtnUseManual_Click(object sender, EventArgs e)
 {
     Dev2Interface.Flow_SetFlowTransferCustom(FK_Flow, WorkID, false, hid_idx_all.Value);
     Response.Redirect("../MyFlow.aspx?FK_Flow=" + this.FK_Flow + "&WorkID=" + this.WorkID + "&FK_Node=" + this.FK_Node + "&FID=" + this.FID, true);
 }
예제 #15
0
 //string flowNo, Int64 workID, int unSendToNode = 0
 public string AccepterOfGener_UnSend()
 {
     return(Dev2Interface.Flow_DoUnSend(this.GetRequestVal("flowNo"), int.Parse(this.GetRequestVal("WorkID"))));
 }
예제 #16
0
 /// <summary>
 /// 获取当前用户待办工作
 /// </summary>
 /// <returns></returns>
 public DataTable GetEmpWorks()
 {
     return(Dev2Interface.DB_GenerEmpWorksOfDataTable());
 }
예제 #17
0
 /// <summary>
 /// 获取指定用户能够发起的流程集合
 /// </summary>
 /// <param name="userNo">用户编号</param>
 /// <returns></returns>
 public DataTable GetCanStartFlow(string userNo)
 {
     return(Dev2Interface.DB_GenerCanStartFlowsOfDataTable(userNo));
 }
예제 #18
0
 /// <summary>
 /// 获取当前用户待办工作
 /// </summary>
 /// <param name="state">流程状态</param>
 /// <param name="fk_flow">流程编号</param>
 /// <returns></returns>
 public DataTable GetEmpWorks(WFState state, string fk_flow)
 {
     return(Dev2Interface.DB_GenerEmpWorksOfDataTable(state, fk_flow));
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!ShowFlowOnly)
            {
                if (string.IsNullOrWhiteSpace(FK_Flow))
                {
                    throw new Exception("FK_Flow参数不能为空,且必须是有效的流程编号");
                }

                var sql     = string.Format("SELECT NodeID, Name,Step FROM WF_Node WHERE FK_Flow='{0}'", FK_Flow);
                var dtNodes = DBAccess.RunSQLReturnTable(sql);

                foreach (DataRow dr in dtNodes.Rows)
                {
                    if (FK_Node == Convert.ToInt32(dr["NodeID"]))
                    {
                        continue;
                    }

                    lbNodes.Items.Add(
                        new ListItem(
                            string.Format("{0}. {1}", dr["Step"], dr["Name"]),
                            string.Format("{0},{1},{2}", dr["Step"], dr["NodeID"], dr["Name"])));
                }
            }

            if (!ShowNodeOnly)
            {
                var sql         = "SELECT wfs.No,wfs.Name,wfs.ParentNo FROM WF_FlowSort wfs";
                var dtFlowSorts = DBAccess.RunSQLReturnTable(sql);

                DataTable dtFlows = null;

                sql = "SELECT wf.No,wf.[Name],wf.FK_FlowSort FROM WF_Flow wf";

                if (!string.IsNullOrWhiteSpace(WorkerId) && WorkerId.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Length == 1)
                {
                    dtFlows = Dev2Interface.DB_GenerCanStartFlowsOfDataTable(WorkerId);
                }
                else
                {
                    dtFlows = DBAccess.RunSQLReturnTable(sql);
                }

                //定义组织列表的数据集合
                //元组定义:是否是流程、树级别[0开始]、文本、值
                var items = new List <Tuple <bool, int, string, string> >();

                GenerateItems(items, dtFlowSorts.Select("ParentNo=0")[0], 0, dtFlows, dtFlowSorts);

                foreach (var item in items)
                {
                    lbFlows.Items.Add(new ListItem(item.Item3, item.Item4));
                }

                //生成的列表样式如下:
                //┌流程树
                //├─线性流程
                //├┄┄001.财务报销演示
            }
        }
예제 #20
0
 protected void lbtnUseAutomic_Click(object sender, EventArgs e)
 {
     Dev2Interface.Flow_SetFlowTransferCustom(FK_Flow, WorkID, BP.WF.TransferCustomType.ByCCBPMDefine, hid_idx_all.Value);
     Response.Redirect("../MyFlow.aspx?FK_Flow=" + this.FK_Flow + "&WorkID=" + this.WorkID + "&FK_Node=" + this.FK_Node + "&FID=" + this.FID, true);
 }