Exemple #1
0
        public void PersistAction(WfActionParams actionParams)
        {
            if (actionParams.Context.StatusChangedProcesses != null)
            {
                List <object> result = new List <object>();

                actionParams.Context.StatusChangedProcesses.ForEach(p =>
                {
                    result.Add(new
                    {
                        ProcessId      = p.ID,
                        ProcessKey     = p.Descriptor.Key,
                        ProcessName    = p.Descriptor.Name,
                        Status         = p.Status.ToString(),
                        CreatorId      = p.Creator.ID,
                        CreatorName    = p.Creator.DisplayName,
                        Created        = p.StartTime,
                        TenantCode     = p.ApplicationRuntimeParameters.GetValue(UserTaskServicePlugin._TenantCode, string.Empty),
                        EmailCollector = p.ApplicationRuntimeParameters.GetValue(UserTaskServicePlugin._MailCollector, string.Empty)
                    });
                });

                if (result.Count >= 0)
                {
                    UserTaskServicePluginBroker.Instance.SyncProcess(JSONSerializerExecute.Serialize(result));
                }
            }
        }
        public override void PrepareAction(WfActionParams actionParams)
        {
            if (WfRuntime.ProcessContext.OriginalActivity != null)
            {
                UserTaskCollection currentProcessTasks =
                    UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("ACTIVITY_ID",
                                                                                         WfRuntime.ProcessContext.OriginalActivity.ID));

                //删除已经发送的待办
                WfRuntime.ProcessContext.DeletedUserTasks.CopyFromNotExistedTaskID(currentProcessTasks);

                //对被撤回的点发送通知
                this.PrepareNotifyTasks(WfRuntime.ProcessContext.OriginalActivity);

                IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

                //对当前的活动点发送待办
                if (currentActivity != null)
                {
                    this.PrepareMoveToTasks(currentActivity);
                }

                WfRuntime.ProcessContext.FireWithdrawPrepareAction();
            }
        }
        public void PersistAction(WfActionParams actionParams)
        {
            if (actionParams.Context.StatusChangedProcesses != null)
            {
                List<object> result = new List<object>();

                actionParams.Context.StatusChangedProcesses.ForEach(p =>
                {
                    result.Add(new
                    {
                        ProcessId = p.ID,
                        ProcessKey = p.Descriptor.Key,
                        ProcessName = p.Descriptor.Name,
                        Status = p.Status.ToString(),
                        CreatorId = p.Creator.ID,
                        CreatorName = p.Creator.DisplayName,
                        Created = p.StartTime,
                        TenantCode = p.ApplicationRuntimeParameters.GetValue(UserTaskServicePlugin._TenantCode, string.Empty),
                        EmailCollector = p.ApplicationRuntimeParameters.GetValue(UserTaskServicePlugin._MailCollector, string.Empty)
                    });
                });

                if (result.Count >= 0)
                    UserTaskServicePluginBroker.Instance.SyncProcess(JSONSerializerExecute.Serialize(result));
            }
        }
		public override void PrepareAction(WfActionParams actionParams)
		{
			IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

			if (currentActivity != null)
			{
				//找到当前流程所有的待办,然后删除,主要是为了删除通知
				UserTaskCollection currentActivityTasks =
						UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("ACTIVITY_ID",
							currentActivity.ID));

				WfRuntime.ProcessContext.DeletedUserTasks.CopyFrom(currentActivityTasks);

				//找到当前流程所有的已办,然后转为待办
				UserTaskCollection currentActivityAccomplishedTasks =
					UserTaskAdapter.Instance.GetUserAccomplishedTasks(UserTaskIDType.ActivityID, UserTaskFieldDefine.All, false, currentActivity.ID);

				WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(currentActivityAccomplishedTasks);

				if (currentActivity.Status == WfActivityStatus.Pending)
					WfRuntime.ProcessContext.PendingActivities.Add(currentActivity);

				WfRuntime.ProcessContext.FireRestoreProcessPrepareAction();
			}
		}
 public void PersistAction(WfActionParams actionParams)
 {
     actionParams.Context.StatusChangedProcesses.ForEach(process =>
     {
         Console.WriteLine("状态改变的流程{0},Status={1}", process.ID, process.Status);
     });
 }
