protected override void OnModifyWorkflow(WfExecutorDataContext dataContext) { IWfActivity instActivity = PrepareInstanceActivity(); WfActivityDescriptor instActDesp = (WfActivityDescriptor)instActivity.Descriptor; AdjustActivityDescriptorProperties(instActDesp, this.CreateParams); IWfActivityDescriptor msTargetActDesp = this.TargetActivity.GetMainStreamActivityDescriptor(); if (msTargetActDesp != null) { //同步增加主线活动 IWfActivityDescriptor newMSActDesp = PrepareActivityDescriptor(msTargetActDesp); ((WfActivityBase)instActivity).MainStreamActivityKey = newMSActDesp.Key; AdjustActivityDescriptorProperties((WfActivityDescriptor)newMSActDesp, this.CreateParams); } instActivity.GenerateCandidatesFromResources(); WfRuntime.DecorateProcess(instActivity.Process); }
public static IWfProcess StartWorkflow(WfProcessStartupParams startupParams) { startupParams.NullCheck <WfRuntimeException>("startupParams"); WfProcess process = new WfProcess(startupParams.ProcessDescriptor); FillProcessDescriptorProperties(startupParams, process.Descriptor); FillProcessInstanceProperties(startupParams, process); WfProcessContextCache.Instance.Add(process.ID, process); if (process.Creator == null && DeluxePrincipal.IsAuthenticated) { process.Creator = DeluxeIdentity.CurrentUser; } if (process.InitialActivity != null) { if (process.InitialActivity.Descriptor.Properties.GetValue("AutoGenerateCadidates", true)) { process.InitialActivity.GenerateCandidatesFromResources(); WfMatrix matrix = process.GetMatrix(); if (matrix != null) { ((WfActivityBase)process.InitialActivity).GenerateCandidatesFromMatrix(matrix); } } if (startupParams.CheckStartProcessUserPermission) { CheckStartProcessUserPermission(process); } if (startupParams.Assignees.Count == 0) { startupParams.Assignees.CopyFrom(process.InitialActivity.Candidates); } if (process.InitialActivity.Descriptor.Resources.Count == 0) { startupParams.Assignees.ToUsers().ForEach(u => process.InitialActivity.Descriptor.Resources.Add(new WfUserResourceDescriptor(u))); } WfSimulator.WriteSimulationInfo(process, WfSimulationOperationType.Startup); //如果自动启动第一个活动且存在活动点,则流转到第一个点 if (startupParams.AutoStartInitialActivity) { WfAssigneeCollection assignees = startupParams.Assignees; process.InitialActivity.Candidates.Clear(); process.InitialActivity.Candidates.CopyFrom(startupParams.Assignees); IWfActivity originalInitial = process.InitialActivity; WfRuntime.DecorateProcess(process); //修饰流程后,如果起始点发生了变化... if (originalInitial != process.InitialActivity) { assignees = process.InitialActivity.Candidates; } WfTransferParams transferParams = new WfTransferParams(process.InitialActivity.Descriptor); //设置初始节点子流程参数 process.InitialActivity.Descriptor.BranchProcessTemplates.ForEach(branchTemplate => { transferParams.BranchTransferParams.Add(new WfBranchProcessTransferParams(branchTemplate)); }); transferParams.Operator = startupParams.Creator; transferParams.Assignees.CopyFrom(assignees); process.MoveTo(transferParams); WfRuntime.ProcessContext.NormalizeTaskTitles(); } } WfRuntime.ProcessContext.AffectedProcesses.AddOrReplace(process); return(process); }