Esempio n. 1
0
        /// <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
                    });
                }
            }
        }
Esempio n. 2
0
        /// <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
                    });
                }
            }
        }