Exemple #6
0
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

            if (currentActivity != null)
            {
                //找到当前流程所有的待办,然后删除,主要是为了删除通知
                UserTaskCollection currentActivityTasks =
                    UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("ACTIVITY_ID",
                                                                                         currentActivity.ID));

                WfRuntime.ProcessContext.DeletedUserTasks.CopyFrom(currentActivityTasks);

                //找到当前流程所有的已办,然后转为待办
                UserTaskCollection currentActivityAccomplishedTasks =
                    UserTaskAdapter.Instance.GetUserAccomplishedTasks(UserTaskIDType.ActivityID, UserTaskFieldDefine.All, false, currentActivity.ID);

                WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(currentActivityAccomplishedTasks);

                if (currentActivity.Status == WfActivityStatus.Pending)
                {
                    WfRuntime.ProcessContext.PendingActivities.Add(currentActivity);
                }

                WfRuntime.ProcessContext.FireRestoreProcessPrepareAction();
            }
        }
Exemple #7
0
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

            if (currentActivity != null)
            {
                //找到当前流程所有的待办,然后转为已办
                UserTaskCollection currentProcessTasks =
                    UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("PROCESS_ID",
                                                                                         currentActivity.Process.ID));

                UserTaskCollection toAccomplishedTasks = new UserTaskCollection();
                UserTaskCollection toDeletedTasks      = new UserTaskCollection();

                currentProcessTasks.ForEach(u =>
                {
                    if (u.Status == TaskStatus.Ban)
                    {
                        toAccomplishedTasks.Add(u);
                    }
                    else
                    {
                        toDeletedTasks.Add(u);
                    }
                });

                WfRuntime.ProcessContext.DeletedUserTasks.CopyFromNotExistedTaskID(toDeletedTasks);

                UserTaskCollection userTasksInContext = RemoveTasksInContext(actionParams);

                //将上下文中的待办转到已办中
                userTasksInContext.ForEach(t => toAccomplishedTasks.Add(t));

                //将上下文中标记为已删除的从准备转已办的记录中删除
                toAccomplishedTasks.RemoveExistedTasks(WfRuntime.ProcessContext.DeletedUserTasks);

                //将待办转到已办中,便于事后恢复
                toAccomplishedTasks.ForEach(u => LeaveActivityUserTaskAction.ChangeUserTaskToAccomplishedTasks(currentActivity, u));

                WfRuntime.ProcessContext.AccomplishedUserTasks.CopyFromNotExistedTaskID(toAccomplishedTasks);

                //暂时对当前活动的处理人发送通知
                UserTaskCollection notifyTasks = BuildUserNotifiesFromActivity(currentActivity);
                AppendResourcesToNotifiers(currentActivity, notifyTasks, currentActivity.Descriptor.Process.CancelEventReceivers);

                foreach (UserTask task in notifyTasks)
                {
                    task.Status    = TaskStatus.Yue;
                    task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                                                          currentActivity.Process.Descriptor.Properties.GetValue("DefaultCancelTaskPrefix", "流程被取消:")) + task.TaskTitle;
                }

                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);

                WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());
                WfRuntime.ProcessContext.AbortedProcesses.AddOrReplace(currentActivity.Process);
                WfRuntime.ProcessContext.FireCancelProcessPrepareAction();
            }
        }
        public override void PrepareAction(WfActionParams actionParams)
        {
            if (WfRuntime.ProcessContext.OriginalActivity != null)
            {
                IWfActivity originalActivity = WfRuntime.ProcessContext.OriginalActivity;

                //找到当前环节所有的待办,然后转为已办
                UserTaskCollection currentActTasks =
                    UserTaskAdapter.Instance.LoadUserTasks(builder =>
                        {
                            builder.AppendItem("ACTIVITY_ID", originalActivity.ID);
                            builder.AppendItem("STATUS", (int)TaskStatus.Ban);
                        });

                //从上下文中找到需要转已办的记录
                currentActTasks.CopyFrom(WfRuntime.ProcessContext.MoveToUserTasks.FindAll(
                    u => string.Compare(u.ActivityID, originalActivity.ID, true) == 0));

                currentActTasks.Sort((u1, u2) => u1.Level - u2.Level);

                if (currentActTasks.Count == 0)
                {
                    UserTaskCollection preparedUserTasks = (UserTaskCollection)originalActivity.Context["UserTasks"];

                    if (preparedUserTasks != null)
                    {
                        WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(preparedUserTasks);
                        currentActTasks = preparedUserTasks;
                    }
                }

                currentActTasks.ForEach(u =>
                {
                    if (u.Status == TaskStatus.Ban)
                        ChangeUserTaskToAccomplishedTasks(originalActivity, u);
                    else
                        WfRuntime.ProcessContext.DeletedUserTasks.Add(u);
                });

                UserTaskCollection notifyTasks = new UserTaskCollection();

                AppendResourcesToNotifiers(originalActivity, notifyTasks, originalActivity.Descriptor.LeaveEventReceivers);

                foreach (UserTask task in notifyTasks)
                {
                    task.Status = TaskStatus.Yue;
                    task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                        originalActivity.Process.Descriptor.Properties.GetValue("DefaultLeaveTaskPrefix", "离开活动:")) + task.TaskTitle;

                    task.Context["ExtraOperationType"] = WfControlSubOperationType.Leave;
                }

                WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());
                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);

                WfRuntime.ProcessContext.FireLeaveActivityPrepareAction();
            }
        }
