Example #1
0
        /// <summary>
        /// 执行退回操作
        /// </summary>
        internal override void Execute()
        {
            var runningNode = base.SendBackOperation.BackwardFromActivityInstance;
            //创建撤销到上一步的节点记录
            var psc = new PreviousStepChecker();
            var previousAdjacentBrotherNode = psc.GetPreviousOfMultipleInstanceNode(
                runningNode.MIHostActivityInstanceID.Value,
                runningNode.ID,
                runningNode.CompleteOrder.Value);

            CreateBackwardActivityTaskOfInnerMultipleInstance(this.SendBackOperation.ProcessInstance,
                                                              previousAdjacentBrotherNode,
                                                              base.SendBackOperation.BackwardType,
                                                              base.SendBackOperation.BackwardFromActivityInstance.ID,
                                                              base.SendBackOperation.ActivityResource,
                                                              base.Session);

            //创建新的一条待办状态的记录,用于下次执行
            var newSuspendNode = base.ActivityInstanceManager.CreateActivityInstanceObject(runningNode);

            newSuspendNode.ActivityState            = (short)ActivityStateEnum.Suspended;
            newSuspendNode.MIHostActivityInstanceID = runningNode.MIHostActivityInstanceID;
            newSuspendNode.CompleteOrder            = runningNode.CompleteOrder;
            newSuspendNode.ComplexType         = runningNode.ComplexType;
            newSuspendNode.SignForwardType     = runningNode.SignForwardType;
            newSuspendNode.AssignedToUserIDs   = runningNode.AssignedToUserIDs;
            newSuspendNode.AssignedToUserNames = runningNode.AssignedToUserNames;

            base.ActivityInstanceManager.Insert(newSuspendNode, base.Session);

            //同时为此活动实例,创建新的任务
            base.TaskManager.Renew(runningNode, newSuspendNode, base.SendBackOperation.ActivityResource.AppRunner, base.Session);
        }