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(); } }
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(); } }
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(); } }
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) { 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(); } }