Exemple #9
0
        public virtual void PrepareAction(WfActionParams actionParams)
        {
            if (WfRuntime.ProcessContext.EnableServiceCall)
            {
                //调用需要在非持久化时调用的服务
                this.InvokeServiceOperations(this.GetAllOperationsBeforePersist());

                //将需要在持久化时调用的服务记录下来
                WfRuntime.ProcessContext.ServiceOperations.CopyFrom(this.GetAllOperationsWhenPersist());
            }
        }
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

            if (currentActivity != null)
            {
                //找到当前流程所有的待办,然后转为已办
                UserTaskCollection currentProcessTasks =
                        UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("PROCESS_ID",
                            currentActivity.Process.ID));

                WfRuntime.ProcessContext.DeletedUserTasks.CopyFromNotExistedTaskID(currentProcessTasks);

                UserTaskCollection toAccomplishedTasks = new UserTaskCollection();

                currentProcessTasks.ForEach(u =>
                {
                    if (u.Status == TaskStatus.Ban)
                        toAccomplishedTasks.Add(u);
                });

                UserTaskCollection userTasksInContext = RemoveTasksInContext(actionParams);

                //将上下文中的待办转到已办中
                userTasksInContext.ForEach(t => toAccomplishedTasks.Add(t));

                //将上下文中标记为已删除的从准备转已办的记录中删除
                toAccomplishedTasks.RemoveExistedTasks(WfRuntime.ProcessContext.DeletedUserTasks);

                //将待办转到已办中,便于事后恢复
                toAccomplishedTasks.ForEach(u => LeaveActivityUserTaskAction.ChangeUserTaskToAccomplishedTasks(currentActivity, u));

                WfRuntime.ProcessContext.AccomplishedUserTasks.CopyFromNotExistedTaskID(toAccomplishedTasks);

                //暂时对当前活动的处理人发送通知
                UserTaskCollection notifyTasks = BuildUserNotifiesFromActivity(currentActivity);
                AppendResourcesToNotifiers(currentActivity, notifyTasks, currentActivity.Descriptor.Process.CancelEventReceivers);

                foreach (UserTask task in notifyTasks)
                {
                    task.Status = TaskStatus.Yue;
                    task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                        currentActivity.Process.Descriptor.Properties.GetValue("DefaultCancelTaskPrefix", "流程被取消:")) + task.TaskTitle;
                }

                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);

                WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());
                WfRuntime.ProcessContext.AbortedProcesses.AddOrReplace(currentActivity.Process);
                WfRuntime.ProcessContext.FireCancelProcessPrepareAction();
            }
        }
        public override void AfterWorkflowPersistAction(WfActionParams actionParams)
        {
            WfRuntime.ProcessContext.FireLeaveActivityPersistAction();

            WfRuntime.ProcessContext.MoveToUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.MoveToUserTasks);

            WfRuntime.ProcessContext.NotifyUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.NotifyUserTasks);

            UserTaskAdapter.Instance.SetUserTasksAccomplished(WfRuntime.ProcessContext.AccomplishedUserTasks);
            UserTaskAdapter.Instance.DeleteUserTasks(WfRuntime.ProcessContext.DeletedUserTasks);

            this.ClearCache();
        }
        public override void AfterWorkflowPersistAction(WfActionParams actionParams)
        {
            WfRuntime.ProcessContext.FireLeaveActivityPersistAction();

            WfRuntime.ProcessContext.MoveToUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.MoveToUserTasks);

            WfRuntime.ProcessContext.NotifyUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.NotifyUserTasks);

            UserTaskAdapter.Instance.SetUserTasksAccomplished(WfRuntime.ProcessContext.AccomplishedUserTasks);
            UserTaskAdapter.Instance.DeleteUserTasks(WfRuntime.ProcessContext.DeletedUserTasks);

            this.ClearCache();
        }
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

            if (currentActivity != null)
            {
                if (WfRuntime.ProcessContext.TargetActivityCanMoveTo && currentActivity.Status == WfActivityStatus.Running)
                {
                    UserTaskCollection userTasks = BuildUserTasksFromActivity(currentActivity);

                    UserTaskCollection notifyTasks = new UserTaskCollection();

                    AppendResourcesToNotifiers(currentActivity, notifyTasks, currentActivity.Descriptor.EnterEventReceivers);

                    foreach (UserTask task in notifyTasks)
                    {
                        task.Status    = TaskStatus.Yue;
                        task.TaskTitle = task.TaskTitle;
                        task.Context["ExtraOperationType"] = WfControlSubOperationType.Enter;
                    }

                    WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());

                    //当从数据库中加载流程时,LoadingType为DataLoadingType.External。
                    if (CanAutoSendUserTask(currentActivity))
                    {
                        WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(userTasks);
                        WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);
                    }
                    else
                    {
                        currentActivity.Context["UserTasks"]   = userTasks;
                        currentActivity.Context["NotifyTasks"] = notifyTasks;
                    }

                    if (currentActivity.Status == WfActivityStatus.Completed)
                    {
                        WfRuntime.ProcessContext.ClosedProcesses.AddOrReplace(currentActivity.Process);
                    }
                }
                else
                {
                    WfRuntime.ProcessContext.PendingActivities.Add(currentActivity);
                }

                WfRuntime.ProcessContext.FireEnterActivityPrepareAction();
            }
        }
