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