public void BaseAddApproverExecutorOnlyAddApproverModeTest() { IWfProcess process = WfProcessTestCommon.StartupSimpleProcess(); int originalActCount = process.Activities.Count; WfProcessTestCommon.MoveToNextDefaultActivity(process); IWfActivity targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity"); WfAddApproverExecutor executor = new WfAddApproverExecutor(process.CurrentActivity, targetActivity); executor.AddApproverMode = WfAddApproverMode.OnlyAddApprover; executor.Assignees.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object); executor.Execute(); Assert.AreEqual(originalActCount + 1, process.Activities.Count); Assert.AreEqual(originalActCount + 1, process.MainStream.Activities.Count); WfMainStreamActivityDescriptorCollection processDespMSA = process.Descriptor.GetMainStreamActivities(); WfMainStreamActivityDescriptorCollection processMSA = process.GetMainStreamActivities(true); processDespMSA.Output("流程描述中的主线活动"); processMSA.Output("主线流程中的主线活动"); }
public void BaseAddApproverExecutorStandardModeWithWithdrawTest() { IWfProcess process = WfProcessTestCommon.StartupSimpleProcess(); int originalActCount = process.Activities.Count; WfProcessTestCommon.MoveToNextDefaultActivity(process); int originalElapsedActCount = process.ElapsedActivities.Count; IWfActivity targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity"); WfAddApproverExecutor executor = new WfAddApproverExecutor(process.CurrentActivity, targetActivity); executor.Assignees.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object); executor.Execute(); Console.WriteLine("Elapsed activities: {0}", process.ElapsedActivities.Count); process = WfRuntime.GetProcessByProcessID(process.ID); WfWithdrawExecutor withdrawExecutor = new WfWithdrawExecutor(process.CurrentActivity, process.CurrentActivity); withdrawExecutor.Execute(); Console.WriteLine("Elapsed activities: {0}", process.ElapsedActivities.Count); Assert.AreEqual(originalElapsedActCount, process.ElapsedActivities.Count); Assert.AreEqual(originalActCount, process.Activities.Count, "撤回后,恢复为加签之前的状态"); Assert.AreEqual(originalActCount, process.MainStream.Activities.Count, "撤回后,主线流程的活动也没有变化"); WfMainStreamActivityDescriptorCollection processDespMSA = process.Descriptor.GetMainStreamActivities(); WfMainStreamActivityDescriptorCollection processMSA = process.GetMainStreamActivities(true); processDespMSA.Output("流程描述中的主线活动"); processMSA.Output("主线流程中的主线活动"); }
public void AddApproverReturnTest() { IWfProcessDescriptor processDesp = ReturnExecutorTestHelper.PrepareAddApproverReturnProcessDesp(); IWfProcess process = ReturnExecutorTestHelper.StartSpecialReturnProcess(processDesp); WfProcessTestCommon.MoveToNextDefaultActivity(process); Assert.AreEqual("B", process.CurrentActivity.Descriptor.Key); WfAddApproverExecutor executor = new WfAddApproverExecutor(process.CurrentActivity, process.CurrentActivity); executor.Assignees.Add((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object); executor.ExecuteNotPersist(); Assert.AreEqual(6, process.Activities.Count, "加签后变成6个活动"); WfProcessTestCommon.MoveToNextDefaultActivity(process); //B的衍生点 Assert.AreEqual("B", process.CurrentActivity.Descriptor.AssociatedActivityKey); WfProcessTestCommon.MoveToNextDefaultActivity(process); //C的衍生点 Assert.AreEqual("C", process.CurrentActivity.Descriptor.Key); ReturnExecutorTestHelper.ExecuteReturnOperation(process.CurrentActivity, "B"); Assert.AreEqual(8, process.Activities.Count, "退回后8个活动"); Assert.AreEqual("B", process.CurrentActivity.Descriptor.AssociatedActivityKey); WfProcessTestCommon.MoveToNextDefaultActivity(process); //C的衍生点 Assert.AreEqual("C", process.CurrentActivity.Descriptor.AssociatedActivityKey); WfProcessTestCommon.MoveToNextDefaultActivity(process); //D Assert.AreEqual("D", process.CurrentActivity.Descriptor.Key); }
public WfExecutorBase CreateExecutor() { WfExecutorBase executor = null; switch (this.OperationType) { case WfControlOperationType.MoveTo: executor = new WfMoveToExecutor( WfClientContext.Current.OriginalActivity, WfClientContext.Current.OriginalActivity, ToTransferParams(), WfClientContext.Current.Locks); break; case WfControlOperationType.Consign: { WfAssigneeCollection assignees = new WfAssigneeCollection(); WfAssignee assignee = new WfAssignee(WfClientContext.Current.User); assignees.Add(assignee); executor = new WfConsignExecutor( WfClientContext.Current.OriginalActivity, WfClientContext.Current.OriginalActivity, assignees, this.Assignees.ToUsers(), this.Circulators.ToUsers(), BlockingType, SequenceType); } break; case WfControlOperationType.Return: if (this._RejectMode == WfRejectMode.LikeAddApprover) { executor = new WfAddApproverExecutor(WfClientContext.Current.CurrentActivity, WfClientContext.Current.CurrentActivity.Process.Activities.FindActivityByDescriptorKey(TargetActivityDescriptor.Key)); } else { executor = new WfReturnExecutor(WfClientContext.Current.CurrentActivity, WfClientContext.Current.CurrentActivity.Process.Activities.FindActivityByDescriptorKey(TargetActivityDescriptor.Key)); } break; default: throw new WfRuntimeException(Translator.Translate(Define.DefaultCulture, "不能处理操作类型为{0}", this.OperationType)); } return(executor); }
public void AddApproverExecutorTest() { //Initial NormalActivity NormalActivity1 NormalActivity2 NormalActivity3 Completed IUser user = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object; IWfProcessDescriptor procDesp = WfProcessTestCommon.CreateProcessDescriptor(); WfUserResourceDescriptor userDesp = new WfUserResourceDescriptor(user); procDesp.InitialActivity.Resources.Add(userDesp); WfProcessStartupParams startParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(procDesp); WfStartWorkflowExecutor exec = new WfStartWorkflowExecutor(null, startParams); IWfProcess proc = exec.Execute(); //启动流程 IWfProcess wfp = WfRuntime.GetProcessByProcessID(proc.ID); MoveToExecutor(wfp); //流转一步 ,即第2个节点 IWfProcess p = WfRuntime.GetProcessByProcessID(proc.ID); WfAssigneeCollection assignees = new WfAssigneeCollection(); assignees.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object); WfAddApproverExecutor addExec = new WfAddApproverExecutor(p.CurrentActivity, p.CurrentActivity, assignees); addExec.Execute(); //加签,即流转到加签点上 IWfProcess process = WfRuntime.GetProcessByProcessID(p.ID); Assert.AreEqual(process.Descriptor.GetMainStreamActivities().Count, process.Activities.Count - 2, "动态添加两个活动,因被加签人要回到加签人"); Assert.AreEqual(2, process.ElapsedActivities.Count); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban)); Assert.IsTrue(process.CurrentActivity.Descriptor.ToTransitions.Count == 1); Assert.IsNotNull(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity); IWfProcess wfProcess9 = WfRuntime.GetProcessByProcessID(process.ID); WfWithdrawExecutor withdrawExec = new WfWithdrawExecutor(wfProcess9.CurrentActivity, wfProcess9.CurrentActivity); withdrawExec.Execute(); IWfProcess wfProcess1 = WfRuntime.GetProcessByProcessID(wfProcess9.ID); Assert.AreEqual(wfProcess1.Activities.Count, wfProcess1.Descriptor.GetMainStreamActivities().Count, "此处应该撤回到加签的活动点上,同时被加签的两个点都应该移除"); Assert.AreEqual(1, wfProcess1.ElapsedActivities.Count); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess1.CurrentActivity.ID, TaskStatus.Ban)); Assert.IsTrue(wfProcess1.CurrentActivity.Descriptor.ToTransitions.Count == 1); }