Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
                }
            }
        }
Esempio n. 4
0
        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);
                }
            }
        }