/// <summary> /// 退回操作的处理逻辑 /// </summary> /// <param name="session">会话</param> internal override void ExecuteInstanceImp(IDbSession session) { var nodeMediatorBackward = new NodeMediatorBackward(base.BackwardContext, session); var aim = new ActivityInstanceManager(); var backMostPreviouslyActivityInstanceID = GetBackwardMostPreviouslyActivityInstanceID(); //上一步节点是普通节点的退回处理 nodeMediatorBackward.CreateBackwardActivityTaskTransitionInstance(base.BackwardContext.ProcessInstance, base.BackwardContext.BackwardFromActivityInstance, BackwardTypeEnum.Sendback, backMostPreviouslyActivityInstanceID, base.BackwardContext.BackwardToTargetTransitionGUID, TransitionTypeEnum.Sendback, TransitionFlyingTypeEnum.NotFlying, base.ActivityResource, session); //更新当前办理节点的状态(从准备或运行状态更新为退回状态) aim.SendBack(base.BackwardContext.BackwardFromActivityInstance.ID, base.ActivityResource.AppRunner, session); if (base.BackwardContext.BackwardFromActivityInstance.MIHostActivityInstanceID != null) { //更新当前办理节点的主节点状态(从挂起或运行状态更新为退回状态) aim.SendBack((int)base.BackwardContext.BackwardFromActivityInstance.MIHostActivityInstanceID, base.ActivityResource.AppRunner, session); //更新主节点下未办理完成节点状态为取消状态 aim.CancelUnCompletedMultipleInstance((int)base.BackwardContext.BackwardFromActivityInstance.MIHostActivityInstanceID, base.ActivityResource.AppRunner, session); } //构造回调函数需要的数据 WfExecutedResult result = base.WfExecutedResult; result.BackwardTaskReceiver = base.BackwardContext.BackwardTaskReceiver; result.ReturnDataContext = nodeMediatorBackward.ReturnDataContext; result.Status = WfExecutedStatus.Success; }