/// <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); }