private WfProcessCollection GetDeletedProcesses(WfActivityCollection deletedActivities) { WfProcessCollection deletedProcesses = new WfProcessCollection(); foreach (IWfActivity activity in deletedActivities) { if (activity is IWfAnchorActivity) { foreach (IWfOperation operation in ((IWfAnchorActivity)activity).Operations) { foreach (WfBranchProcessInfo branchProcessInfo in operation.Branches) { deletedProcesses.Add(branchProcessInfo.Process); WfProcessCollection deletedSubProcesses = GetDeletedProcesses(branchProcessInfo.Process.Activities); foreach (IWfProcess subProcess in deletedSubProcesses) { deletedProcesses.Add(subProcess); } } } } } return(deletedProcesses); }
private WfBranchProcessInfoCollection LoadBranches() { WfBranchProcessInfoCollection resultCollection = new WfBranchProcessInfoCollection(); IWorkflowReader persistProcess = WorkflowSettings.GetConfig().Reader; List <string> branchProcessIDs = persistProcess.GetBranchProcessIDsByOperationID(this.ID); WfProcessCollection processes = WfRuntime.GetWfProcesses(branchProcessIDs.ToArray()); IWfProcess[] processesArray = new IWfProcess[processes.Count]; int i = 0; foreach (IWfProcess process in processes) { ((WfBranchProcessInfo)process.EntryInfo).OwnerOperation = this; processesArray[i++] = process; } //按照子流程的序号排序 Array.Sort <IWfProcess>(processesArray, delegate(IWfProcess process1, IWfProcess process2) { return(Math.Sign(process1.EntryInfo.Sequence - process2.EntryInfo.Sequence)); }); foreach (IWfProcess process in processesArray) { resultCollection.Add(process.EntryInfo); } return(resultCollection); }
public void Withdraw(IWfActivity destinationActivity) { ExceptionHelper.FalseThrow <ArgumentNullException>(destinationActivity != null, "destinationActivity"); lock (this) { ExceptionHelper.FalseThrow <WfEngineException>(this.Activities.ContainsKey(destinationActivity.ID), Resource.InvalidWithdrawActivityID, destinationActivity.ID); if (this.CurrentActivity != destinationActivity && string.Compare(this.CurrentActivity.ID, destinationActivity.ID, true) != 0) { WfActivityCollection deletedActivities = DoWithdraw(destinationActivity); WfProcessCollection deletedProcesses = GetDeletedProcesses(deletedActivities); ((WfActivityBase)destinationActivity).Status = WfActivityStatus.Running; this.Status = WfProcessStatus.Running; WorkflowSettings.GetConfig().EnqueueWorkItemExecutor.EnqueueWithdrawWorkItem( destinationActivity, deletedActivities, deletedProcesses); } } }
private static void FillProcessesFromPersistence(WfProcessCollection processes, List <string> notInCacheIDs) { if (notInCacheIDs.Count > 0) { IWorkflowReader persistProcess = WorkflowSettings.GetConfig().Reader; WfProcessCollection tempCollection = persistProcess.LoadProcesses(notInCacheIDs.ToArray()); foreach (IWfProcess tempProcess in tempCollection) { processes.Add(tempProcess); AddProcessToCache(tempProcess.ID, tempProcess); } } }