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.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 static void ProcessPendingActivity(WfPendingActivityInfo pendingActivityInfo) { pendingActivityInfo.NullCheck("pendingActivityInfo"); IWfProcess process = GetProcessByActivityID(pendingActivityInfo.ActivityID); bool needToDeletePendingInfo = true; if (process != null) { IWfActivity currentActivity = process.CurrentActivity; process.ProcessPendingActivity(); if (currentActivity != null) { needToDeletePendingInfo = false; //已经不存在Pending状态 if (currentActivity.Status != WfActivityStatus.Pending) { WfRuntime.ProcessContext.AffectedProcesses.AddOrReplace(process); using (TransactionScope scope = TransactionScopeFactory.Create()) { WfRuntime.PersistWorkflows(); WfPendingActivityInfoAdapter.Instance.Delete(pendingActivityInfo); scope.Complete(); } } } } if (needToDeletePendingInfo) { WfPendingActivityInfoAdapter.Instance.Delete(pendingActivityInfo); } }