/// <summary>
        /// 创建多实例节点之间回滚时的活动实例,任务数据
        /// </summary>
        /// <param name="processInstance"></param>
        /// <param name="originalBackwardToActivityInstance"></param>
        /// <param name="backwardType"></param>
        /// <param name="backSrcActivityInstanceID"></param>
        /// <param name="activityResource"></param>
        /// <param name="session"></param>
        internal void CreateBackwardActivityTaskOfInnerMultipleInstance(ProcessInstanceEntity processInstance,
            ActivityInstanceEntity originalBackwardToActivityInstance,
            BackwardTypeEnum backwardType,
            int backSrcActivityInstanceID,
            ActivityResource activityResource,
            IDbSession session)
        {
            //创建回滚到的节点信息
            var rollbackPreviousActivityInstance = base.CreateBackwardToActivityInstanceObject(processInstance,
                backwardType,
                backSrcActivityInstanceID,
                activityResource.AppRunner);

            rollbackPreviousActivityInstance.ActivityState = (short)ActivityStateEnum.Ready;
            rollbackPreviousActivityInstance.MIHostActivityInstanceID = originalBackwardToActivityInstance.MIHostActivityInstanceID;
            rollbackPreviousActivityInstance.CompleteOrder = originalBackwardToActivityInstance.CompleteOrder;
            rollbackPreviousActivityInstance.ComplexType = originalBackwardToActivityInstance.ComplexType;
            rollbackPreviousActivityInstance.SignForwardType = originalBackwardToActivityInstance.SignForwardType;
            rollbackPreviousActivityInstance.AssignedToUserIDs = originalBackwardToActivityInstance.AssignedToUserIDs;      //多实例节点为单一用户任务
            rollbackPreviousActivityInstance.AssignedToUserNames = originalBackwardToActivityInstance.AssignedToUserNames;

            //插入新活动实例数据
            base.ActivityInstanceManager.Insert(rollbackPreviousActivityInstance,
                session);

            //创建新任务数据
            base.CreateNewTask(rollbackPreviousActivityInstance, activityResource, session);
        }
Beispiel #2
0
        /// <summary>
        /// 创建多实例节点之间回滚时的活动实例,任务数据
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="originalBackwardToActivityInstance">原始退回到的节点实例</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="backSrcActivityInstanceID">源退回节点实例ID</param>
        /// <param name="activityResource">资源</param>
        /// <param name="session">会话</param>
        internal void CreateBackwardActivityTaskOfInnerMultipleInstance(ProcessInstanceEntity processInstance,
                                                                        ActivityInstanceEntity originalBackwardToActivityInstance,
                                                                        BackwardTypeEnum backwardType,
                                                                        int backSrcActivityInstanceID,
                                                                        ActivityResource activityResource,
                                                                        IDbSession session)
        {
            //创建回滚到的节点信息
            var rollbackPreviousActivityInstance = base.CreateBackwardToActivityInstanceObject(processInstance,
                                                                                               backwardType,
                                                                                               backSrcActivityInstanceID,
                                                                                               originalBackwardToActivityInstance.ID,
                                                                                               activityResource.AppRunner);

            rollbackPreviousActivityInstance.ActivityState            = (short)ActivityStateEnum.Ready;
            rollbackPreviousActivityInstance.MIHostActivityInstanceID = originalBackwardToActivityInstance.MIHostActivityInstanceID;
            rollbackPreviousActivityInstance.CompleteOrder            = originalBackwardToActivityInstance.CompleteOrder;
            rollbackPreviousActivityInstance.ComplexType         = originalBackwardToActivityInstance.ComplexType;
            rollbackPreviousActivityInstance.SignForwardType     = originalBackwardToActivityInstance.SignForwardType;
            rollbackPreviousActivityInstance.AssignedToUserIDs   = originalBackwardToActivityInstance.AssignedToUserIDs;    //多实例节点为单一用户任务
            rollbackPreviousActivityInstance.AssignedToUserNames = originalBackwardToActivityInstance.AssignedToUserNames;

            //插入新活动实例数据
            base.ActivityInstanceManager.Insert(rollbackPreviousActivityInstance,
                                                session);

            base.ReturnDataContext.ActivityInstanceID = rollbackPreviousActivityInstance.ID;
            base.ReturnDataContext.ProcessInstanceID  = rollbackPreviousActivityInstance.ProcessInstanceID;

            //创建新任务数据
            base.CreateNewTask(rollbackPreviousActivityInstance, activityResource, session);
        }
