/// <summary> /// 启动一个模版(组)下的一组分支流程,在服务模式下,可能返回多个流程。其它情况返回单个流程 /// </summary> /// <param name="branchTransferParams"></param> /// <param name="group"></param> /// <param name="index"></param> /// <returns></returns> private WfProcessCollection StartupBranchProcess(WfBranchProcessTransferParams branchTransferParams, IWfBranchProcessGroup group, int index) { WfProcessCollection processes = null; if (branchTransferParams.Template.OperationDefinition == null) { WfProcessStartupParams startupParams = PrepareOneBranchProcessStartupParams(branchTransferParams, group, index); startupParams.CheckStartProcessUserPermission = false; processes = new WfProcessCollection(); processes.Add(WfRuntime.StartWorkflow(startupParams)); } else { if (WfRuntime.ProcessContext.EnableServiceCall) { WfServiceStartupProcessParams startupParams = PrepareOneServiceStartupProcessParams(branchTransferParams, group, index); processes = InvokeBranchProcess(startupParams, branchTransferParams.Template); } else { processes = new WfProcessCollection(); } } return(processes); }
protected override void OnModifyWorkflow(WfExecutorDataContext dataContext) { IWfProcess process = WfRuntime.StartWorkflow(StartupParams); if (this.OperatorActivity == null) { this.OperatorActivity = process.CurrentActivity; } if (this.AutoMoveTo) { if (this.TransferParams == null) { this.TransferParams = WfTransferParams.FromNextDefaultActivity(process); } //如果流转参数中没有下一步的人员,则从下一步活动的候选人中复制 if (this.TransferParams.Assignees.Count == 0) { IWfActivity nextActivity = process.Activities.FindActivityByDescriptorKey(this.TransferParams.NextActivityDescriptor.Key); if (nextActivity != null) { this.TransferParams.Assignees.CopyFrom(nextActivity.Candidates); } } this.TransferParams.FillActivityAndTransitionInfoFromContext(process); WfMoveToExecutor.DoMoveToOperation(process, this.TransferParams); } WfRuntime.ProcessContext.ResetContextByProcess(process); }