public void BasicAdminDeleteActivityWithMainStreamExecutorTest() { IWfProcess process = WfProcessTestCommon.StartupSimpleProcess(); IWfActivityDescriptor targetDesp = process.Descriptor.Activities["NormalActivity"]; WfAdminDeleteActivityExecutor executor = new WfAdminDeleteActivityExecutor(process.CurrentActivity, targetDesp, true); executor.Execute(); process = WfRuntime.GetProcessByProcessID(process.ID); IWfProcessDescriptor processDesp = process.Descriptor; targetDesp = processDesp.Activities["NormalActivity"]; Assert.IsNull(targetDesp); Assert.AreEqual(0, processDesp.InitialActivity.ToTransitions.Count); Assert.AreEqual(0, processDesp.CompletedActivity.FromTransitions.Count); processDesp = process.MainStream; targetDesp = processDesp.Activities["NormalActivity"]; Assert.IsNull(targetDesp); Assert.AreEqual(0, processDesp.InitialActivity.ToTransitions.Count); Assert.AreEqual(0, processDesp.CompletedActivity.FromTransitions.Count); }
public void ReturnExecutorTest() { IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee(); ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process); process = WfRuntime.GetProcessByProcessID(process.ID); ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process); process = WfRuntime.GetProcessByProcessID(process.ID); ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.requestor, process); process = WfRuntime.GetProcessByProcessID(process.ID); WfReturnExecutor returnExec = new WfReturnExecutor(process.CurrentActivity, process.Activities[1]); returnExec.Execute(); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.IsTrue(process.CurrentActivity.CreatorInstanceID != ""); Assert.AreEqual(process.ElapsedActivities[process.ElapsedActivities.Count - 1].ID, process.CurrentActivity.CreatorInstanceID); WfMainStreamActivityDescriptorCollection coll = process.Descriptor.GetMainStreamActivities(); Assert.AreEqual(6, coll.Count); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban)); }
public void ReplaceAssigneeExecutorTestReplay() { IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor(); IWfActivityDescriptor normalActDesp = processDesp.Activities["NormalActivity"]; IUser originalApprover = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object; normalActDesp.Resources.Clear(); normalActDesp.Resources.Add(new WfUserResourceDescriptor(originalApprover)); IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp); WfProcessTestCommon.MoveToNextDefaultActivityWithExecutor(process); process = WfRuntime.GetProcessByProcessID(process.ID); IUser newApprover = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver2.ToString()].Object; WfReplaceAssigneesExecutor executor = new WfReplaceAssigneesExecutor(process.CurrentActivity, process.CurrentActivity, originalApprover, new IUser[] { newApprover }); executor.Execute(); process = WfRuntime.GetProcessByProcessID(process.ID); UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks(build => build.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID)); Assert.AreEqual(1, tasks.Count); Assert.AreEqual(newApprover.ID, tasks[0].SendToUserID); }
public void BranchProcessPersistTest() { IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee(); WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(process, WfBranchProcessExecuteSequence.Parallel, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete); process.MoveTo(tp); Assert.AreEqual(1, process.CurrentActivity.BranchProcessGroups.Count); IWfBranchProcessGroup group = process.CurrentActivity.BranchProcessGroups[0]; AssertBranchProcessesInfo(group, tp.BranchTransferParams[0].Template.BranchProcessKey); WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); group = process.CurrentActivity.BranchProcessGroups[0]; AssertBranchProcessesInfo(group, tp.BranchTransferParams[0].Template.BranchProcessKey); string subProcessID = process.CurrentActivity.BranchProcessGroups[0].Branches[0].ID; WfRuntime.ClearCache(); //构造子流程,反向查找主流程信息 IWfProcess subProcess = WfRuntime.GetProcessByProcessID(subProcessID); AssertBranchProcessesInfo(subProcess.EntryInfo.OwnerActivity.BranchProcessGroups[0], tp.BranchTransferParams[0].Template.BranchProcessKey); }
public void ConsignExecutorWithMoveToTest() { IWfProcess process = WfProcessTestCommon.StartupSimpleProcess(); List <IUser> users = null; //添加会签活动且启动了分支流程 ConsignExecutorWithCondition(process, out users); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.IsTrue(process.CurrentActivity.BranchProcessGroups.Count > 0); Assert.AreEqual(users.Count, process.CurrentActivity.BranchProcessGroups[0].Branches.Count); IWfActivity originalActivity = process.CurrentActivity; Assert.AreEqual(WfActivityStatus.Pending, process.CurrentActivity.Status); foreach (IWfProcess branchProcess in process.CurrentActivity.BranchProcessGroups[0].Branches) { IWfProcess subProcess = WfRuntime.GetProcessByProcessID(branchProcess.ID); MoveToExecutor(subProcess); } process = WfRuntime.GetProcessByProcessID(process.ID); Assert.AreEqual(originalActivity.ID, process.CurrentActivity.ID); Assert.AreEqual(WfActivityStatus.Running, process.CurrentActivity.Status); }
private static void CheckOperationAndStatusAfterWithdrawProcess(string processId, string fromActivityId, string toActivityId) { IWfProcess process = WfRuntime.GetProcessByProcessID(processId); bool flag = false; for (int i = 0; i < process.Activities.Count; i++) { if (flag) { Assert.AreEqual(WfActivityStatus.NotRunning, process.Activities[i].Status); Assert.IsFalse(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Ban)); } if (process.Activities[i].ID == toActivityId) { Assert.AreEqual(WfActivityStatus.Running, process.Activities[i].Status); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Ban)); flag = true; } if (process.Activities[i].ID == fromActivityId) { Assert.IsFalse(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Ban)); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Yue)); break; } } }
public void SimpleProcessPersistRepeatTest() { IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee(); //process.DefaultTaskTitle = "测试保存的流程"; WfRuntime.PersistWorkflows(); IWfProcess loadedProcess = WfRuntime.GetProcessByProcessID(process.ID); IWfProcess loadedProcess2 = WfRuntime.GetProcessByActivityID(process.Activities[0].ID); Assert.AreEqual(loadedProcess, loadedProcess2); int n = loadedProcess.Activities.Count; for (int i = 0; i < n; i++) { if (loadedProcess.Activities[i].Descriptor != loadedProcess.Descriptor.InitialActivity) { WfTransferParams transferPara = new WfTransferParams(loadedProcess.Activities[i].Descriptor); loadedProcess.MoveTo(transferPara); WfRuntime.PersistWorkflows(); } loadedProcess = WfRuntime.GetProcessByActivityID(loadedProcess.Activities[i].ID); } IWfProcess OnceAgainloadedProcess = WfRuntime.GetProcessByProcessID(process.ID); Assert.AreEqual(OnceAgainloadedProcess.ID, process.ID); }
public void ReturnTestWithBranchActivity() { IWfProcessDescriptor desp = WfProcessTestCommon.CreateProcessDescriptor(); desp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object)); GetProcDespWithBranchActivities(desp.Activities[1], 2); WfProcessStartupParams startupParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(desp); IWfProcess process = WfRuntime.StartWorkflow(startupParams); ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process); process = WfRuntime.GetProcessByProcessID(process.ID); ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.AreEqual(2, process.ElapsedActivities.Count); WfRuntime.ProcessContext.ActivityChangingContext.CreatorInstanceID = process.CurrentActivity.ID; process.CurrentActivity.CopyMainStreamActivities(process.Activities[1], null, WfControlOperationType.Return); //退件 ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.requestor, process); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.IsTrue(process.CurrentActivity.CreatorInstanceID.IsNotEmpty()); Assert.AreEqual(process.ElapsedActivities[2].ID, process.CurrentActivity.CreatorInstanceID); Assert.AreEqual(10, process.Activities.Count); }
public void ActivityOperatorResourceTest() { IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee(); IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity; WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1); IUser requestor = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object; tp.Operator = requestor; process.MoveTo(tp); WfActivityOperatorResourceDescriptor resource = new WfActivityOperatorResourceDescriptor(); resource.ActivityKey = process.InitialActivity.Descriptor.Key; process.CurrentActivity.Descriptor.Resources.Add(resource); OguDataCollection <IUser> users = process.CurrentActivity.Descriptor.Resources.ToUsers(); Assert.IsTrue(users.Count > 0); Assert.AreEqual(requestor.ID, users[0].ID, "验证资源中的人员是否是之前活动的操作人"); WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); users = process.CurrentActivity.Descriptor.Resources.ToUsers(); Assert.IsTrue(users.Count > 0, "重新加载后资源中应该有人"); Assert.AreEqual(requestor.ID, users[0].ID, "重新加载后验证资源中的人员是否是之前活动的操作人"); }
public void NoticeOfLeaveActivity() { IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee(); IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity; WfUserResourceDescriptor userResDesp = GetUserResDespInstance(); nextActivityDesp.LeaveEventReceivers.Add(userResDesp); WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver2); process.MoveTo(tp); WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); process.MoveTo(new WfTransferParams(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity)); WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); string actKey = process.CurrentActivity.Descriptor.FromTransitions[0].FromActivity.Key; Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(userResDesp.User.ID, process.Activities[1].ID, TaskStatus.Yue)); }
public void MainStreamActivitiesWithConditionActivityPassed() { IWfProcessDescriptor desp = WfProcessTestCommon.CreateProcessDescriptor(); desp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object)); IWfActivityDescriptor actDesp = desp.Activities[1]; AddActivitiesDespToSameActivityDesp(actDesp, 2); ToTransitionsDescriptorCollection transDespColl = actDesp.ToTransitions; SetTransitionCondition(transDespColl[0], false, 1); SetTransitionCondition(transDespColl[1], true, 3); WfProcessStartupParams startupParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(desp); IWfProcess process = WfRuntime.StartWorkflow(startupParams); ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process); process = WfRuntime.GetProcessByProcessID(process.ID); ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process); process = WfRuntime.GetProcessByProcessID(process.ID); ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.requestor, process); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.AreEqual(3, process.ElapsedActivities.Count); WfMainStreamActivityDescriptorCollection coll = process.Descriptor.GetMainStreamActivities(); Assert.AreEqual(process.Activities.Count - 1, coll.Count); Assert.AreEqual(transDespColl[1].ToActivity.Key, coll[2].Activity.Key, "此处为动态添加的活动"); }
private void serverConfirmButton_Click(object sender, EventArgs e) { try { if (this.processGrid != null) { List <WorkflowInfo> processInfoList = new List <WorkflowInfo>(); foreach (string key in this.processGrid.SelectedKeys) { IWfProcess process = WfRuntime.GetProcessByProcessID(key); var processInfo = WorkflowInfo.ProcessAdapter(process); processInfoList.Add(processInfo); } HtmlInputHidden resultData = (HtmlInputHidden)WebControlUtility.FindControlByID(this, "resultData", true); if (resultData != null) { resultData.Value = JSONSerializerExecute.Serialize(processInfoList); } ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "Close", string.Format("window.returnValue = $get('{0}').value; top.close()", resultData.ClientID), true); } } catch (System.Exception ex) { string errorScript = WebUtility.GetShowClientErrorScript(ex.Message, ex.StackTrace, "错误"); ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "ShowError", "SubmitButton.resetAllStates();" + errorScript, true); } }
public void EditActivityConditionExecutorTest() { WfConverterHelper.RegisterConverters(); IWfProcess process = WfProcessTestCommon.StartupSimpleProcessDescriptorWithActivityCondition(); IWfActivity targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity"); const string targetCondition = "Amount > 5000000"; targetActivity.Descriptor.Condition.Expression = targetCondition; targetActivity.Descriptor.Properties["Condition"].StringValue = JSONSerializerExecute.Serialize(targetActivity.Descriptor.Condition); WfEditActivityPropertiesExecutor executor = new WfEditActivityPropertiesExecutor(process.CurrentActivity, process, targetActivity.Descriptor, true); executor.Execute(); process = WfRuntime.GetProcessByProcessID(process.ID); targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity"); Assert.AreEqual(targetCondition, targetActivity.Descriptor.Condition.Expression); IWfActivityDescriptor msActDesp = process.Activities.FindActivityByDescriptorKey("NormalActivity").GetMainStreamActivityDescriptor(); Console.WriteLine(msActDesp.Condition.Expression); Assert.AreEqual(targetCondition, msActDesp.Condition.Expression); }
public void BasicAdminDeleteTransitionWithMainStreamExecutorTest() { IWfProcess process = WfProcessTestCommon.StartupSimpleProcess(); IWfActivityDescriptor targetDesp = process.Descriptor.Activities["NormalActivity"]; IWfTransitionDescriptor transitionDesp = targetDesp.ToTransitions.FirstOrDefault(); IWfActivityDescriptor nextActDesp = transitionDesp.ToActivity; WfAdminDeleteTransitionExecutor executor = new WfAdminDeleteTransitionExecutor(process.CurrentActivity, process.Descriptor, transitionDesp, true); executor.Execute(); process = WfRuntime.GetProcessByProcessID(process.ID); IWfProcessDescriptor processDesp = process.Descriptor; targetDesp = processDesp.Activities[targetDesp.Key]; nextActDesp = processDesp.CompletedActivity; Assert.IsNull(targetDesp.ToTransitions.FirstOrDefault()); Assert.IsNull(nextActDesp.FromTransitions.FirstOrDefault()); processDesp = process.MainStream; targetDesp = processDesp.Activities[targetDesp.Key]; nextActDesp = processDesp.CompletedActivity; Assert.IsNull(targetDesp.ToTransitions.FirstOrDefault()); Assert.IsNull(nextActDesp.FromTransitions.FirstOrDefault()); }
public void CancelProcessInOtherActivityTest() { IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee(); WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity; WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.requestor); process.MoveTo(tp); WfRuntime.PersistWorkflows(); UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks(b => b.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID)); Console.WriteLine("Current Activity ID: {0}", process.CurrentActivity.ID); Console.WriteLine("User Task Count: {0}", tasks.Count); process = CancelProcess(process, false); UserTaskCollection userAccomlishedTasks = UserTaskAdapter.Instance.GetUserAccomplishedTasks(UserTaskIDType.ActivityID, UserTaskFieldDefine.All, false, process.CurrentActivity.ID); Console.WriteLine("User Accomplished Task Count: {0}", userAccomlishedTasks.Count); Assert.AreEqual(tasks.Count, userAccomlishedTasks.Count); }
private static IWfProcess GetProcessInstanceWithAssigneesResource() { IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee(); IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity; WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver2); process.MoveTo(tp); WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); IWfActivityDescriptor actDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity; WfActivityAssigneesResourceDescriptor actAssResDesp = new WfActivityAssigneesResourceDescriptor(); actAssResDesp.ActivityKey = actDesp.Key; actDesp.Resources.Add(actAssResDesp); nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity; WfTransferParams tpa = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1); process.MoveTo(tpa); WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); return(process); }
public void CancelSerialSubProcessTest() { IWfProcess process = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Serial, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete); IWfProcess branchProcess = process.CurrentActivity.BranchProcessGroups[0].Branches[0]; CheckOperationAndStatusBeforeCancelProcess(branchProcess); CancelProcess(branchProcess, false); process = WfRuntime.GetProcessByProcessID(process.ID); //检查第二个流程是否启动 branchProcess = process.CurrentActivity.BranchProcessGroups[0].Branches[1]; Assert.AreEqual(WfProcessStatus.Running, branchProcess.Status); ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(process.CurrentActivity, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete); WfRuntime.PersistWorkflows(); ProcessTestHelper.ProcessPendingActivity(process.CurrentActivity.ID); process = WfRuntime.GetProcessByProcessID(process.ID); branchProcess = process.CurrentActivity.BranchProcessGroups[0].Branches[1]; Assert.AreEqual(WfProcessStatus.Completed, branchProcess.Status, "第二个子流程的状态"); }
public void MovetoDelegationTest() { WfDelegation delegation = PrepareDelegation(); WfDelegationAdapter.Instance.Update(delegation); //添加委托 try { //创建流程 IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee(); IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity; WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1); process.MoveTo(tp); //流转 WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.IsTrue((ProcessTestHelper.GetActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban).Count) >= 2, "至少有两个待办事项。或许其它人也会去为当前人指定相应的委托人"); } finally { WfDelegationAdapter.Instance.Delete(delegation); //清理委托 } }
protected override void AfterCreateProcessInstance(SysTaskProcess sysTaskProcess) { sysTaskProcess.Name = string.Format("作废ID为{0}的流程", this.ProcessID); int index = 0; sysTaskProcess.OwnerActivityID = this.OwnerSysActivityID; IWfProcess process = WfRuntime.GetProcessByProcessID(this.ProcessID); WfProcessCurrentInfoCollection branchProcessesStatus = WfRuntime.GetProcessStatusByOwnerActivityID(process.CurrentActivity.ID, string.Empty, false); if (branchProcessesStatus.Count > 0 && this.CancelAllBranchProcesses) { //作废子流程 sysTaskProcess.Activities.Add(sysTaskProcess.CreateDispatchCancelBranchesProcessActivity(process.CurrentActivity.ID, this.CancelAllBranchProcesses, index++)); } if (this.CancelSelf) { sysTaskProcess.Activities.Add(sysTaskProcess.CreateCancelProcessActivity(this.ProcessID, index++)); } sysTaskProcess.Activities.Add(sysTaskProcess.CreateExitMaintainingActivity(this.ProcessID, index++)); }
public void CancelDelegationTest() { WfDelegation delegation = PrepareDelegation(); WfDelegationAdapter.Instance.Update(delegation); try { IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee(); IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity; WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1); process.MoveTo(tp); WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); process.CancelProcess(false); //取消 WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); Assert.AreEqual(2, ProcessTestHelper.GetActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Yue).Count, "应该产生两条待阅"); } finally { WfDelegationAdapter.Instance.Delete(delegation); //清理委托 } }
public void ExpenseProcessSerializationTest() { IWfProcessDescriptor processDesp = WfProcessTestCommon.LoadProcessDescriptorFromFile("Expense.xml"); IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp); process.ApplicationRuntimeParameters["Amount"] = 500; WfRuntime.PersistWorkflows(); process = WfRuntime.GetProcessByProcessID(process.ID); WfProcessTestCommon.MoveToNextDefaultActivityWithExecutor(process); process = WfRuntime.GetProcessByProcessID(process.ID); IWfActivityDescriptor currentActDesp = process.CurrentActivity.Descriptor; ToTransitionsDescriptorCollection transitions = currentActDesp.ToTransitions; foreach (string key in transitions.GetAllKeys()) { Assert.IsTrue(key.IsNotEmpty()); IWfTransitionDescriptor transition = transitions[key]; Assert.AreEqual(key, transition.Key); } }
public static WfClientProcess GetClientProcess(IWfClientSearchParameters parameters) { IWfProcess process = null; if (parameters.ActivityID.IsNotEmpty()) { process = WfRuntime.GetProcessByActivityID(parameters.ActivityID); } else { if (parameters.ProcessID.IsNotEmpty()) { process = WfRuntime.GetProcessByProcessID(parameters.ProcessID); } else { if (parameters.ResourceID.IsNotEmpty()) { process = WfRuntime.GetProcessByResourceID(parameters.ResourceID).FirstOrDefault(); } } } return(GetClientProcess(process)); }
public void SimpleProcessPersistTest() { IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee(); //process.DefaultTaskTitle = "测试保存的流程"; ProcessTestHelper.OutputExecutionTime(() => WfRuntime.PersistWorkflows(), "保存简单流程"); try { IWfProcess loadedProcess = WfRuntime.GetProcessByProcessID(process.ID); Assert.AreEqual(process.ID, loadedProcess.ID); Assert.AreEqual(process.Status, loadedProcess.Status); Assert.AreEqual(DataLoadingType.External, loadedProcess.LoadingType); WfTransferParams transferParams = new WfTransferParams(process.Descriptor.CompletedActivity); transferParams.Assignees.Add(new WfAssignee((IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object)); transferParams.Assignees.Add(new WfAssignee((IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object)); loadedProcess.MoveTo(transferParams); WfRuntime.PersistWorkflows(); Assert.AreEqual(process.ID, loadedProcess.ID); Assert.AreEqual(WfProcessStatus.Completed, loadedProcess.Status); Assert.AreEqual(DataLoadingType.External, loadedProcess.LoadingType); } finally { //WfRuntime.DeleteProcessByProcessID(process.ID); } }
public static WfClientProcess Cancel(WfClientCancelParameters parameters) { IWfProcess process = WfRuntime.GetProcessByProcessID(parameters.ProcessID); IWfActivity activity = process.CurrentActivity; if (activity == null || activity.Assignees == null)// || !activity.Assignees.Contains(UserHelper.UserId)) { return(null); } WfCancelProcessExecutor executor = new WfCancelProcessExecutor(activity, process); GenericOpinion serverOpinion = PrepareOpinion(process.CurrentActivity, parameters.CurrentOpinion, DeluxeIdentity.CurrentUser); serverOpinion.OpinionType = "拒绝"; if (serverOpinion.Content.IsNullOrEmpty()) { serverOpinion.Content = "拒绝"; } executor.PrepareApplicationData += dataContext => GenericOpinionAdapter.Instance.Update(serverOpinion); return(GetClientProcess(executor.Execute())); }
public void SingleStepWithdrawByDynamicAddReplay() { //会签都是针对同样的两个人操作,且串行 IUser user = (IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object; string procResourceId = GetStartWorkflowResourceID(user); WfProcessCollection processes = WfRuntime.GetProcessByResourceID(procResourceId); string processID = processes[0].ID; MoveToExecutor(processes[0]); Assert.AreEqual(1, processes[0].ElapsedActivities.Count); //initial IWfProcess proc = WfRuntime.GetProcessByProcessID(processID); List <IUser> users; ConsignExecutorWithCondition(proc, out users); proc = WfRuntime.GetProcessByProcessID(processID); WfWithdrawExecutor withdrawExec = new WfWithdrawExecutor(proc.CurrentActivity, proc.CurrentActivity); withdrawExec.Execute(); proc = WfRuntime.GetProcessByProcessID(processID); Assert.AreEqual(1, proc.ElapsedActivities.Count); }
public string GetProcessUrl(string processID, bool autoNormalize) { IWfProcess process = WfRuntime.GetProcessByProcessID(processID); string result = GetUrlFromCurrentUserTask(process); if (result.IsNullOrEmpty()) { result = GetUrlFromAppCommonInfo(process); } if (result.IsNullOrEmpty()) { result = GetUrlFromUserAccomplishedTask(process); } if (result.IsNotEmpty() && autoNormalize) { NameValueCollection uriParams = UriHelper.GetUriParamsCollection(result); uriParams.Remove("activityID"); uriParams["processID"] = process.ID; result = UriHelper.CombineUrlParams(result, uriParams); result = UserTask.GetNormalizedUrl(process.Descriptor.ApplicationName, process.Descriptor.ProgramName, result); } return(result); }
public void ReturnExecutorTestReplay() { IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee(); ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process); process = WfRuntime.GetProcessByProcessID(process.ID); ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process); //退件到初始活动 process = WfRuntime.GetProcessByProcessID(process.ID); WfReturnExecutor returnExec = new WfReturnExecutor(process.CurrentActivity, process.Activities[0]); returnExec.Execute(); Assert.IsTrue(process.CurrentActivity.CreatorInstanceID != ""); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban)); process = WfRuntime.GetProcessByProcessID(process.ID); IWfActivity act = process.Activities.FindActivityByDescriptorKey(process.CurrentActivity.Descriptor.AssociatedActivityKey); Assert.AreEqual(act.Assignees.Count, process.CurrentActivity.Assignees.Count); Assert.AreEqual(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity.AssociatedActivityKey, act.Descriptor.ToTransitions[0].ToActivity.Key); Assert.IsTrue(process.Activities.FindActivityByDescriptorKey(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity.Key).Assignees.Count > 0); }
public void WaitAllCompleteOfSerialBranchProcessTest() { IWfProcess wfProcess = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Serial, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete); AssertProcessStatus(wfProcess); CheckProcessRelationOperationAndStatus(wfProcess, false); //第一个子流程办结 wfProcess.Activities[1].BranchProcessGroups[0].Branches[0].CompleteProcess(true); WfRuntime.PersistWorkflows(); wfProcess = WfRuntime.GetProcessByProcessID(wfProcess.ID); Assert.AreEqual(WfProcessStatus.Completed, wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[0].Status); Assert.AreEqual(WfProcessStatus.Running, wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].Status); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].InitialActivity.ID, TaskStatus.Ban)); //第二个子流程办结 wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].CompleteProcess(true); WfRuntime.PersistWorkflows(); ProcessTestHelper.ProcessPendingActivity(wfProcess.CurrentActivity.ID); IWfProcess wfProc = WfRuntime.GetProcessByProcessID(wfProcess.ID); Assert.AreEqual(WfProcessStatus.Completed, wfProc.CurrentActivity.BranchProcessGroups[0].Branches[0].Status); Assert.AreEqual(WfProcessStatus.Completed, wfProc.CurrentActivity.BranchProcessGroups[0].Branches[1].Status); Assert.AreEqual(WfActivityStatus.Running, wfProc.CurrentActivity.Status); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProc.CurrentActivity.ID, TaskStatus.Ban)); }
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 BasicAdminAddActivityWithMainStreamExecutorTest() { IWfProcess process = WfProcessTestCommon.StartupSimpleProcess(); const string targetName = "修改后的名称"; IWfActivityDescriptor targetDesp = new WfActivityDescriptor(process.Descriptor.FindNotUsedActivityKey(), WfActivityType.NormalActivity); targetDesp.Properties.SetValue("Name", targetName); process.Descriptor.Activities.Add(targetDesp); WfActivityBase.CreateActivityInstance(targetDesp, process); WfAdminAddActivityExecutor executor = new WfAdminAddActivityExecutor(process.CurrentActivity, process, null, targetDesp, true); executor.Execute(); process = WfRuntime.GetProcessByProcessID(process.ID); targetDesp = process.Descriptor.Activities[targetDesp.Key]; Assert.IsNotNull(targetDesp); Assert.AreEqual(targetName, targetDesp.Properties.GetValue("Name", string.Empty)); IWfActivityDescriptor msActDesp = targetDesp.Instance.GetMainStreamActivityDescriptor(); Assert.IsNotNull(msActDesp); Assert.AreEqual(process.MainStream, msActDesp.Process); Assert.AreEqual(targetName, msActDesp.Properties.GetValue("Name", string.Empty)); }