Beispiel #3
0
        /// <summary>
        /// 创建活动实例的对象
        /// </summary>
        /// <param name="appName">应用名称</param>
        /// <param name="appInstanceID">应用实例ID</param>
        /// <param name="processInstanceID">流程实例ID</param>
        /// <param name="activity">活动</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="backSrcActivityInstanceID">退回源活动实例ID</param>
        /// <returns>活动实例</returns>
        internal ActivityInstanceEntity CreateBackwardActivityInstanceObject(string appName,
                                                                             string appInstanceID,
                                                                             int processInstanceID,
                                                                             ActivityEntity activity,
                                                                             BackwardTypeEnum backwardType,
                                                                             int backSrcActivityInstanceID,
                                                                             WfAppRunner runner)
        {
            ActivityInstanceEntity instance = new ActivityInstanceEntity();

            instance.ActivityGUID           = activity.ActivityGUID;
            instance.ActivityName           = activity.ActivityName;
            instance.ActivityType           = (short)activity.ActivityType;
            instance.WorkItemType           = (short)activity.WorkItemType;
            instance.GatewayDirectionTypeID = (short)activity.GatewayDirectionType;
            instance.ProcessGUID            = activity.ProcessGUID;
            instance.AppName                   = appName;
            instance.AppInstanceID             = appInstanceID;
            instance.ProcessInstanceID         = processInstanceID;
            instance.BackwardType              = (short)backwardType;
            instance.BackSrcActivityInstanceID = backSrcActivityInstanceID;
            instance.TokensRequired            = 1;
            instance.TokensHad                 = 1;
            instance.CreatedByUserID           = runner.UserID;
            instance.CreatedByUserName         = runner.UserName;
            instance.CreatedDateTime           = System.DateTime.Now;
            instance.ActivityState             = (short)ActivityStateEnum.Ready;
            instance.CanRenewInstance          = 0;

            return(instance);
        }
        /// <summary>
        /// 创建多实例节点之间回滚时的活动实例,任务数据
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="originalBackwardToActivityInstance">原始退回到的节点实例</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="backSrcActivityInstanceID">源退回节点实例ID</param>
        /// <param name="activityResource">资源</param>
        /// <param name="session">会话</param>
        internal void CreateBackwardActivityTaskOfInnerMultipleInstance(ProcessInstanceEntity processInstance,
                                                                        ActivityInstanceEntity originalBackwardToActivityInstance,
                                                                        BackwardTypeEnum backwardType,
                                                                        int backSrcActivityInstanceID,
                                                                        ActivityResource activityResource,
                                                                        IDbSession session)
        {
            //创建回滚到的节点信息
            var rollbackPreviousActivityInstance = base.CreateBackwardToActivityInstanceObject(processInstance,
                                                                                               backwardType,
                                                                                               backSrcActivityInstanceID,
                                                                                               originalBackwardToActivityInstance.ID,
                                                                                               activityResource.AppRunner);

            rollbackPreviousActivityInstance.ActivityState            = (short)ActivityStateEnum.Ready;
            rollbackPreviousActivityInstance.MIHostActivityInstanceID = originalBackwardToActivityInstance.MIHostActivityInstanceID;
            rollbackPreviousActivityInstance.CompleteOrder            = originalBackwardToActivityInstance.CompleteOrder;
            rollbackPreviousActivityInstance.ComplexType     = originalBackwardToActivityInstance.ComplexType;
            rollbackPreviousActivityInstance.SignForwardType = originalBackwardToActivityInstance.SignForwardType;
            //人员来自步骤列表的用户数据
            rollbackPreviousActivityInstance.AssignedToUserIDs   = base.SendBackOperation.BackwardToTaskPerformer.UserID;    //多实例节点为单一用户任务
            rollbackPreviousActivityInstance.AssignedToUserNames = base.SendBackOperation.BackwardToTaskPerformer.UserName;

            //插入新活动实例数据
            base.ActivityInstanceManager.Insert(rollbackPreviousActivityInstance,
                                                session);

            //创建新任务数据
            base.TaskManager.Insert(rollbackPreviousActivityInstance,
                                    base.SendBackOperation.BackwardToTaskPerformer,
                                    activityResource.AppRunner,
                                    base.Session);
        }
