/// <summary> /// 撤销处理具体功能实现 /// </summary> /// <param name="session">会话</param> internal override void ExecuteInstanceImp(IDbSession session) { //创建新任务节点 var backMostPreviouslyActivityInstanceID = GetBackwardMostPreviouslyActivityInstanceID(); var nodeMediatorBackward = new NodeMediatorBackward(base.BackwardContext, session); nodeMediatorBackward.CreateBackwardActivityTaskTransitionInstance(base.BackwardContext.ProcessInstance, base.BackwardContext.BackwardFromActivityInstance, BackwardTypeEnum.Withdrawed, backMostPreviouslyActivityInstanceID, base.BackwardContext.BackwardToTargetTransitionGUID, TransitionTypeEnum.Withdrawed, TransitionFlyingTypeEnum.NotFlying, base.ActivityResource, session); //普通节点情况下:更新撤销节点的状态(从准备状态更新为撤销状态) var aim = new ActivityInstanceManager(); aim.Withdraw(base.BackwardContext.BackwardFromActivityInstance.ID, base.ActivityResource.AppRunner, session); //构造回调函数需要的数据 WfExecutedResult result = base.WfExecutedResult; result.BackwardTaskReceiver = base.BackwardContext.BackwardTaskReceiver; result.Status = WfExecutedStatus.Success; }
/// <summary> /// 多实例情况下(会签和加签)撤销处理 /// </summary> /// <param name="session"></param> internal override void ExecuteInstanceImp(IDbSession session) { var runningNode = BackwardContext.BackwardFromActivityInstance; //创建撤销到上一步的节点记录 var nodeMediatorBackward = new NodeMediatorBackward(base.BackwardContext, session); nodeMediatorBackward.CreateBackwardActivityTaskOfInnerMultipleInstance( base.BackwardContext.ProcessInstance, base.BackwardContext.BackwardToTaskActivityInstance, BackwardTypeEnum.WithdrawedOfMI, base.BackwardContext.BackwardFromActivityInstance.ID, base.ActivityResource, session); //置当前节点为撤销状态 var aim = new ActivityInstanceManager(); aim.Withdraw(runningNode.ID, base.ActivityResource.AppRunner, session); //创建新的一条待办状态的记录,用于下次执行 var newSuspendNode = aim.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; aim.Insert(newSuspendNode, session); //同时为此活动实例,创建新的任务 var tm = new TaskManager(); tm.Renew(base.BackwardContext.BackwardFromActivityInstance, newSuspendNode, base.AppRunner, session); //构造回调函数需要的数据 WfExecutedResult result = base.WfExecutedResult; result.BackwardTaskReciever = base.BackwardContext.BackwardTaskReciever; result.Status = WfExecutedStatus.Success; }
internal override void ExecuteInstanceImp(ISession session) { //创建新任务节点 var workItem = (WorkItem)WorkItemNodeFactory.CreateNewNode(base.BackwardContext.BackwardToTaskActivity); workItem.CreateActivityTaskAndTransitionInstances(base.BackwardContext.ProcessInstance, base.BackwardContext.FromActivityInstance, base.BackwardContext.BackwardToTargetTransition, TransitionTypeEnum.Withdrawed, base.ActivityResource, session); //更新撤销节点的状态(从准备状态更新为撤销状态) var aim = new ActivityInstanceManager(); aim.Withdraw(base.BackwardContext.FromActivityInstance.ActivityInstanceGUID, base.ActivityResource.LogonUser, session); //构造回调函数需要的数据 base.WfExecutedResult = WfExecutedResult.Success(); }