protected override void AfterCreateProcessInstance(SysTaskProcess sysTaskProcess) { sysTaskProcess.Name = string.Format("创建活动{0}的分支流程", this.OwnerActivityID); //这一步可能是很长时间的操作 OguDataCollection <IUser> users = this.Template.Resources.ToUsers(); int index = 0; if (this.Template.ExecuteSequence == WfBranchProcessExecuteSequence.SerialInSameProcess) { sysTaskProcess.Activities.Add(CreateUserActivity(sysTaskProcess, index++, users)); SysTaskProcessRuntime.Persist(); } else { foreach (IUser user in users) { sysTaskProcess.Activities.Add(CreateUserActivity(sysTaskProcess, index++, new IUser[] { user })); SysTaskProcessRuntime.Persist(); } } if (this.AutoAddExitMaintainingStatusTask) { IWfProcess process = WfRuntime.GetProcessByActivityID(this.OwnerActivityID); sysTaskProcess.Activities.Add(sysTaskProcess.CreateExitMaintainingActivity(process.ID, index++)); SysTaskProcessRuntime.Persist(); } }
public int DispatchStartBranchProcessTasks(string ownerActivityID, IWfBranchProcessTemplateDescriptor template, bool autoAddExitMaintainingStatusTask) { ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID"); template.NullCheck("template"); StartBranchProcessSysTaskProcessBuilder builder = new StartBranchProcessSysTaskProcessBuilder(ownerActivityID, template, autoAddExitMaintainingStatusTask); SysTaskProcess sysTaskProcess = builder.Build(); SysTaskProcessRuntime.StartProcess(sysTaskProcess); return(sysTaskProcess.Activities.Count); }
public void StartSysTaskProcessWithBranchesAndMoveToCompleteTest() { SysTaskAdapter.Instance.ClearAll(); SysTaskProcess process = PrepareSysTaskProcessWithBranchData(() => PrepareInvokeServiceTask()); SysTaskProcessRuntime.StartProcess(process); SysTaskCommon.ExecuteAllTasks(); SysTaskProcessRuntime.ClearCache(); process = SysTaskProcessRuntime.GetProcessByID(process.ID); Assert.AreEqual(SysTaskProcessStatus.Completed, process.Status); }
public SysTaskProcess Build() { SysTaskProcess sysTaskProcess = CreateProcessInstance(); SysTaskProcessRuntime.ProcessContext.AffectedProcesses.AddOrReplace(sysTaskProcess); this.AfterCreateProcessInstance(sysTaskProcess); SysTaskProcessRuntime.Persist(); sysTaskProcess = SysTaskProcessRuntime.GetProcessByID(sysTaskProcess.ID); return(sysTaskProcess); }
public int DispatchWithdrawProcessTask(string ownerSysActivityID, string processID, bool cancelAllBranchProcesses) { IWfProcess process = WfRuntime.GetProcessByProcessID(processID); IWfActivity currentActivity = process.CurrentActivity; process.EntrtMaintainingStatus(); WfRuntime.PersistWorkflows(); DispatchWithdrawProcessSysTaskProcessBuilder builder = new DispatchWithdrawProcessSysTaskProcessBuilder(ownerSysActivityID, process.ID, cancelAllBranchProcesses); SysTaskProcess sysTaskProcess = builder.Build(); SysTaskProcessRuntime.StartProcess(sysTaskProcess); return(sysTaskProcess.Activities.Count); }
public int DispatchCancelBranchProcessesTasks(string ownerSysActivityID, string ownerActivityID, bool cancelAllBranchProcesses) { int result = 0; WfProcessCurrentInfoCollection branchProcessesStatus = WfRuntime.GetProcessStatusByOwnerActivityID(ownerActivityID, string.Empty, false); foreach (WfProcessCurrentInfo processInfo in branchProcessesStatus) { DispatchCancelProcessSysTaskProcessBuilder builder = new DispatchCancelProcessSysTaskProcessBuilder(ownerSysActivityID, processInfo.InstanceID, true, cancelAllBranchProcesses); SysTaskProcess sysTaskProcess = builder.Build(); SysTaskProcessRuntime.StartProcess(sysTaskProcess); result += sysTaskProcess.Activities.Count; } return(result); }
public void StartSysTaskProcessTest() { SysTaskAdapter.Instance.ClearAll(); SysTaskProcess process = PrepareSysTaskProcessData(() => PrepareInvokeServiceTask()); SysTaskProcessRuntime.StartProcess(process); DO.SysTask moveToTask = SysTaskAdapter.Instance.LoadByResourceID(process.Activities[0].ID).FirstOrDefault(); Assert.IsNotNull(moveToTask); SysTaskCommon.ExecuteAndAssertTask(moveToTask); SysTaskProcessRuntime.ClearCache(); process = SysTaskProcessRuntime.GetProcessByID(process.ID); Assert.AreEqual(1, process.CurrentActivityIndex); }
public void CreateSysTaskProcessAndPersist() { SysTaskAdapter.Instance.ClearAll(); SysTaskProcess process = PrepareSysTaskProcessData(() => PrepareInvokeServiceTask()); SysTaskProcessRuntime.ProcessContext.AffectedProcesses.AddOrReplace(process); SysTaskProcessRuntime.Persist(); SysTaskProcess loadedProcess = SysTaskProcessRuntime.GetProcessByID(process.ID); Assert.AreNotEqual(process, loadedProcess); Assert.AreEqual(process.ID, loadedProcess.ID); Assert.AreEqual(process.Activities.Count, loadedProcess.Activities.Count); Assert.AreEqual(process.Activities[0].Sequence, loadedProcess.Activities[0].Sequence); Assert.AreEqual(process.Activities[1].Sequence, loadedProcess.Activities[1].Sequence); Assert.AreEqual(process.Activities[0].Task.TaskID, loadedProcess.Activities[0].Task.TaskID); }
public void BuildStartBranchProcessTaskProcessTest() { 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); //在Template设置资源为一个组织,用于后续分发分支流程的测试 IWfBranchProcessTemplateDescriptor template = ownerActivity.Descriptor.BranchProcessTemplates[0]; IUser userInTemplate = template.Resources.ToUsers().FirstOrDefault(); WfDepartmentResourceDescriptor deptResourceDesp = new WfDepartmentResourceDescriptor(userInTemplate.Parent); template.Resources.Clear(); template.Resources.Add(deptResourceDesp); SysTaskAdapter.Instance.ClearAll(); StartBranchProcessSysTaskProcessBuilder builder = new StartBranchProcessSysTaskProcessBuilder(ownerActivity.ID, template, true); SysTaskProcess sysTaskProcess = builder.Build(); SysTaskProcessRuntime.ClearCache(); sysTaskProcess = SysTaskProcessRuntime.GetProcessByID(sysTaskProcess.ID); Console.WriteLine("SysTaskProcess ID: {0}", sysTaskProcess.ID); Console.WriteLine("SysTaskProcess Activities: {0}", sysTaskProcess.Activities.Count); Assert.AreEqual(template.Resources.ToUsers().Count + 1, sysTaskProcess.Activities.Count); }