/// <summary> /// 流转时,设置目标节点的状态,包括启动分支流程等操作。 /// </summary> /// <param name="nextActivity"></param> /// <param name="transferParams"></param> private void ExecuteNextActivityActionsAndSetStatus(WfActivityBase nextActivity, WfTransferParams transferParams) { PrepareActivityAssigneesFromTransferParams(nextActivity, transferParams); CalculateActivityCompleteTime(nextActivity.Descriptor); FillAclInContext(this.SearchID, nextActivity); //启动分支流程 transferParams.BranchTransferParams.ForEach(b => nextActivity.StartupBranchProcesses(b)); if (transferParams.BranchTransferParams.Count == 0 && WfRuntime.ProcessContext.TargetActivityCanMoveTo && nextActivity.Descriptor.IsConditionActivity == false) { nextActivity.Status = WfActivityStatus.Running; } else { nextActivity.Status = WfActivityStatus.Pending; } WfRuntime.ProcessContext.ResetContextByProcess(this); RegisterAndPrepareActions(nextActivity.EnterActions); if (nextActivity.Descriptor.ActivityType == WfActivityType.CompletedActivity) { nextActivity.Status = WfActivityStatus.Completed; this.Status = WfProcessStatus.Completed; this.EndTime = DateTime.Now; WfRuntime.ProcessContext.ResetContextByProcess(this); this._ElapsedActivities.Add(nextActivity); RegisterAndPrepareActions(nextActivity.LeaveActions); RegisterAndPrepareActions(this.CompleteProcessActions); ExecuteNextSerialProcess(this.EntryInfo); } SyncUrlsInAssigneesFromTasks(nextActivity, WfRuntime.ProcessContext.MoveToUserTasks); this.ProcessPendingActivity(); }