/// <summary> /// 进行流程跳转 /// </summary> /// <param name="context"></param> public void Jump(WorkflowContext context) { WorkflowInstance instance = context.Instance; if (instance.State == WorkflowInstanceState.Running) { WorkflowNode current = instance.Current; context.SetOperation(WorkflowAction.Jump); if (CheckAuthorization(context) == false) { return; } long transitionTo = current.Transitions .FirstOrDefault(e => e.NID == context.TransitionID).DESTINATION; current.SetActor(context.ActorID, context.ActorName, WorkflowAction.Jump); instance.Jump(transitionTo); ASTNode to = current.GetNode(transitionTo); OnExecuteProcess(new ExecutingContext() { From = current, To = to, TransitionID = context.TransitionID, Instance = instance, Data = context.Data, Operation = context.Operation, ActorID = context.ActorID, ActorName = context.ActorName }); if (to.NodeType == WorkflowNodeCategeory.End) { instance.State = WorkflowInstanceState.End; instance.Transfer(); } else if (to.NodeType == WorkflowNodeCategeory.Decision) { WorkflowDecision wfDecision = WorkflowDecision.ConvertToReallyType(to); Transition transition = wfDecision.GetTransition(); if (transition == null) { return; } Jump(new WorkflowContext() { Instance = WorkflowInstance.GetInstance(instance.InstanceID), TransitionID = transition.NID, ActorID = context.ActorID, Data = context.Data }); } } }
/// <summary> /// 撤销 /// </summary> /// <param name="context"></param> public void Cancel(WorkflowContext context) { WorkflowInstance instance = context.Instance; if (instance.State == WorkflowInstanceState.Running) { WorkflowNode current = instance.Current.GetFromNode(); context.SetOperation(WorkflowAction.Undo); if (CheckAuthorization(context) == false) { return; } //记录已经参与审批过的人信息 current.SetActor(context.ActorID, context.ActorName, WorkflowAction.Undo); instance.Jump(current.IDENTIFICATION); ASTNode to = current.GetNode(current.IDENTIFICATION); OnExecuteProcess(new ExecutingContext() { From = current, To = to, TransitionID = instance.Current.FromTransition.NID, Instance = instance, Data = context.Data, Operation = context.Operation, ActorID = context.ActorID, ActorName = context.ActorName }); if (to.NodeType == WorkflowNodeCategeory.Decision) { WorkflowNode wfDecision = WorkflowNode.ConvertToReallyType(to); Transition transition = wfDecision.FromTransition; if (transition == null) { return; } Cancel(new WorkflowContext() { Instance = WorkflowInstance.GetInstance(instance.InstanceID), ActorID = context.ActorID, Data = context.Data }); } } }
/// <summary> /// 进行流程跳转 /// </summary> /// <param name="context"></param> public void Jump(WorkflowContext context) { WorkflowInstance instance = context.Instance; if (instance.State == WorkflowInstanceState.Running) { WorkflowNode current = instance.Current; string transitionTo = current.Transitions .FirstOrDefault(e => e.NID == context.TransitionID).Destination; instance.Jump(transitionTo); ASTNode to = current.GetNode(transitionTo); OnExecuteProcess(new ExecutingContext() { From = current, To = to, TransitionID = context.TransitionID, Instance = instance, Data = context.Data, ActorID = context.ActorID, ActorName = context.ActorName }); if (to.NodeType == WorkflowNodeCategory.End) { instance.Transfer(WorkflowInstanceState.End); } else if (to.NodeType == WorkflowNodeCategory.Decision) { WorkflowDecision wfDecision = WorkflowDecision.ConvertToReallyType(to); Transition transition = wfDecision.GetTransition(); if (transition == null) { return; } Jump(new WorkflowContext() { Instance = WorkflowInstance.GetInstance(instance.InstanceID), TransitionID = transition.NID, ActorID = context.ActorID, Data = context.Data }); } } }