Beispiel #5
0
        /// <summary>
        /// 创建退回时的流转节点对象、任务和转移数据
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="fromActivityInstance">运行节点实例</param>
        /// <param name="backwardToTaskActivity">退回到的节点</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="transitionType">转移类型</param>
        /// <param name="flyingType">跳跃类型</param>
        /// <param name="activityResource">资源</param>
        /// <param name="session">会话</param>
        internal void CreateBackwardActivityTaskTransitionInstance(ProcessInstanceEntity processInstance,
                                                                   ActivityInstanceEntity fromActivityInstance,
                                                                   ActivityEntity backwardToTaskActivity,
                                                                   BackwardTypeEnum backwardType,
                                                                   TransitionTypeEnum transitionType,
                                                                   TransitionFlyingTypeEnum flyingType,
                                                                   ActivityResource activityResource,
                                                                   IDbSession session)
        {
            var previousActivityInstance = this.ActivityInstanceManager.GetPreviousActivityInstanceSimple(fromActivityInstance,
                                                                                                          backwardToTaskActivity.ActivityGUID,
                                                                                                          session);

            if (previousActivityInstance == null)
            {
                throw new WorkflowException(LocalizeHelper.GetEngineMessage("nodesendback.CreateBackwardActivityTaskTransitionInstance.error"));
            }

            //实例化Activity
            var toActivityInstance = this.ActivityInstanceManager.CreateBackwardActivityInstanceObject(
                processInstance.AppName,
                processInstance.AppInstanceID,
                processInstance.AppInstanceCode,
                processInstance.ID,
                backwardToTaskActivity,
                backwardType,
                fromActivityInstance.ID,
                previousActivityInstance.ID,
                activityResource.AppRunner);

            //进入准备运行状态
            toActivityInstance.ActivityState = (short)ActivityStateEnum.Ready;
            //人员来自步骤列表的用户数据
            toActivityInstance.AssignedToUserIDs   = SendBackOperation.BackwardToTaskPerformer.UserID;
            toActivityInstance.AssignedToUserNames = SendBackOperation.BackwardToTaskPerformer.UserName;

            //插入活动实例数据
            this.ActivityInstanceManager.Insert(toActivityInstance,
                                                session);

            //插入任务数据
            this.TaskManager.Insert(toActivityInstance,
                                    SendBackOperation.BackwardToTaskPerformer,
                                    activityResource.AppRunner,
                                    session);

            //插入转移数据
            InsertTransitionInstance(processInstance,
                                     fromActivityInstance,
                                     toActivityInstance,
                                     TransitionTypeEnum.Backward,
                                     TransitionFlyingTypeEnum.NotFlying,
                                     this.SendBackOperation.ActivityResource.AppRunner,
                                     session);
        }