Exemple #14
0
        public override void AfterWorkflowPersistAction(WfActionParams actionParams)
        {
            WfRuntime.ProcessContext.FireCancelProcessPersistAction();

            WfRuntime.ProcessContext.NotifyUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.NotifyUserTasks);
            UserTaskAdapter.Instance.SetUserTasksAccomplished(WfRuntime.ProcessContext.AccomplishedUserTasks);
            UserTaskAdapter.Instance.DeleteUserTasks(WfRuntime.ProcessContext.DeletedUserTasks);

            AppCommonInfoAdapter.Instance.UpdateProcessStatus(WfRuntime.ProcessContext.AffectedProcesses.FindAll(p => p.IsApprovalRootProcess));

            WfPendingActivityInfoAdapter.Instance.DeleteByProcesses(WfRuntime.ProcessContext.AbortedProcesses);
            WfPendingActivityInfoAdapter.Instance.DeleteByProcesses(WfRuntime.ProcessContext.ClosedProcesses);

            this.ClearCache();
        }
        public override void AfterWorkflowPersistAction(WfActionParams actionParams)
        {
            WfRuntime.ProcessContext.FireWithdrawPersistAction();

            WfRuntime.ProcessContext.MoveToUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.MoveToUserTasks);

            WfRuntime.ProcessContext.NotifyUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.NotifyUserTasks);

            UserTaskAdapter.Instance.DeleteUserTasks(WfRuntime.ProcessContext.DeletedUserTasks);

            AppCommonInfoAdapter.Instance.UpdateProcessStatus(WfRuntime.ProcessContext.AffectedProcesses.FindAll(p => p.IsApprovalRootProcess));

            this.ClearCache();
        }
        public override void AfterWorkflowPersistAction(WfActionParams actionParams)
        {
            WfRuntime.ProcessContext.FireWithdrawPersistAction();

            WfRuntime.ProcessContext.MoveToUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.MoveToUserTasks);

            WfRuntime.ProcessContext.NotifyUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.NotifyUserTasks);

            UserTaskAdapter.Instance.DeleteUserTasks(WfRuntime.ProcessContext.DeletedUserTasks);

            AppCommonInfoAdapter.Instance.UpdateProcessStatus(WfRuntime.ProcessContext.AffectedProcesses.FindAll(p => p.IsApprovalRootProcess));

            this.ClearCache();
        }
        public override void AfterWorkflowPersistAction(WfActionParams actionParams)
        {
            WfRuntime.ProcessContext.FireCancelProcessPersistAction();

            WfRuntime.ProcessContext.NotifyUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.NotifyUserTasks);
            UserTaskAdapter.Instance.SetUserTasksAccomplished(WfRuntime.ProcessContext.AccomplishedUserTasks);
            UserTaskAdapter.Instance.DeleteUserTasks(WfRuntime.ProcessContext.DeletedUserTasks);

            AppCommonInfoAdapter.Instance.UpdateProcessStatus(WfRuntime.ProcessContext.AffectedProcesses.FindAll(p => p.IsApprovalRootProcess));

            WfPendingActivityInfoAdapter.Instance.DeleteByProcesses(WfRuntime.ProcessContext.AbortedProcesses);
            WfPendingActivityInfoAdapter.Instance.DeleteByProcesses(WfRuntime.ProcessContext.ClosedProcesses);

            this.ClearCache();
        }
		public override void PrepareAction(WfActionParams actionParams)
		{
			IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

			if (currentActivity != null)
			{
				if (WfRuntime.ProcessContext.TargetActivityCanMoveTo && currentActivity.Status == WfActivityStatus.Running)
				{
					UserTaskCollection userTasks = BuildUserTasksFromActivity(currentActivity);

					UserTaskCollection notifyTasks = new UserTaskCollection();

					AppendResourcesToNotifiers(currentActivity, notifyTasks, currentActivity.Descriptor.EnterEventReceivers);

					foreach (UserTask task in notifyTasks)
					{
						task.Status = TaskStatus.Yue;
						task.TaskTitle = task.TaskTitle;
                        task.Context["ExtraOperationType"] = WfControlSubOperationType.Enter;
					}

					WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());

					//当从数据库中加载流程时,LoadingType为DataLoadingType.External。
					if (CanAutoSendUserTask(currentActivity))
					{
						WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(userTasks);
						WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);
					}
					else
					{
						currentActivity.Context["UserTasks"] = userTasks;
						currentActivity.Context["NotifyTasks"] = notifyTasks;
					}

					if (currentActivity.Status == WfActivityStatus.Completed)
						WfRuntime.ProcessContext.ClosedProcesses.AddOrReplace(currentActivity.Process);
				}
				else
				{
					WfRuntime.ProcessContext.PendingActivities.Add(currentActivity);
				}

				WfRuntime.ProcessContext.FireEnterActivityPrepareAction();
			}
		}
