/// <summary> /// 判断是否可以向下个节点流转 /// </summary> /// <param name="InstanceID"></param> /// <param name="NodeID"></param> /// <returns></returns> public static bool IsNodeThroughEnable(string InstanceID, string NextNodeID) { try { string FlowScript = GetNodeScript(NextNodeID, EScriptType.FlowScript); string ScriptResult = null; if (FlowScript != "") { ScriptResult = CScriptOpe.ScriptExec(FlowScript, InstanceID).ToString(); } if (FlowScript == "" || ScriptResult == "True") { return(true); } else { return(false); } } catch (Exception ex) { CLog.PutDownErrInfo("判断是否可以向下流转操作异常。实例ID:" + InstanceID + ",下一个节点ID:" + NextNodeID + ",异常信息" + ex.Message.ToString()); throw ex; } }
/// <summary> /// 通过工作流实例ID和分支节点ID,获取当前分支节点所选的分支的名称 /// </summary> /// <param name="InstanceID">工作流实例ID</param> /// <param name="NodeID">节点ID</param> /// <returns></returns> public static string[] GetSwitchName(string InstanceID, string NodeID) { try { string[] SwitchNames = null; string SwitchScript = CDataHelper.GetData("select switchscript from " + CTableName.FlowChartNode + " where [node_id]='" + NodeID + "'"); if (SwitchScript == null || SwitchScript == "") { return(null); } else { object SwitchNameObj = CScriptOpe.ScriptExec(SwitchScript, InstanceID); if (SwitchNameObj == null || SwitchNameObj == "") { return(null); } else { SwitchNames = SwitchNameDecode(SwitchNameObj); return(SwitchNames); } } } catch (Exception ex) { CLog.PutDownErrInfo("获取节点流转分支操作异常。实例ID:" + InstanceID + ",节点ID:" + NodeID + ",异常信息:" + ex.Message.ToString()); throw ex; } }
/// <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); } }
/// <summary> /// 获取审批人 /// </summary> /// <param name="InstanceID"></param> /// <param name="NodeID"></param> /// <returns></returns> public static DataTable GetApprover(string InstanceID, string NodeID) { try { string ApproverScript = CDataHelper.GetData("select [operatorscript] from " + CTableName.FlowChartNode + " where [node_id]='" + NodeID + "'"); DataTable dtApprover = (DataTable)CScriptOpe.ScriptExec(ApproverScript, InstanceID); return(dtApprover); } catch (Exception ex) { CLog.PutDownErrInfo("获取审批人操作异常。实例ID:,节点ID:,异常信息:" + ex.Message.ToString()); throw ex; } }
/// <summary> /// 运行流程节点处理脚本 /// </summary> /// <param name="InstanceID"></param> /// <param name="ProcessNodeID"></param> private static void RunProcessScript(string InstanceID, string ProcessNodeID) { try { string ProcessScript = CNodeManager.GetNodeScript(ProcessNodeID, EScriptType.ProcessScript); if (ProcessScript != null && ProcessScript != "") { CScriptOpe.ScriptExec(ProcessScript, InstanceID); } } catch (Exception ex) { throw ex; } }
/// <summary> /// 获取审批提示信息 /// </summary> /// <param name="InstanceID"></param> /// <param name="NodeID"></param> /// <returns></returns> public static string GetApprovalNote(string InstanceID, string NodeID) { try { string strApprovalNote = null; string ApprovalNoteScript = CDataHelper.GetData("select [approvalnotescript] from " + CTableName.FlowChartNode + " where [node_id]='" + NodeID + "'"); if (ApprovalNoteScript != null && ApprovalNoteScript != "") { strApprovalNote = (string)CScriptOpe.ScriptExec(ApprovalNoteScript, InstanceID); } return(strApprovalNote); } catch (Exception ex) { CLog.PutDownErrInfo("获取审批提示操作异常。实例ID:,节点ID:,异常信息:" + ex.Message.ToString()); throw ex; } }