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