Exemplo n.º 1
0
        /// <summary>
        /// 流程流转命令处理
        /// </summary>
        /// <param name="InstanceID">流程实例的ID</param>
        /// <param name="NodeID">节点ID</param>
        /// <param name="ApprovalOpinion">申批意见,同意,不同意,驳回上级,驳回至发起人</param>
        /// <param name="OpeManID">申批人ID</param>
        /// <param name="ApprovalReason">申批备注</param>
        private string WFTransmitDeal(string InstanceID, string NodeID, EApprovalOpinion ApprovalOpinion, string OpeManID, string ApprovalReason)
        {
            try
            {
                //获取并执行审批脚本
                string script = CNodeManager.GetApprovalScript(NodeID, ApprovalOpinion);
                if (script != null && script != "")
                {
                    CScriptOpe.ScriptExec(script, InstanceID);
                }

                //记录审批意见和状态
                string UpdateApprovalOpinionResult = CApprovalManager.UpdateApprovalOpinion(InstanceID, NodeID, ApprovalOpinion, OpeManID, ApprovalReason);
                if (UpdateApprovalOpinionResult != WFGlobal.success)
                {
                    return(UpdateApprovalOpinionResult);
                }

                //判断是否可以流转到下一级
                string NextNodeID = CNodeManager.GetNextNodeIDByCurrentNodeID(NodeID, ApprovalOpinion);
                if (CNodeManager.IsNodeThroughEnable(InstanceID, NextNodeID))
                {
                    //记录该节点所有审批人的审批状态
                    string UpdateNodeApprovalStatusResult = CApprovalManager.UpdateNodeApprovalStatus(InstanceID, NodeID, EApprovalStatus.Complete);
                    if (UpdateNodeApprovalStatusResult != WFGlobal.success)
                    {
                        return(UpdateNodeApprovalStatusResult);
                    }

                    if (ApprovalOpinion == EApprovalOpinion.驳回上级)
                    {
                        return(CReturnUP.ReturnUp(InstanceID, NodeID, NextNodeID));
                    }
                    else if (ApprovalOpinion == EApprovalOpinion.驳回至发起人)
                    {
                        return(CReturnToStart.ReturnToStart(InstanceID, NodeID, NextNodeID));
                    }
                    else if (ApprovalOpinion == EApprovalOpinion.意)
                    {
                        return(CGoEnd.GoEnd(InstanceID, NodeID, NextNodeID));
                    }
                    else
                    {
                        return(CNodeManager.GoNextNodesFromOtherNode(InstanceID, NodeID));
                    }
                }
                return(WFGlobal.success);
            }
            catch (Exception ex)
            {
                WFGlobal.ErrInfo = CLog.PutDownErrInfo("流程流转异常:" + ex.Message.ToString());
                return(WFGlobal.ErrInfo);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 节点转移,从当前节点进入下一节点
        /// </summary>
        /// <param name="WFID"></param>
        /// <param name="InstanceID"></param>
        /// <param name="NodeID"></param>
        /// <param name="NextNodeID"></param>
        public static string NodeTransfer(string InstanceID, string NodeID, string NextNodeID)
        {
            try
            {
                if (CNodeManager.IsNodeThroughEnable(InstanceID, NextNodeID))
                {
                    //记录流转历史
                    if (CDataHelper.ExecuteNonQuery("insert into " + CTableName.FlowChartHistory + "(instance_id,node_id,next_node_id) values('" + InstanceID + "','" + NodeID + "','" + NextNodeID + "')") < 0)
                    {
                        WFGlobal.ErrInfo = CLog.PutDownErrInfo("记录工作流实例流转节点失败,工作流实例ID:" + InstanceID + ",开始节点ID:" + NodeID + ",结束节点ID:" + NextNodeID);
                        return(WFGlobal.ErrInfo);
                    }

                    string NodeType = CNodeManager.GetNodeType(NextNodeID);
                    if (NodeType == CNodeType.SwitchType)
                    {
                        return(GoNextNodesFromSwitchNode(InstanceID, NextNodeID));
                    }
                    else if (NodeType == CNodeType.ProcessType)
                    {
                        RunProcessScript(InstanceID, NextNodeID);
                        return(CNodeManager.GoNextNodesFromOtherNode(InstanceID, NextNodeID));
                    }
                    else if (NodeType == CNodeType.ApproveType || NodeType == CNodeType.StartType)
                    {
                        return(CNodeManager.PutDownNodeApprover(InstanceID, NextNodeID));
                    }
                    else if (NodeType == CNodeType.EndType)
                    {
                        return(CInstanceManager.SetInstanceComplete(InstanceID));
                    }
                }
                return(WFGlobal.success);
            }
            catch (Exception ex)
            {
                WFGlobal.ErrInfo = CLog.PutDownErrInfo("节点流转异常,工作流实例ID:" + InstanceID + ",开始节点ID:" + NodeID + ",结束节点ID:" + NextNodeID);
                return(WFGlobal.ErrInfo);
            }
        }