Exemple #19
0
        public override void AfterWorkflowPersistAction(WfActionParams actionParams)
        {
            WfRuntime.ProcessContext.FireRestoreProcessPersistAction();

            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.MoveToUserTasks);
            UserTaskAdapter.Instance.DeleteUserTasks(WfRuntime.ProcessContext.DeletedUserTasks);

            AppCommonInfoAdapter.Instance.UpdateProcessStatus(WfRuntime.ProcessContext.AffectedProcesses.FindAll(p => p.IsApprovalRootProcess));

            WfRuntime.ProcessContext.PendingActivities.ForEach(act =>
            {
                WfPendingActivityInfo data = new WfPendingActivityInfo(act);

                WfPendingActivityInfoAdapter.Instance.Update(data);
            });

            ClearCache();
        }
        public override void AfterWorkflowPersistAction(WfActionParams actionParams)
		{
			WfRuntime.ProcessContext.FireRestoreProcessPersistAction();

			UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.MoveToUserTasks);
			UserTaskAdapter.Instance.DeleteUserTasks(WfRuntime.ProcessContext.DeletedUserTasks);

			AppCommonInfoAdapter.Instance.UpdateProcessStatus(WfRuntime.ProcessContext.AffectedProcesses.FindAll(p => p.IsApprovalRootProcess));

			WfRuntime.ProcessContext.PendingActivities.ForEach(act =>
			{
				WfPendingActivityInfo data = new WfPendingActivityInfo(act);

				WfPendingActivityInfoAdapter.Instance.Update(data);
			});

			ClearCache();
		}
