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 void SingleStepWithDrawTest() { IUser user = (IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object; string procResourceId = GetStartWorkflowResourceID(user); WfProcessCollection processes; for (int i = 0; i < 2; i++) { processes = WfRuntime.GetProcessByResourceID(procResourceId); MoveToExecutor(processes[0]); } processes = WfRuntime.GetProcessByResourceID(procResourceId); IWfProcess process = processes[0]; Assert.AreEqual(2, process.ElapsedActivities.Count); WfWithdrawExecutor exec = new WfWithdrawExecutor(process.CurrentActivity, process.CurrentActivity); exec.Execute(); processes = WfRuntime.GetProcessByResourceID(procResourceId); MoveToExecutor(processes[0]); processes = WfRuntime.GetProcessByResourceID(procResourceId); WfActivityCollection coll = processes[0].ElapsedActivities; Assert.AreEqual(coll[coll.Count - 1].Descriptor.ToTransitions[0].ToActivity.Key, processes[0].CurrentActivity.Descriptor.Key); //撤回的单步是指业务上的一步,如在上一步动态添加的两个点,则当前就会撤回到动态添加两个点的活动 }
public List <WfClientProcess> GetProcessesByResourceID(string resourceID, WfClientUser user, WfClientProcessInfoFilter filter) { resourceID.CheckStringIsNullOrEmpty("resourceID"); OperationContext.Current.FillContextToOguServiceContext(); WfProcessCollection processes = WfRuntime.GetProcessByResourceID(resourceID).SortByUserRelativity((IUser)user.ToOguObject()); WfClientProcessConverter converter = new WfClientProcessConverter(filter); List <WfClientProcess> result = new List <WfClientProcess>(); foreach (IWfProcess process in processes) { WfClientProcess client = null; converter.ServerToClient(process, ref client); client.AuthorizationInfo = WfClientProcessInfoBaseConverter.Instance.GetAuthorizationInfo(process, process.CurrentActivity, user); if ((filter & WfClientProcessInfoFilter.CurrentOpinion) == WfClientProcessInfoFilter.CurrentOpinion) { client.FillCurrentOpinion(process.CurrentActivity, user); } result.Add(client); } return(result); }
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 List <WfClientProcessInfo> GetProcessesInfoByResourceID(string resourceID, WfClientUser user) { resourceID.CheckStringIsNullOrEmpty("resourceID"); OperationContext.Current.FillContextToOguServiceContext(); WfProcessCollection processes = WfRuntime.GetProcessByResourceID(resourceID).SortByUserRelativity((IUser)user.ToOguObject()); List <WfClientProcessInfo> result = new List <WfClientProcessInfo>(); processes.ForEach(process => result.Add(process.ToClientProcessInfo(user).FillCurrentOpinion(process.CurrentActivity, user))); return(result); }
public void MoveToExecutorTest() { IUser user = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object; string procResourceId = GetStartWorkflowResourceID(user); WfProcessCollection processes = WfRuntime.GetProcessByResourceID(procResourceId); IWfProcess process = processes[0]; string nextActivityDespKey = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity.Key; MoveToExecutor(process); IWfProcess proc = WfRuntime.GetProcessByProcessID(process.ID); Assert.AreEqual(nextActivityDespKey, proc.CurrentActivity.Descriptor.Key); }
public void StartWorkflowExecutorTest() { IUser user = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object; string procResourceId = GetStartWorkflowResourceID(user); WfProcessCollection processes = WfRuntime.GetProcessByResourceID(procResourceId); Assert.AreEqual(1, processes.Count); Assert.AreEqual(0, processes[0].ElapsedActivities.Count); WfUserResourceDescriptor uDesp = (WfUserResourceDescriptor)processes[0].InitialActivity.Descriptor.Resources[0]; Assert.AreEqual(user.ID, uDesp.User.ID); }
protected virtual void CopyWorkflow(string processDescKey, string appName, string programName, string sourceResourceID, string sourceProcessID, string relativeID, string relativeURL) { IWfProcess originalProcess = null; if (sourceProcessID.IsNotEmpty()) { originalProcess = WfRuntime.GetProcessByProcessID(sourceProcessID); } else { WfProcessCollection processes = WfRuntime.GetProcessByResourceID(sourceResourceID); (processes.Count > 0).FalseThrow("不能根据{0}找到对应的流程", sourceResourceID); originalProcess = processes[0]; } InnerStartWorkflow(processDescKey, appName, programName, relativeID, relativeURL, true, originalProcess.ApprovalRootProcess.RelativeParams); }
public void ConsignExecutorTest() { IUser user = (IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object; string procResourceID = GetStartWorkflowResourceID(user); string processID = string.Empty; WfProcessCollection processes = WfRuntime.GetProcessByResourceID(procResourceID); processID = processes[0].ID; MoveToExecutor(processes[0]); Assert.AreEqual(1, processes[0].ElapsedActivities.Count); processes = WfRuntime.GetProcessByResourceID(procResourceID); List <IUser> users; ConsignExecutor(processes[0], out users); processes = WfRuntime.GetProcessByResourceID(procResourceID); Assert.AreEqual(3, processes.Count, "共3个流程,主流程与两个子流程"); IWfProcess proc = WfRuntime.GetProcessByProcessID(processID); Assert.AreEqual(7, proc.Activities.Count); string k = proc.CurrentActivity.Descriptor.FromTransitions[0].FromActivity.Key; Assert.IsNotNull(proc.Activities.FindActivityByDescriptorKey(k).CreatorInstanceID, "添加会签点的活动确实没值"); Assert.AreEqual(WfActivityStatus.Pending, proc.CurrentActivity.Status); //NO Assert.AreEqual(users.Count, proc.CurrentActivity.BranchProcessGroups[0].Branches.Count); //使子流程完成 proc = WfRuntime.GetProcessByProcessID(processID); ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(proc.CurrentActivity, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete); WfRuntime.PersistWorkflows(); ProcessTestHelper.ProcessPendingActivity(proc.CurrentActivity.ID); proc = WfRuntime.GetProcessByProcessID(processID); Assert.AreEqual(WfActivityStatus.Running, proc.CurrentActivity.Status, "此为添加的会签点"); Assert.AreEqual(2, proc.CurrentActivity.BranchProcessGroups[0].Branches.Count, "存在两个子流程"); Assert.AreEqual(2, proc.ElapsedActivities.Count); MoveToExecutor(proc); Assert.AreEqual(3, proc.ElapsedActivities.Count); }
private bool OriginalDataExists(string resourceID) { bool result = false; try { WfProcessCollection processes = WfRuntime.GetProcessByResourceID(resourceID); result = processes.Count > 0; if (result == false) { result = AppCommonInfoAdapter.Instance.ExistsAndNotArchived(resourceID); } } catch (System.Exception) { } return(result); }
private void InitOriginalActivityByResourceID(string resourceID) { if (resourceID.IsNotEmpty()) { WfProcessCollection procCollection = WfRuntime.GetProcessByResourceID(resourceID); (procCollection.Count > 0).FalseThrow <WfRuntimeException>("不能根据'{0}'找到ResourceID对应的流程", resourceID); IWfProcess process = procCollection.Find(p => { return(p.HasParentProcess == false); }); if (process == null) { process = procCollection[0].SameResourceRootProcess; } OriginalActivity = process.CurrentActivity; this._OriginalCurrentActivity = OriginalActivity; } }
public void SingleStepWithDrawByDynamicAdd() { //Initial NormalActivity NormalActivity1 NormalActivity2 NormalActivity3 Completed 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 processes = WfRuntime.GetProcessByResourceID(procResourceId); List <IUser> users; ConsignExecutor(processes[0], out users); IWfProcess proc = WfRuntime.GetProcessByProcessID(processId); Assert.AreEqual(2, proc.ElapsedActivities.Count); //NormalActivity ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(proc.CurrentActivity, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete); WfRuntime.PersistWorkflows(); ProcessTestHelper.ProcessPendingActivity(proc.CurrentActivity.ID); proc = WfRuntime.GetProcessByProcessID(processId); WfWithdrawExecutor withdrawExec = new WfWithdrawExecutor(proc.CurrentActivity, proc.CurrentActivity); //"NO" withdrawExec.Execute(); proc = WfRuntime.GetProcessByProcessID(processId); Assert.AreEqual(1, proc.ElapsedActivities.Count); Assert.AreEqual(proc.Descriptor.GetMainStreamActivities().Count, proc.Activities.Count); Assert.AreEqual(proc.ElapsedActivities[0].Descriptor.ToTransitions[0].ToActivity.Key, proc.CurrentActivity.Descriptor.Key); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(proc.CurrentActivity.ID, TaskStatus.Ban)); Assert.IsTrue(proc.CurrentActivity.Descriptor.ToTransitions.Count == 1); }