Beispiel #6
0
        /// <summary>
        /// 退回是加签情况下的处理:
        /// 要退回的节点是加签节点
        /// 只实例化当初的加签主节点
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="backwardToTaskActvity">退回的活动节点</param>
        /// <param name="fromActivityInstance">运行节点实例</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="previousMainInstance">前主节点实例</param>
        /// <param name="transitionGUID">转移GUID</param>
        /// <param name="transitionType">转移类型</param>
        /// <param name="flyingType">跳跃类型</param>
        /// <param name="activityResource">资源</param>
        /// <param name="session">数据上下文</param>
        internal void CreateBackwardActivityTaskRepateSignForwardMainNodeOnly(ProcessInstanceEntity processInstance,
                                                                              ActivityEntity backwardToTaskActvity,
                                                                              ActivityInstanceEntity fromActivityInstance,
                                                                              BackwardTypeEnum backwardType,
                                                                              ActivityInstanceEntity previousMainInstance,
                                                                              string transitionGUID,
                                                                              TransitionTypeEnum transitionType,
                                                                              TransitionFlyingTypeEnum flyingType,
                                                                              ActivityResource activityResource,
                                                                              IDbSession session)
        {
            // 退回是加签情况下的处理:
            // 要退回的节点是加签节点
            // 只实例化当初的加签主节点
            //重新封装任务办理人为AssignedToUsers, AssignedToUsernames
            var performerList = AntiGenerateActivityPerformerList(previousMainInstance);

            activityResource.NextActivityPerformers.Clear();
            activityResource.NextActivityPerformers = new Dictionary <string, PerformerList>();
            activityResource.NextActivityPerformers.Add(backwardToTaskActvity.ActivityGUID, performerList);

            //实例化Activity
            var toActivityInstance = base.CreateBackwardToActivityInstanceObject(processInstance,
                                                                                 backwardType,
                                                                                 previousMainInstance.ID,
                                                                                 activityResource.AppRunner);

            //进入准备运行状态
            toActivityInstance.ActivityState       = (short)ActivityStateEnum.Ready;
            toActivityInstance.AssignedToUserIDs   = previousMainInstance.AssignedToUserIDs;
            toActivityInstance.AssignedToUserNames = previousMainInstance.AssignedToUserNames;
            toActivityInstance.ComplexType         = null;//previousMainInstance.ComplexType;发起加签前状态为null
            toActivityInstance.CompleteOrder       = previousMainInstance.CompleteOrder;
            toActivityInstance.SignForwardType     = previousMainInstance.SignForwardType;

            //插入活动实例数据
            base.ActivityInstanceManager.Insert(toActivityInstance,
                                                session);

            base.ReturnDataContext.ActivityInstanceID = toActivityInstance.ID;
            base.ReturnDataContext.ProcessInstanceID  = toActivityInstance.ProcessInstanceID;

            //插入任务数据
            base.CreateNewTask(toActivityInstance, activityResource, session);

            //插入转移数据
            base.InsertTransitionInstance(processInstance,
                                          transitionGUID,
                                          fromActivityInstance,
                                          toActivityInstance,
                                          transitionType,
                                          flyingType,
                                          activityResource.AppRunner,
                                          session);
        }
        /// <summary>
        /// 最后一个会签多实例子节点的撤销操作
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="fromActivityInstance">运行节点</param>
        /// <param name="originalBackwardToActivityInstance">初始退回到的节点实例</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="transitionType">转移类型</param>
        /// <param name="flyingType">跳跃类型</param>
        /// <param name="activityResource">资源</param>
        /// <param name="session">会话</param>
        internal void CreateBackwardActivityTaskTransitionOfLastMultipleInstance(ProcessInstanceEntity processInstance,
                                                                                 ActivityInstanceEntity fromActivityInstance,
                                                                                 ActivityInstanceEntity originalBackwardToActivityInstance,
                                                                                 BackwardTypeEnum backwardType,
                                                                                 TransitionTypeEnum transitionType,
                                                                                 TransitionFlyingTypeEnum flyingType,
                                                                                 ActivityResource activityResource,
                                                                                 IDbSession session)
        {
            //创建回滚到的节点信息
            var rollbackPreviousActivityInstance = base.ActivityInstanceManager.CreateBackwardActivityInstanceObject(processInstance.AppName,
                                                                                                                     processInstance.AppInstanceID,
                                                                                                                     processInstance.AppInstanceCode,
                                                                                                                     processInstance.ID,
                                                                                                                     this.SendBackOperation.BackwardToTaskActivity,
                                                                                                                     backwardType,
                                                                                                                     fromActivityInstance.ID,
                                                                                                                     originalBackwardToActivityInstance.ID,
                                                                                                                     activityResource.AppRunner);

            rollbackPreviousActivityInstance.ActivityState            = (short)ActivityStateEnum.Ready;
            rollbackPreviousActivityInstance.MIHostActivityInstanceID = originalBackwardToActivityInstance.MIHostActivityInstanceID;
            rollbackPreviousActivityInstance.CompleteOrder            = originalBackwardToActivityInstance.CompleteOrder;
            rollbackPreviousActivityInstance.ComplexType     = originalBackwardToActivityInstance.ComplexType;
            rollbackPreviousActivityInstance.SignForwardType = originalBackwardToActivityInstance.SignForwardType;

            //人员来自步骤列表的用户数据
            rollbackPreviousActivityInstance.AssignedToUserIDs   = base.SendBackOperation.BackwardToTaskPerformer.UserID;    //多实例节点为单一用户任务
            rollbackPreviousActivityInstance.AssignedToUserNames = base.SendBackOperation.BackwardToTaskPerformer.UserName;

            //插入新活动实例数据
            base.ActivityInstanceManager.Insert(rollbackPreviousActivityInstance,
                                                session);

            //创建新任务数据
            //插入任务数据
            base.TaskManager.Insert(rollbackPreviousActivityInstance,
                                    base.SendBackOperation.BackwardToTaskPerformer,
                                    activityResource.AppRunner,
                                    session);

            //插入转移数据
            base.InsertTransitionInstance(processInstance,
                                          fromActivityInstance,
                                          rollbackPreviousActivityInstance,
                                          TransitionTypeEnum.Backward,
                                          TransitionFlyingTypeEnum.NotFlying,
                                          this.SendBackOperation.ActivityResource.AppRunner,
                                          session);
        }
Beispiel #8
0
        /// <summary>
        /// 创建退回类型的活动实例对象
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="backSrcActivityInstanceID">退回的活动实例ID</param>
        /// <param name="runner">登录用户</param>
        /// <returns></returns>
        protected WfActivityInstance CreateBackwardToActivityInstanceObject(WfProcessInstance processInstance, WfActivityInstance activityInstance,
                                                                            BackwardTypeEnum backwardType,
                                                                            string backSrcActivityInstanceID,
                                                                            WfAppRunner runner)
        {
            WfActivityInstance entity = ActivityInstanceManager.CreateBackwardActivityInstanceObject(
                processInstance,
                this.BackwardContext.BackwardToTaskActivity,
                activityInstance,
                backwardType,
                this.BackwardContext.BackwardToTaskActivity.ActivityID,
                runner);

            return(entity);
        }