Exemple #21
0
        /// <summary>
        /// 删除当前在上下文中的待办
        /// </summary>
        /// <param name="actionParams"></param>
        /// <returns></returns>
        private static UserTaskCollection RemoveTasksInContext(WfActionParams actionParams)
        {
            UserTaskCollection result = new UserTaskCollection();

            actionParams.Context.MoveToUserTasks.Remove(t =>
            {
                bool remove = string.Compare(t.ProcessID, actionParams.Context.CurrentProcess.ID, true) == 0;

                if (remove)
                {
                    result.Add(t);
                }

                return(remove);
            });

            return(result);
        }
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

            if (currentActivity != null)
            {
                //暂时对当前活动的处理人发送通知
                UserTaskCollection notifyTasks = BuildUserNotifiesFromActivity(currentActivity);
                AppendResourcesToNotifiers(currentActivity, notifyTasks, currentActivity.Descriptor.Process.CompleteEventReceivers);

                foreach (UserTask task in notifyTasks)
                {
                    task.Status = TaskStatus.Yue;
                    task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                        currentActivity.Process.Descriptor.Properties.GetValue("DefaultCompleteTaskPrefix", "流程已办结:")) + task.TaskTitle;
                }

                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);
                WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());
            }
        }
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

            if (currentActivity != null)
            {
                //暂时对当前活动的处理人发送通知
                UserTaskCollection notifyTasks = BuildUserNotifiesFromActivity(currentActivity);
                AppendResourcesToNotifiers(currentActivity, notifyTasks, currentActivity.Descriptor.Process.CompleteEventReceivers);

                foreach (UserTask task in notifyTasks)
                {
                    task.Status    = TaskStatus.Yue;
                    task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                                                          currentActivity.Process.Descriptor.Properties.GetValue("DefaultCompleteTaskPrefix", "流程已办结:")) + task.TaskTitle;
                }

                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);
                WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());
            }
        }
        public override void PrepareAction(WfActionParams actionParams)
        {
            if (WfRuntime.ProcessContext.OriginalActivity != null)
            {
                UserTaskCollection currentProcessTasks =
                            UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("ACTIVITY_ID",
                                WfRuntime.ProcessContext.OriginalActivity.ID));

                //删除已经发送的待办
                WfRuntime.ProcessContext.DeletedUserTasks.CopyFromNotExistedTaskID(currentProcessTasks);

                //对被撤回的点发送通知
                this.PrepareNotifyTasks(WfRuntime.ProcessContext.OriginalActivity);

                IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

                //对当前的活动点发送待办
                if (currentActivity != null)
                    this.PrepareMoveToTasks(currentActivity);

                WfRuntime.ProcessContext.FireWithdrawPrepareAction();
            }
        }
        public override void AfterWorkflowPersistAction(WfActionParams actionParams)
		{
			WfRuntime.ProcessContext.FireEnterActivityPersistAction();

			WfRuntime.ProcessContext.MoveToUserTasks.DistinctByActivityUserAndStatus();
			UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.MoveToUserTasks);

			WfRuntime.ProcessContext.NotifyUserTasks.DistinctByActivityUserAndStatus();
			UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.NotifyUserTasks);

			WfPendingActivityInfoAdapter.Instance.DeleteByProcesses(WfRuntime.ProcessContext.AbortedProcesses);
			WfPendingActivityInfoAdapter.Instance.DeleteByProcesses(WfRuntime.ProcessContext.ClosedProcesses);

			AppCommonInfoAdapter.Instance.UpdateProcessStatus(WfRuntime.ProcessContext.AffectedProcesses.FindAll(p => p.IsApprovalRootProcess));

			WfRuntime.ProcessContext.PendingActivities.ForEach(act =>
			{
				WfPendingActivityInfo data = new WfPendingActivityInfo(act);

				WfPendingActivityInfoAdapter.Instance.Update(data);
			});

			this.ClearCache();
		}
        public override void AfterWorkflowPersistAction(WfActionParams actionParams)
        {
            WfRuntime.ProcessContext.FireEnterActivityPersistAction();

            WfRuntime.ProcessContext.MoveToUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.MoveToUserTasks);

            WfRuntime.ProcessContext.NotifyUserTasks.DistinctByActivityUserAndStatus();
            UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.NotifyUserTasks);

            WfPendingActivityInfoAdapter.Instance.DeleteByProcesses(WfRuntime.ProcessContext.AbortedProcesses);
            WfPendingActivityInfoAdapter.Instance.DeleteByProcesses(WfRuntime.ProcessContext.ClosedProcesses);

            AppCommonInfoAdapter.Instance.UpdateProcessStatus(WfRuntime.ProcessContext.AffectedProcesses.FindAll(p => p.IsApprovalRootProcess));

            WfRuntime.ProcessContext.PendingActivities.ForEach(act =>
            {
                WfPendingActivityInfo data = new WfPendingActivityInfo(act);

                WfPendingActivityInfoAdapter.Instance.Update(data);
            });

            this.ClearCache();
        }
