private static void PrepareUserTasks(UserTaskCollection tasks, string taskUrl, string taskTitle, string taskBody) { tasks.ForEach(task => { task.Body = taskBody; }); }
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(); } }
private void executor_PrepareNotifyTasks(WfExecutorDataContext dataContext, UserTaskCollection tasks) { GenericOpinion opnion = (GenericOpinion)dataContext["AbortOpinion"]; tasks.ForEach(t => { if (t.Body.IsNullOrEmpty()) { t.Body = opnion.Content; } }); }
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 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(); } }
private void eventContainer_BeforeDeleteUserTasks(UserTaskCollection tasks, Dictionary<object, object> context) { ExceptionHelper.FalseThrow<ArgumentNullException>(tasks != null, "tasks"); tasks.ForEach(task => TaskChangedUserIDs[task.SendToUserID] = task.SendToUserID); }
private static void eventContainer_DeleteUserAccomplishedTasks(UserTaskCollection tasks, Dictionary<object, object> context) { ExceptionHelper.FalseThrow<ArgumentNullException>(tasks != null, "tasks"); InSqlClauseBuilder builder = new InSqlClauseBuilder(); tasks.ForEach(u => builder.AppendItem(u.TaskID)); if (builder.Count > 0) { string sql = string.Format("DELETE WF.USER_ACCOMPLISHED_TASK WHERE TASK_GUID {0}", builder.ToSqlStringWithInOperator(TSqlBuilder.Instance)); DbHelper.RunSql(sql, GetConnectionName()); } }