Beispiel #9
0
        /// <summary>
        /// 创建退回类型的活动实例对象
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="backSrcActivityInstanceID">退回的活动实例ID</param>
        /// <param name="runner">登录用户</param>
        /// <returns></returns>
        protected ActivityInstanceEntity CreateBackwardToActivityInstanceObject(ProcessInstanceEntity processInstance,
                                                                                BackwardTypeEnum backwardType,
                                                                                int backSrcActivityInstanceID,
                                                                                WfAppRunner runner)
        {
            ActivityInstanceEntity entity = ActivityInstanceManager.CreateBackwardActivityInstanceObject(
                processInstance.AppName,
                processInstance.AppInstanceID,
                processInstance.ID,
                this.BackwardContext.BackwardToTaskActivity,
                backwardType,
                backSrcActivityInstanceID,
                runner);

            return(entity);
        }
Beispiel #10
0
        /// <summary>
        /// 创建退回类型的活动实例对象
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="backSrcActivityInstanceID">退回的活动实例ID</param>
        /// <param name="backOrgActivityInstanceID">初始办理活动实例ID</param>
        /// <param name="runner">登录用户</param>
        /// <returns></returns>
        protected ActivityInstanceEntity CreateBackwardToActivityInstanceObject(ProcessInstanceEntity processInstance,
            BackwardTypeEnum backwardType,
            int backSrcActivityInstanceID,
            int backOrgActivityInstanceID,
            WfAppRunner runner)
        {
            ActivityInstanceEntity entity = ActivityInstanceManager.CreateBackwardActivityInstanceObject(
                processInstance.AppName,
                processInstance.AppInstanceID,
                processInstance.ID,
                this.SendBackOperation.BackwardToTaskActivity,
                backwardType,
                backSrcActivityInstanceID,
                backOrgActivityInstanceID,
                runner);

            return entity;
        }
Beispiel #11
0
        /// <summary>
        /// 创建退回时的流转节点对象、任务和转移数据
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="fromActivityInstance">运行节点实例</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="backMostPreviouslyActivityInstanceID">退回节点实例ID</param>
        /// <param name="transitionGUID">转移GUID</param>
        /// <param name="transitionType">转移类型</param>
        /// <param name="flyingType">跳跃类型</param>
        /// <param name="activityResource">资源</param>
        /// <param name="session">会话</param>
        internal void CreateBackwardActivityTaskTransitionInstance(ProcessInstanceEntity processInstance,
                                                                   ActivityInstanceEntity fromActivityInstance,
                                                                   BackwardTypeEnum backwardType,
                                                                   int backMostPreviouslyActivityInstanceID,
                                                                   string transitionGUID,
                                                                   TransitionTypeEnum transitionType,
                                                                   TransitionFlyingTypeEnum flyingType,
                                                                   ActivityResource activityResource,
                                                                   IDbSession session)
        {
            //实例化Activity
            var toActivityInstance = base.CreateBackwardToActivityInstanceObject(processInstance,
                                                                                 backwardType,
                                                                                 backMostPreviouslyActivityInstanceID,
                                                                                 activityResource.AppRunner);

            //进入准备运行状态
            toActivityInstance.ActivityState     = (short)ActivityStateEnum.Ready;
            toActivityInstance.AssignedToUserIDs = base.GenerateActivityAssignedUserIDs(
                activityResource.NextActivityPerformers[base.BackwardContext.BackwardToTaskActivity.ActivityGUID]);
            toActivityInstance.AssignedToUserNames = base.GenerateActivityAssignedUserNames(
                activityResource.NextActivityPerformers[base.BackwardContext.BackwardToTaskActivity.ActivityGUID]);

            //插入活动实例数据
            base.ActivityInstanceManager.Insert(toActivityInstance,
                                                session);

            base.ReturnDataContext.ActivityInstanceID = toActivityInstance.ID;
            base.ReturnDataContext.ProcessInstanceID  = toActivityInstance.ProcessInstanceID;

            //插入任务数据
            base.CreateNewTask(toActivityInstance, activityResource, session);

            //插入转移数据
            base.InsertTransitionInstance(processInstance,
                                          transitionGUID,
                                          fromActivityInstance,
                                          toActivityInstance,
                                          transitionType,
                                          flyingType,
                                          activityResource.AppRunner,
                                          session);
        }
        /// <summary>
        /// 创建活动实例的对象
        /// </summary>
        /// <param name="activityNode"></param>
        /// <param name="processInstance"></param>
        /// <returns></returns>
        internal WfActivityInstance CreateBackwardActivityInstanceObject(WfProcessInstance process,
                                                                         ActivityEntity activityNode,
                                                                         WfActivityInstance activity,
                                                                         BackwardTypeEnum backwardType,
                                                                         string backSrcActivityId,
                                                                         WfAppRunner runner)
        {
            WfActivityInstance instance = new WfActivityInstance();

            instance.Fid                 = UUIDUtils.Fid;
            instance.ActivityName        = activityNode.ActivityName;
            instance.ActivityType        = activityNode.ActivityType.ToString();
            instance.DirectionType       = activityNode.GatewayDirectionType.ToString();
            instance.ProcessInsUid       = process.Fid;
            instance.NodeId              = activityNode.ActivityID;
            instance.NodeName            = activityNode.ActivityName;
            instance.AppName             = activity.AppName;
            instance.BillUid             = activity.BillUid;
            instance.BackwardType        = backwardType.ToString();
            instance.BackSrcActivityId   = backSrcActivityId;
            instance.TokensRequired      = 1;
            instance.TokensHad           = 1;
            instance.AssignedToUserIds   = runner.UserId;
            instance.AssignedToUserNames = runner.UserName;
            instance.UpdateDate          = DateTimeUtils.CurrentDateTimeStr;
            instance.ActivityState       = WfActivityInstanceState.Ready;
            instance.CanRenewInstance    = 0;
            activity.BusinessUid         = process.BusinessUid;
            instance.AppEmpUid           = process.AppEmpUid;
            instance.StartTime           = process.StartTime;
            instance.ProcessState        = process.ProcessState;
            instance.StartTime           = DateTimeUtils.CurrentDateTimeStr;
            if (activityNode.FieldItems.Any())
            {
                instance.FormPower = activityNode.FieldItems.ToJson();
            }

            return(instance);
        }
        /// <summary>
        /// 创建退回时的流转节点对象、任务和转移数据
        /// </summary>
        /// <param name="processInstance"></param>
        /// <param name="fromActivityInstance"></param>
        /// <param name="backMostPreviouslyActivityInstanceID"></param>
        /// <param name="transitionGUID"></param>
        /// <param name="transitionType"></param>
        /// <param name="flyingType"></param>
        /// <param name="activityResource"></param>
        /// <param name="session"></param>
        internal void CreateBackwardActivityTaskTransitionInstance(ProcessInstanceEntity processInstance,
            ActivityInstanceEntity fromActivityInstance,
            BackwardTypeEnum backwardType,
            int backMostPreviouslyActivityInstanceID,
            string transitionGUID,
            TransitionTypeEnum transitionType,
            TransitionFlyingTypeEnum flyingType,
            ActivityResource activityResource,
            IDbSession session)
        {
            //实例化Activity
            var toActivityInstance = base.CreateBackwardToActivityInstanceObject(processInstance,
                backwardType,
                backMostPreviouslyActivityInstanceID,
                activityResource.AppRunner);

            //进入运行状态
            toActivityInstance.ActivityState = (short)ActivityStateEnum.Ready;
            toActivityInstance.AssignedToUsers = base.GenerateActivityAssignedUsers(
                activityResource.NextActivityPerformers[base.BackwardContext.BackwardToTaskActivity.ActivityGUID]);

            //插入活动实例数据
            base.ActivityInstanceManager.Insert(toActivityInstance,
                session);

            //插入任务数据
            base.CreateNewTask(toActivityInstance, activityResource, session);

            //插入转移数据
            base.InsertTransitionInstance(processInstance,
                transitionGUID,
                fromActivityInstance,
                toActivityInstance,
                transitionType,
                flyingType,
                activityResource.AppRunner,
                session);
        }