Exemple #27
0
 public virtual void PrepareAction(WfActionParams actionParams)
 {
 }
        public override void PrepareAction(WfActionParams actionParams)
        {
            if (WfRuntime.ProcessContext.OriginalActivity != null)
            {
                IWfActivity originalActivity = WfRuntime.ProcessContext.OriginalActivity;

                //找到当前环节所有的待办,然后转为已办
                UserTaskCollection currentActTasks =
                    UserTaskAdapter.Instance.LoadUserTasks(builder =>
                {
                    builder.AppendItem("ACTIVITY_ID", originalActivity.ID);
                    builder.AppendItem("STATUS", (int)TaskStatus.Ban);
                });

                //从上下文中找到需要转已办的记录
                currentActTasks.CopyFrom(WfRuntime.ProcessContext.MoveToUserTasks.FindAll(
                                             u => string.Compare(u.ActivityID, originalActivity.ID, true) == 0));

                currentActTasks.Sort((u1, u2) => u1.Level - u2.Level);

                if (currentActTasks.Count == 0)
                {
                    UserTaskCollection preparedUserTasks = (UserTaskCollection)originalActivity.Context["UserTasks"];

                    if (preparedUserTasks != null)
                    {
                        WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(preparedUserTasks);
                        currentActTasks = preparedUserTasks;
                    }
                }

                currentActTasks.ForEach(u =>
                {
                    if (u.Status == TaskStatus.Ban)
                    {
                        ChangeUserTaskToAccomplishedTasks(originalActivity, u);
                    }
                    else
                    {
                        WfRuntime.ProcessContext.DeletedUserTasks.Add(u);
                    }
                });

                UserTaskCollection notifyTasks = new UserTaskCollection();

                AppendResourcesToNotifiers(originalActivity, notifyTasks, originalActivity.Descriptor.LeaveEventReceivers);

                foreach (UserTask task in notifyTasks)
                {
                    task.Status    = TaskStatus.Yue;
                    task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                                                          originalActivity.Process.Descriptor.Properties.GetValue("DefaultLeaveTaskPrefix", "离开活动:")) + task.TaskTitle;

                    task.Context["ExtraOperationType"] = WfControlSubOperationType.Leave;
                }

                WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());
                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);

                WfRuntime.ProcessContext.FireLeaveActivityPrepareAction();
            }
        }
Exemple #29
0
        public virtual void PersistAction(WfActionParams actionParams)
        {
            this.InvokeServiceOperations(WfRuntime.ProcessContext.ServiceOperations);

            this.ClearCache();
        }
Exemple #30
0
 public void AfterWorkflowPersistAction(WfActionParams actionParams)
 {
     Console.WriteLine("after workflow persist action");
 }
        /// <summary>
        /// 删除当前在上下文中的待办
        /// </summary>
        /// <param name="actionParams"></param>
        /// <returns></returns>
        private static UserTaskCollection RemoveTasksInContext(WfActionParams actionParams)
        {
            UserTaskCollection result = new UserTaskCollection();

            actionParams.Context.MoveToUserTasks.Remove(t =>
            {
                bool remove = string.Compare(t.ProcessID, actionParams.Context.CurrentProcess.ID, true) == 0;

                if (remove)
                    result.Add(t);

                return remove;
            });

            return result;
        }
