protected void buttonCallBranchProcess_Click(object sender, EventArgs e) { WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post, "http://localhost/MCSWebApp/WfFormTemplate/Services/WfProcessService.svc", WfServiceContentType.Json); WfServiceOperationDefinition definition = new WfServiceOperationDefinition(address, "StartBranchProcesses"); WfServiceOperationParameter p1 = new WfServiceOperationParameter("ownerActivityID", UuidHelper.NewUuidString()); IWfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor("Test"); WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(template); WfServiceOperationParameter p2 = new WfServiceOperationParameter("branchTransferParams", WfSvcOperationParameterType.RuntimeParameter, "transferParams"); definition.Params.Add(p1); definition.Params.Add(p2); WfServiceInvoker invoker = new WfServiceInvoker(definition); WfServiceInvoker.InvokeContext["transferParams"] = transferParams; object result = invoker.Invoke(); resultLabel.Text = Server.HtmlEncode(result.ToString()); }
public void WfBranchProcessTransferParamsJsonTest() { WfConverterHelper.RegisterConverters(); IUser user = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.requestor.ToString()].Object; IWfBranchProcessTemplateDescriptor template = WfProcessTestCommon.CreateTemplate("Consign", user); WfBranchProcessTransferParams data = new WfBranchProcessTransferParams(template); data.BranchParams.Clear(); WfBranchProcessStartupParams bpsp = new WfBranchProcessStartupParams(user); bpsp.Department = user.Parent; bpsp.RelativeParams["RP"] = UuidHelper.NewUuidString(); bpsp.ApplicationRuntimeParameters["context"] = UuidHelper.NewUuidString(); bpsp.ResourceID = UuidHelper.NewUuidString(); bpsp.DefaultTaskTitle = UuidHelper.NewUuidString(); bpsp.StartupContext = UuidHelper.NewUuidString(); data.BranchParams.Add(bpsp); string serilizedData = JSONSerializerExecute.Serialize(data); Console.WriteLine(serilizedData); WfBranchProcessTransferParams deserilizedData = JSONSerializerExecute.Deserialize<WfBranchProcessTransferParams>(serilizedData); Assert.AreEqual(data.Template.Key, deserilizedData.Template.Key); Assert.AreEqual(data.Template.BranchProcessKey, deserilizedData.Template.BranchProcessKey); AssertBranchProcessStartupParams(data.BranchParams[0], deserilizedData.BranchParams[0]); }
public void WfBranchProcessTransferParamsJsonTest() { WfConverterHelper.RegisterConverters(); IUser user = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.requestor.ToString()].Object; IWfBranchProcessTemplateDescriptor template = WfProcessTestCommon.CreateTemplate("Consign", user); WfBranchProcessTransferParams data = new WfBranchProcessTransferParams(template); data.BranchParams.Clear(); WfBranchProcessStartupParams bpsp = new WfBranchProcessStartupParams(user); bpsp.Department = user.Parent; bpsp.RelativeParams["RP"] = UuidHelper.NewUuidString(); bpsp.ApplicationRuntimeParameters["context"] = UuidHelper.NewUuidString(); bpsp.ResourceID = UuidHelper.NewUuidString(); bpsp.DefaultTaskTitle = UuidHelper.NewUuidString(); bpsp.StartupContext = UuidHelper.NewUuidString(); data.BranchParams.Add(bpsp); string serilizedData = JSONSerializerExecute.Serialize(data); Console.WriteLine(serilizedData); WfBranchProcessTransferParams deserilizedData = JSONSerializerExecute.Deserialize <WfBranchProcessTransferParams>(serilizedData); Assert.AreEqual(data.Template.Key, deserilizedData.Template.Key); Assert.AreEqual(data.Template.BranchProcessKey, deserilizedData.Template.BranchProcessKey); AssertBranchProcessStartupParams(data.BranchParams[0], deserilizedData.BranchParams[0]); }
protected void buttonCallBranchProcess_Click(object sender, EventArgs e) { WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post, "http://localhost/MCSWebApp/WfFormTemplate/Services/WfProcessService.svc", WfServiceContentType.Json); WfServiceOperationDefinition definition = new WfServiceOperationDefinition(address, "StartBranchProcesses"); WfServiceOperationParameter p1 = new WfServiceOperationParameter("ownerActivityID", UuidHelper.NewUuidString()); IWfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor("Test"); WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(template); WfServiceOperationParameter p2 = new WfServiceOperationParameter("branchTransferParams", WfSvcOperationParameterType.RuntimeParameter, "transferParams"); definition.Params.Add(p1); definition.Params.Add(p2); WfServiceInvoker invoker = new WfServiceInvoker(definition); WfServiceInvoker.InvokeContext["transferParams"] = transferParams; object result = invoker.Invoke(); resultLabel.Text = Server.HtmlEncode(result.ToString()); }
/// <summary> /// 构造并且发送任务到任务列表中 /// </summary> /// <param name="ownerActivityID"></param> /// <param name="transferParams"></param> /// <returns></returns> public static StartBranchProcessTask SendTask(string ownerActivityID, WfBranchProcessTransferParams transferParams) { StartBranchProcessTask task = CreateTask(ownerActivityID, transferParams); InvokeServiceTaskAdapter.Instance.Update(task); return task; }
/// <summary> /// 构造并且发送任务到任务列表中 /// </summary> /// <param name="ownerActivityID"></param> /// <param name="transferParams"></param> /// <returns></returns> public static StartBranchProcessTask SendTask(string ownerActivityID, WfBranchProcessTransferParams transferParams) { StartBranchProcessTask task = CreateTask(ownerActivityID, transferParams); InvokeServiceTaskAdapter.Instance.Update(task); return(task); }
/// <summary> /// 创建任务流程活动中的任务 /// </summary> /// <param name="users"></param> /// <returns></returns> private SysTask CreateUserTaskInActivity(IEnumerable <IUser> users) { WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(this.Template, users); transferParams.BranchParams.ForEach(bp => bp.ApplicationRuntimeParameters["ProcessName"] = this.Template.DefaultProcessName); return(StartBranchProcessTask.CreateTask(this.OwnerActivityID, transferParams)); }
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) { WfBranchProcessTransferParams data = new WfBranchProcessTransferParams(); data.Template = JSONSerializerExecute.Deserialize<WfBranchProcessTemplateDescriptor>(dictionary["Template"]); data.BranchParams.CopyFrom(JSONSerializerExecute.Deserialize<WfBranchProcessStartupParamsCollection>(dictionary["BranchParams"])); return data; }
public string[] StartBranchProcesses(string ownerActivityID, WfBranchProcessTransferParams branchTransferParams) { List <string> result = new List <string>(); result.Add(UuidHelper.NewUuidString()); result.Add(UuidHelper.NewUuidString()); return(result.ToArray()); }
public string[] StartBranchProcesses(string ownerActivityID, WfBranchProcessTransferParams branchTransferParams) { List<string> result = new List<string>(); result.Add(UuidHelper.NewUuidString()); result.Add(UuidHelper.NewUuidString()); return result.ToArray(); }
/// <summary> /// 构造发送流程的任务 /// </summary> /// <param name="ownerActivityID"></param> /// <param name="transferParams"></param> /// <returns></returns> public static StartBranchProcessTask CreateTask(string ownerActivityID, WfBranchProcessTransferParams transferParams) { StartBranchProcessTask task = new StartBranchProcessTask(ownerActivityID, transferParams); task.TaskID = UuidHelper.NewUuidString(); task.ResourceID = ownerActivityID; task.TaskTitle = string.Format("启动活动{0}的子流程", ownerActivityID); return(task); }
/// <summary> /// 构造发送流程的任务 /// </summary> /// <param name="ownerActivityID"></param> /// <param name="transferParams"></param> /// <returns></returns> public static StartBranchProcessTask CreateTask(string ownerActivityID, WfBranchProcessTransferParams transferParams) { StartBranchProcessTask task = new StartBranchProcessTask(ownerActivityID, transferParams); task.TaskID = UuidHelper.NewUuidString(); task.ResourceID = ownerActivityID; task.TaskTitle = string.Format("启动活动{0}的子流程", ownerActivityID); return task; }
protected override void OnModifyWorkflow(WfExecutorDataContext dataContext) { this.TargetActivity.Process.Committed = true; WfBranchProcessTransferParams bptp = new WfBranchProcessTransferParams( WfTemplateBuilder.CreateDefaultCirculationTemplate("Circulate", this.Circulators)); WfRuntime.ProcessContext.AfterStartupBranchProcess += new WfAfterStartupBranchProcessHandler(WfActivityRelativeExecutorBase.AfterStartupBranchProcess); this.TargetActivity.StartupBranchProcesses(bptp); }
public WfStartBranchProcessExecutor(IWfActivity operatorActivity, IWfActivity ownerActivity, WfBranchProcessTransferParams branchTransferParams) : base(operatorActivity, WfControlOperationType.StartBranchProcess) { ownerActivity.NullCheck("ownerActivity"); branchTransferParams.NullCheck("branchTransferParams"); this.OwnerActivity = ownerActivity; this.BranchTransferParams = branchTransferParams; if (this.OperatorActivity == null) this.OperatorActivity = ownerActivity; }
public StartBranchProcessTask(string ownerActivityID, WfBranchProcessTransferParams transferParams) : base() { ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID"); transferParams.NullCheck("transferParams"); this.OwnerActivityID = ownerActivityID; this.TransferParams = transferParams; this.InitServiceDefinitions(); this.Context["transferParams"] = this.TransferParams; }
public StartBranchProcessTask(string ownerActivityID, WfBranchProcessTransferParams transferParams) : base() { ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID"); transferParams.NullCheck("transferParams"); this.OwnerActivityID = ownerActivityID; this.TransferParams = transferParams; this.InitServiceDefinitions(); this.Context["transferParams"] = this.TransferParams; }
public void ClientToServer(IEnumerable <WfClientBranchProcessTransferParams> client, ICollection <WfBranchProcessTransferParams> server) { client.NullCheck("client"); foreach (WfClientBranchProcessTransferParams ct in client) { WfBranchProcessTransferParams st = null; WfClientBranchProcessTransferParamsConverter.Instance.ClientToServer(ct, ref st); server.Add(st); } }
public string[] StartBranchProcesses(string ownerActivityID, WfBranchProcessTransferParams branchTransferParams) { ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID"); branchTransferParams.NullCheck("branchTransferParams"); IWfProcess process = WfRuntime.GetProcessByActivityID(ownerActivityID); IWfActivity ownerActivity = process.Activities[ownerActivityID]; WfStartBranchProcessExecutor executor = new WfStartBranchProcessExecutor(ownerActivity, ownerActivity, branchTransferParams); executor.Execute(); List <string> startedProcessIDs = new List <string>(); executor.StartedProcesses.ForEach(p => startedProcessIDs.Add(p.ID)); return(startedProcessIDs.ToArray()); }
public WfBranchProcessTransferParams ClientToServer(WfClientBranchProcessTransferParams client, ref WfBranchProcessTransferParams server) { client.NullCheck("client"); client.Template.NullCheck("Template"); if (server == null) { server = new WfBranchProcessTransferParams(); } WfBranchProcessTemplateDescriptor serverTemplate = null; WfClientBranchProcessTemplateDescriptorConverter.Instance.ClientToServer(client.Template, ref serverTemplate); server.Template = serverTemplate; WfClientBranchProcessStartupParamsCollectionConverter.Instance.ClientToServer(client.BranchParams, server.BranchParams); return(server); }
public void ExitMaintainingStatusTaskTest() { IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty(); IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp); MoveToExecutor(process); process = WfRuntime.GetProcessByProcessID(process.ID); IWfActivity ownerActivity = process.CurrentActivity; WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(ownerActivity.Descriptor.BranchProcessTemplates[0]); Console.WriteLine("Process ID: {0}", process.ID); ExecuteAndAssertTask(() => ExitMaintainingStatusTask.SendTask(ownerActivity.ID, process.ID, true)); WfRuntime.ClearCache(); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.AreEqual(WfProcessStatus.Completed, process.Status); }
public void StartBranchProcessTaskTest() { IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty(); IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp); MoveToExecutor(process); process = WfRuntime.GetProcessByProcessID(process.ID); IWfActivity ownerActivity = process.CurrentActivity; Console.WriteLine("OwnerActivityID: {0}", ownerActivity.ID); WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(ownerActivity.Descriptor.BranchProcessTemplates[0]); ExecuteAndAssertTask(() => StartBranchProcessTask.SendTask(ownerActivity.ID, transferParams)); WfRuntime.ClearCache(); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.IsTrue(process.CurrentActivity.BranchProcessGroups.Count > 0); Assert.IsTrue(process.CurrentActivity.BranchProcessGroups[0].Branches.Count > 0); }
public void StartBranchProcessTaskTest() { IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty(); IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp); MoveToExecutor(process); process = WfRuntime.GetProcessByProcessID(process.ID); IWfActivity ownerActivity = process.CurrentActivity; Console.WriteLine("OwnerActivityID: {0}", ownerActivity.ID); WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(ownerActivity.Descriptor.BranchProcessTemplates[0]); ExecuteAndAssertTask(() => StartBranchProcessTask.SendTask(ownerActivity.ID, transferParams)); WfRuntime.ClearCache(); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.IsTrue(process.CurrentActivity.BranchProcessGroups.Count > 0); Assert.IsTrue(process.CurrentActivity.BranchProcessGroups[0].Branches.Count > 0); }
private WfServiceStartupProcessParams PrepareOneServiceStartupProcessParams(WfBranchProcessTransferParams branchParams, IWfBranchProcessGroup group, int index) { IWfBranchProcessTemplateDescriptor template = branchParams.Template; WfBranchProcessStartupParams branchStartupParams = branchParams.BranchParams[index]; WfServiceStartupProcessParams startupParams = new WfServiceStartupProcessParams(); startupParams.Creator = this.Process.Creator; if (branchStartupParams.Department == null) startupParams.Department = this.Process.OwnerDepartment; else startupParams.Department = branchStartupParams.Department; startupParams.Assignees = branchStartupParams.Assignees.ToUsers(); if (branchStartupParams.DefaultTaskTitle.IsNullOrEmpty()) { if (startupParams.DefaultTaskTitle.IsNullOrEmpty()) startupParams.DefaultTaskTitle = this.Process.Descriptor.DefaultTaskTitle; else startupParams.DefaultTaskTitle = this.Descriptor.TaskTitle; } else startupParams.DefaultTaskTitle = branchStartupParams.DefaultTaskTitle; if (branchStartupParams.ResourceID.IsNullOrEmpty()) { WfSubProcessResourceMode mode = template.Properties.GetValue("CreateResourceMode", WfSubProcessResourceMode.DependsOnProcess); switch (mode) { //这里的规则是什么? case WfSubProcessResourceMode.DependsOnProcess: startupParams.ResourceID = this.Process.ResourceID; break; case WfSubProcessResourceMode.SameWithRoot: startupParams.ResourceID = this.Process.ResourceID; break; case WfSubProcessResourceMode.NewCreate: startupParams.ResourceID = UuidHelper.NewUuidString(); break; } } else startupParams.ResourceID = branchStartupParams.ResourceID; startupParams.OwnerActivityID = this.ID; startupParams.OwnerTemplateKey = template.Key; startupParams.Sequence = index; startupParams.RelativeParams = new Dictionary<object, object>(); foreach (var strpar in branchStartupParams.RelativeParams.AllKeys) { startupParams.RelativeParams.Add(strpar, this.Process.ApplicationRuntimeParameters[branchStartupParams.RelativeParams[strpar]]); } if (!string.IsNullOrEmpty(template.DefaultUrl)) startupParams.DefaultURL = template.DefaultUrl; else if (!string.IsNullOrEmpty(this.Descriptor.Url)) startupParams.DefaultURL = this.Descriptor.Url; else startupParams.DefaultURL = this.Process.Descriptor.Url; //如果是串行执行,且不是第一个流程,则不启动第一个活动,子流程处于未启动状态 if (template.ExecuteSequence == WfBranchProcessExecuteSequence.Serial && index > 0) startupParams.AutoStartInitialActivity = false; return startupParams; }
public string[] StartBranchProcesses(string ownerActivityID, WfBranchProcessTransferParams branchTransferParams) { ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID"); branchTransferParams.NullCheck("branchTransferParams"); IWfProcess process = WfRuntime.GetProcessByActivityID(ownerActivityID); IWfActivity ownerActivity = process.Activities[ownerActivityID]; WfStartBranchProcessExecutor executor = new WfStartBranchProcessExecutor(ownerActivity, ownerActivity, branchTransferParams); executor.Execute(); List<string> startedProcessIDs = new List<string>(); executor.StartedProcesses.ForEach(p => startedProcessIDs.Add(p.ID)); return startedProcessIDs.ToArray(); }
/// <summary> /// 创建任务流程活动中的任务 /// </summary> /// <param name="users"></param> /// <returns></returns> private SysTask CreateUserTaskInActivity(IEnumerable<IUser> users) { WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(this.Template, users); transferParams.BranchParams.ForEach(bp => bp.ApplicationRuntimeParameters["ProcessName"] = this.Template.DefaultProcessName); return StartBranchProcessTask.CreateTask(this.OwnerActivityID, transferParams); }
public static void AreSame(this WfClientBranchProcessTransferParams expected, WfBranchProcessTransferParams actual) { expected.Template.AreSame(actual.Template); expected.BranchParams.AreSame(actual.BranchParams); }
/// <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; }
public static void AreSame(this WfClientBranchProcessTransferParams expected, WfBranchProcessTransferParams actual) { expected.Template.AreSame(actual.Template); expected.BranchParams.AreSame(actual.BranchParams); }
private WfProcessStartupParams PrepareOneBranchProcessStartupParams(WfBranchProcessTransferParams branchTransferParams, IWfBranchProcessGroup group, int index) { IWfBranchProcessTemplateDescriptor template = branchTransferParams.Template; WfBranchProcessStartupParams branchStartupParams = branchTransferParams.BranchParams[index]; //准备启动子流程的参数 //先检查有没有预定义好的分支流程 IWfProcessDescriptor subProcessDesp = null; using (WfApplicationParametersContext apContext = WfApplicationParametersContext.CreateContext(branchStartupParams.ApplicationRuntimeParameters)) { subProcessDesp = template.GetBranchProcessDescriptor(); } if (template.DefaultProcessName.IsNotEmpty()) { string runtimeProcessName = this.Process.ApplicationRuntimeParameters.GetMatchedString(template.DefaultProcessName); if (runtimeProcessName.IsNullOrEmpty()) runtimeProcessName = template.DefaultProcessName; if (runtimeProcessName.IsNullOrEmpty()) ((WfProcessDescriptor)subProcessDesp).Name = runtimeProcessName; if (subProcessDesp.InitialActivity != null && subProcessDesp.InitialActivity.Name.IsNullOrEmpty()) ((WfActivityDescriptor)subProcessDesp.InitialActivity).Name = runtimeProcessName; } if (template.DefaultTaskTitle.IsNotEmpty()) subProcessDesp.DefaultTaskTitle = template.DefaultTaskTitle; if (template.DefaultUrl.IsNotEmpty()) subProcessDesp.Url = template.DefaultUrl; if (subProcessDesp.Url.IsNullOrEmpty()) subProcessDesp.Url = this.Descriptor.Url.IsNotEmpty() ? this.Descriptor.Url : this.Descriptor.Process.Url; WfProcessStartupParams startupParams = new WfProcessStartupParams(); startupParams.Creator = this.Operator; if (branchStartupParams.Department == null) startupParams.Department = this.Process.OwnerDepartment; else startupParams.Department = branchStartupParams.Department; startupParams.Assignees.CopyFrom(branchStartupParams.Assignees); startupParams.ProcessDescriptor = subProcessDesp; if (branchStartupParams.DefaultTaskTitle.IsNullOrEmpty()) { if (startupParams.DefaultTaskTitle.IsNullOrEmpty()) { if (subProcessDesp.DefaultTaskTitle.IsNotEmpty()) startupParams.DefaultTaskTitle = subProcessDesp.DefaultTaskTitle; else startupParams.DefaultTaskTitle = this.Process.Descriptor.DefaultTaskTitle; } else startupParams.DefaultTaskTitle = this.Descriptor.TaskTitle; } else startupParams.DefaultTaskTitle = branchStartupParams.DefaultTaskTitle; if (branchStartupParams.ResourceID.IsNullOrEmpty()) { WfSubProcessResourceMode mode = template.Properties.GetValue("CreateResourceMode", WfSubProcessResourceMode.DependsOnProcess); switch (mode) { case WfSubProcessResourceMode.DependsOnProcess: if (subProcessDesp.Properties.GetValue("Independent", false)) startupParams.ResourceID = UuidHelper.NewUuidString(); else startupParams.ResourceID = this.Process.ResourceID; break; case WfSubProcessResourceMode.SameWithRoot: startupParams.ResourceID = this.Process.ResourceID; break; case WfSubProcessResourceMode.NewCreate: startupParams.ResourceID = UuidHelper.NewUuidString(); break; } } else startupParams.ResourceID = branchStartupParams.ResourceID; if (branchStartupParams.RelativeParams.Count == 0) startupParams.RelativeParams.CopyFrom(this.Process.RelativeParams); else startupParams.RelativeParams.CopyFrom(branchStartupParams.RelativeParams); startupParams.BranchStartupParams = branchStartupParams; startupParams.Group = group; startupParams.OwnerActivityID = this.ID; startupParams.OwnerTemplateKey = template.Key; startupParams.Sequence = index; startupParams.AutoCommit = this.Process.Committed; //子流程的提交属性默认等于主流程的 branchStartupParams.ApplicationRuntimeParameters.ForEach(kp => startupParams.ApplicationRuntimeParameters.Add(kp.Key, kp.Value)); //如果是串行执行,且不是第一个流程,则不启动第一个活动,子流程处于未启动状态 if (template.ExecuteSequence == WfBranchProcessExecuteSequence.Serial && index > 0) startupParams.AutoStartInitialActivity = false; return startupParams; }
public void ExitMaintainingStatusTaskTest() { IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty(); IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp); MoveToExecutor(process); process = WfRuntime.GetProcessByProcessID(process.ID); IWfActivity ownerActivity = process.CurrentActivity; WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(ownerActivity.Descriptor.BranchProcessTemplates[0]); Console.WriteLine("Process ID: {0}", process.ID); ExecuteAndAssertTask(() => ExitMaintainingStatusTask.SendTask(ownerActivity.ID, process.ID, true)); WfRuntime.ClearCache(); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.AreEqual(WfProcessStatus.Completed, process.Status); }
/// <summary> /// 内部启动分支流程 /// </summary> /// <param name="branchTransferParams">分支流程启动参数</param> /// <param name="addToOwnerBranches"></param> /// <returns></returns> internal WfProcessCollection InternalStartupBranchProcesses(WfBranchProcessTransferParams branchTransferParams, bool addToOwnerBranches) { WfProcessCollection processes = null; if (CanStartBranchProcessFromTemplate(branchTransferParams.Template)) { IWfBranchProcessGroup group = this.BranchProcessGroups[branchTransferParams.Template.Key]; //以模版Key为分支流程实例的分组标准 if (group == null) { group = new WfBranchProcessGroup(this, branchTransferParams.Template); this.BranchProcessGroups.Add(group); } WfRuntime.ProcessContext.FirePrepareBranchProcessParams(group, branchTransferParams.BranchParams); ProcessProgress.Current.MaxStep += branchTransferParams.BranchParams.Count; ProcessProgress.Current.Response(); //根据模板内的分支流程参数,逐一启动具体流程 for (int i = 0; i < branchTransferParams.BranchParams.Count; i++) { //processes = StartupBranchProcess(branchTransferParams, group, group.BranchProcessStatistics.MaxSequence++); processes = StartupBranchProcess(branchTransferParams, group, i); processes.ForEach(p => { if (addToOwnerBranches) { if (group.Branches.Contains(p) == false) { group.Branches.Add(p); } } WfRuntime.ProcessContext.FireAfterStartupBranchProcess(p); }); ProcessProgress.Current.MaxStep = Math.Max(ProcessProgress.Current.MaxStep, ProcessProgress.Current.CurrentStep + processes.Count); ProcessProgress.Current.IncrementBy(processes.Count); ProcessProgress.Current.Response(); } WfRuntime.ProcessContext.AffectedProcesses.AddOrReplace(this.Process); } if (processes == null) processes = new WfProcessCollection(); return processes; }
/// <summary> /// 启动分支流程 /// </summary> /// <param name="branchTransferParams">启动分支流程的参数,里面包括一个分支流程模板</param> public void StartupBranchProcesses(WfBranchProcessTransferParams branchTransferParams) { InternalStartupBranchProcesses(branchTransferParams, true); }