Beispiel #14
0
        /// <summary>
        /// 退回是会签情况下的处理:
        /// 要退回的节点是会签节点
        /// 1) 全部实例化会签节点下的多实例节点
        /// 2) 只取得办理完成的节点,而且保证CompleteOrder的唯一性
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="backwardToTaskActvity">退回到的活动节点</param>
        /// <param name="fromActivityInstance">运行节点</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="previousMainInstance">前主节点实例</param>
        /// <param name="transitionGUID">转移GUID</param>
        /// <param name="transitionType">转移类型</param>
        /// <param name="flyingType">跳跃类型</param>
        /// <param name="activityResource">资源</param>
        /// <param name="session">会话</param>
        internal void CreateBackwardActivityTaskRepeatedSignTogetherMultipleInstance(ProcessInstanceEntity processInstance,
                                                                                     ActivityEntity backwardToTaskActvity,
                                                                                     ActivityInstanceEntity fromActivityInstance,
                                                                                     BackwardTypeEnum backwardType,
                                                                                     ActivityInstanceEntity previousMainInstance,
                                                                                     string transitionGUID,
                                                                                     TransitionTypeEnum transitionType,
                                                                                     TransitionFlyingTypeEnum flyingType,
                                                                                     ActivityResource activityResource,
                                                                                     IDbSession session)
        {
            //上一步节点是会签节点的退回处理
            //需要重新实例化会签节点上的所有办理人的任务
            //重新封装任务办理人为AssignedToUsers, AssignedToUsernames
            var performerList = AntiGenerateActivityPerformerList(previousMainInstance);

            activityResource.NextActivityPerformers.Clear();
            activityResource.NextActivityPerformers = new Dictionary <string, PerformerList>();
            activityResource.NextActivityPerformers.Add(backwardToTaskActvity.ActivityGUID, performerList);

            //重新生成会签节点的多实例数据
            CreateMultipleInstance(backwardToTaskActvity, processInstance, fromActivityInstance,
                                   transitionGUID, transitionType, flyingType, activityResource, session);
        }
        /// <summary>
        /// 创建退回时的流转节点对象、任务和转移数据
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="fromActivityInstance">运行节点实例</param>
        /// <param name="backwardType">退回类型</param>
        /// <param name="backMostPreviouslyActivityInstanceID">退回节点实例ID</param>
        /// <param name="transitionGUID">转移GUID</param>
        /// <param name="transitionType">转移类型</param>
        /// <param name="flyingType">跳跃类型</param>
        /// <param name="activityResource">资源</param>
        /// <param name="session">会话</param>
        internal void CreateBackwardActivityTaskTransitionInstance(WfProcessInstance processInstance,
                                                                   WfActivityInstance fromActivityInstance,
                                                                   BackwardTypeEnum backwardType,
                                                                   string backMostPreviouslyActivityInstanceID,
                                                                   string transitionGUID,
                                                                   TransitionTypeEnum transitionType,
                                                                   TransitionFlyingTypeEnum flyingType)
        {
            //实例化Activity
            var toActivityInstance = base.CreateBackwardToActivityInstanceObject(processInstance, fromActivityInstance,
                                                                                 backwardType,
                                                                                 backMostPreviouslyActivityInstanceID,
                                                                                 this.AppRunner);

            //进入准备运行状态
            toActivityInstance.ActivityState       = ActivityStateEnum.Ready.ToString();
            toActivityInstance.AssignedToUserIds   = base.GenerateActivityAssignedUserIDs(this.BackwardContext.BackwardToTaskActivity.Performers);
            toActivityInstance.AssignedToUserNames = base.GenerateActivityAssignedUserNames(this.BackwardContext.BackwardToTaskActivity.Performers);

            //插入活动实例数据
            base.ActivityInstanceManager.Insert(toActivityInstance);

            base.ReturnDataContext.ActivityInstanceUid = toActivityInstance.Fid;
            base.ReturnDataContext.ProcessInstanceUid  = toActivityInstance.ProcessInsUid;

            //插入任务数据
            base.CreateNewTask(toActivityInstance, this.BackwardContext.BackwardToTaskActivity);

            //插入转移数据
            base.InsertTransitionInstance(processInstance,
                                          transitionGUID,
                                          fromActivityInstance,
                                          toActivityInstance,
                                          transitionType,
                                          flyingType, AppRunner);
        }
        /// <summary>
        /// 创建活动实例的对象
        /// </summary>
        /// <param name="activity"></param>
        /// <param name="processInstance"></param>
        /// <returns></returns>
        internal ActivityInstanceEntity CreateBackwardActivityInstanceObject(string appName,
            string appInstanceID,
            int processInstanceID,
            ActivityEntity activity,
            BackwardTypeEnum backwardType,
            int backSrcActivityInstanceID,
            WfAppRunner runner)
        {
            ActivityInstanceEntity instance = new ActivityInstanceEntity();
            instance.ActivityGUID = activity.ActivityGUID;
            instance.ActivityName = activity.ActivityName;
            instance.ActivityType = (short)activity.ActivityType;
            instance.GatewayDirectionTypeID = (short)activity.GatewayDirectionType;
            instance.ProcessGUID = activity.ProcessGUID;
            instance.AppName = appName;
            instance.AppInstanceID = appInstanceID;
            instance.ProcessInstanceID = processInstanceID;
            instance.BackwardType = (short)backwardType;
            instance.BackSrcActivityInstanceID = backSrcActivityInstanceID;
            instance.TokensRequired = 1;
            instance.TokensHad = 1;
            instance.CreatedByUserID = runner.UserID;
            instance.CreatedByUserName = runner.UserName;
            instance.CreatedDateTime = System.DateTime.Now;
            instance.ActivityState = (short)ActivityStateEnum.Ready;
            instance.CanRenewInstance = 0;

            return instance;
        }