Exemple #32
0
        /// <summary>
        /// 保存一个流程的数据,保存成功后,清除所有的缓存
        /// </summary>
        /// <param name="process"></param>
        public static void PersistWorkflows()
        {
            IWfProcessPersistManager persistManager = WorkflowSettings.GetConfig().GetPersistManager();

            WfActionParams actionParams = new WfActionParams(WfRuntime.ProcessContext);

            WfRuntime.ProcessContext.Acl.Distinct((a1, a2) => string.Compare(a1.ResourceID, a2.ResourceID, true) == 0 &&
                    string.Compare(a1.ObjectID, a2.ObjectID, true) == 0);

            PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("PersistWorkflows", () =>
                {
                    CommonInfoMappingCollection cimItems = new CommonInfoMappingCollection();

                    cimItems.FromProcesses(WfRuntime.ProcessContext.AffectedProcesses);

                    using (TransactionScope scope = TransactionScopeFactory.Create())
                    {
                        PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("DeletePendingActivities",
                            () => WfPendingActivityInfoAdapter.Instance.Delete(WfRuntime.ProcessContext.ReleasedPendingActivities));

                        PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("Update Acl",
                            () => WfAclAdapter.Instance.Update(WfRuntime.ProcessContext.Acl));

                        PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("Update CommonInfoMapping",
                            () => CommonInfoMappingAdapter.Instance.Update(cimItems));

                        //保存流程后再执行Actions
                        PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("PersistActions",
                            () => WfRuntime.ProcessContext.AffectedActions.PersistActions(actionParams));

                        ProcessProgress.Current.MaxStep += WfRuntime.ProcessContext.AffectedProcesses.Count;
                        ProcessProgress.Current.Response();

                        int i = 0;
                        int total = WfRuntime.ProcessContext.AffectedProcesses.Count;

                        WfRuntime.ProcessContext.AffectedProcesses.ForEach(process =>
                            {
                                PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration(
                                    string.Format("PersistWorkflow: {0}", process.ID),
                                    () => persistManager.SaveProcess(process));

                                i++;
                                ProcessProgress.Current.Increment();

                                ProcessProgress.Current.StatusText = Translator.Translate(Define.DefaultCulture, "保存了{0}/{1}条流程数据", i, total);
                                ProcessProgress.Current.Response();
                            });

                        //保存流程后再执行Actions
                        PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("AfterWorkflowPersistAction",
                            () => WfRuntime.ProcessContext.AffectedActions.AfterWorkflowPersistAction(actionParams));

                        ProcessProgress.Current.StatusText = string.Empty;
                        ProcessProgress.Current.Response();

                        scope.Complete();
                    }
                });

            WfRuntime.ClearCache();
        }
Exemple #33
0
        private static void RegisterAndPrepareActions(WfActionCollection actions)
        {
            WfActionParams actionParams = new WfActionParams(WfRuntime.ProcessContext);

            actions.PrepareActions(actionParams);
            WfRuntime.ProcessContext.AffectedActions.CopyFrom(actions);
        }
 public virtual void AfterWorkflowPersistAction(WfActionParams actionParams)
 {
 }
        public override void PrepareAction(WfActionParams actionParams)
        {
            this._Process = WfRuntime.ProcessContext.CurrentProcess;

            base.PrepareAction(actionParams);
        }
Exemple #36
0
 public virtual void PersistAction(WfActionParams actionParams)
 {
 }
Exemple #37
0
 public virtual void AfterWorkflowPersistAction(WfActionParams actionParams)
 {
 }
Exemple #38
0
 public void PersistAction(WfActionParams actionParams)
 {
     Console.WriteLine("persist action");
 }
 public override void AfterWorkflowPersistAction(WfActionParams actionParams)
 {
     WfRuntime.ProcessContext.NotifyUserTasks.DistinctByActivityUserAndStatus();
     UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.NotifyUserTasks);
 }
        public override void PrepareAction(WfActionParams actionParams)
        {
            this._Process = WfRuntime.ProcessContext.CurrentProcess;

            base.PrepareAction(actionParams);
        }
        public override void PrepareAction(WfActionParams actionParams)
        {
            this._OriginalActivity = actionParams.Context.CurrentActivity;

            base.PrepareAction(actionParams);
        }
Exemple #42
0
 public void PrepareAction(WfActionParams actionParams)
 {
     Console.WriteLine("prepare action");
 }
 public override void AfterWorkflowPersistAction(WfActionParams actionParams)
 {
     WfRuntime.ProcessContext.NotifyUserTasks.DistinctByActivityUserAndStatus();
     UserTaskAdapter.Instance.SendUserTasks(WfRuntime.ProcessContext.NotifyUserTasks);
 }
 public virtual void PrepareAction(WfActionParams actionParams)
 {
 }
Exemple #45
0
        public override void PrepareAction(WfActionParams actionParams)
        {
            this._OriginalActivity = actionParams.Context.CurrentActivity;

            base.PrepareAction(actionParams);
        }
        public virtual void PersistAction(WfActionParams actionParams)
        {

        }