Beispiel #17
0
        /// <summary>
        /// 创建退回类型的活动实例对象
        /// </summary>
        /// <param name="processInstance">流程实例</param>
        /// <param name="backSrcActivityInstanceID">退回的活动实例ID</param>
        /// <param name="logonUser">登录用户</param>
        /// <returns></returns>
        protected ActivityInstanceEntity CreateBackwardToActivityInstanceObject(ProcessInstanceEntity processInstance,
            BackwardTypeEnum backwardType,
            int backSrcActivityInstanceID,
            WfAppRunner runner)
        {
            ActivityInstanceEntity entity = ActivityInstanceManager.CreateBackwardActivityInstanceObject(
                processInstance.AppName,
                processInstance.AppInstanceID,
                processInstance.ID,
                this.BackwardContext.BackwardToTaskActivity,
                backwardType,
                backSrcActivityInstanceID,
                runner);

            return entity;
        }
        /// <summary>
        /// 退回是会签情况下的处理:
        /// 要退回的节点是会签节点
        /// 1) 全部实例化会签节点下的多实例节点
        /// 2) 只取得办理完成的节点,而且保证CompleteOrder的唯一性
        /// </summary>
        /// <param name="processInstance"></param>
        /// <param name="originalBackwardToActivityInstance"></param>
        /// <param name="backwardType"></param>
        /// <param name="backSrcActivityInstanceID"></param>
        /// <param name="activityResource"></param>
        /// <param name="session"></param>
        internal void CreateBackwardActivityTaskRepeatedSignTogetherMultipleInstance(ProcessInstanceEntity processInstance,
            ActivityEntity backwardToTaskActvity,
            ActivityInstanceEntity fromActivityInstance,
            BackwardTypeEnum backwardType,
            ActivityInstanceEntity previousMainInstance,
            string transitionGUID,
            TransitionTypeEnum transitionType,
            TransitionFlyingTypeEnum flyingType,
            ActivityResource activityResource,
            IDbSession session)
        {
            //上一步节点是会签节点的退回处理
            //需要重新实例化会签节点上的所有办理人的任务
            //重新封装任务办理人为AssignedToUsers, AssignedToUsernames
            var performerList = AntiGenerateActivityPerformerList(previousMainInstance);

            activityResource.NextActivityPerformers.Clear();
            activityResource.NextActivityPerformers = new Dictionary<string, PerformerList>();
            activityResource.NextActivityPerformers.Add(backwardToTaskActvity.ActivityGUID, performerList);

            //重新生成会签节点的多实例数据
            CreateMultipleInstance(backwardToTaskActvity, processInstance, fromActivityInstance,
                transitionGUID, transitionType, flyingType, activityResource, session);
        }
        /// <summary>
        /// 退回是加签情况下的处理:
        /// 要退回的节点是加签节点
        /// 只实例化当初的加签主节点
        /// </summary>
        /// <param name="processInstance"></param>
        /// <param name="backwardToTaskActvity"></param>
        /// <param name="fromActivityInstance"></param>
        /// <param name="backwardType"></param>
        /// <param name="previousMainInstance"></param>
        /// <param name="transitionGUID"></param>
        /// <param name="transitionType"></param>
        /// <param name="flyingType"></param>
        /// <param name="activityResource"></param>
        /// <param name="session"></param>
        internal void CreateBackwardActivityTaskRepateSignForwardMainNodeOnly(ProcessInstanceEntity processInstance,
            ActivityEntity backwardToTaskActvity,
            ActivityInstanceEntity fromActivityInstance,
            BackwardTypeEnum backwardType,
            ActivityInstanceEntity previousMainInstance,
            string transitionGUID,
            TransitionTypeEnum transitionType,
            TransitionFlyingTypeEnum flyingType,
            ActivityResource activityResource,
            IDbSession session)
        {
            // 退回是加签情况下的处理:
            // 要退回的节点是加签节点
            // 只实例化当初的加签主节点
            //重新封装任务办理人为AssignedToUsers, AssignedToUsernames
            var performerList = AntiGenerateActivityPerformerList(previousMainInstance);

            activityResource.NextActivityPerformers.Clear();
            activityResource.NextActivityPerformers = new Dictionary<string, PerformerList>();
            activityResource.NextActivityPerformers.Add(backwardToTaskActvity.ActivityGUID, performerList);

            //实例化Activity
            var toActivityInstance = base.CreateBackwardToActivityInstanceObject(processInstance,
                backwardType,
                previousMainInstance.ID,
                activityResource.AppRunner);

            //进入准备运行状态
            toActivityInstance.ActivityState = (short)ActivityStateEnum.Ready;
            toActivityInstance.AssignedToUserIDs = previousMainInstance.AssignedToUserIDs;
            toActivityInstance.AssignedToUserNames = previousMainInstance.AssignedToUserNames;
            toActivityInstance.ComplexType = previousMainInstance.ComplexType;
            toActivityInstance.CompleteOrder = previousMainInstance.CompleteOrder;
            toActivityInstance.SignForwardType = previousMainInstance.SignForwardType;

            //插入活动实例数据
            base.ActivityInstanceManager.Insert(toActivityInstance,
                session);

            //插入任务数据
            base.CreateNewTask(toActivityInstance, activityResource, session);

            //插入转移数据
            base.InsertTransitionInstance(processInstance,
                transitionGUID,
                fromActivityInstance,
                toActivityInstance,
                transitionType,
                flyingType,
                activityResource.AppRunner,
                session);
        }