Exemplo n.º 1
0
        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("主线流程中的主线活动");
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);

            //撤回的单步是指业务上的一步,如在上一步动态添加的两个点,则当前就会撤回到动态添加两个点的活动
        }
Exemplo n.º 4
0
        public static IWfProcess WithdrawByExecutor(this IWfProcess process, bool cancelProcess = false)
        {
            WfWithdrawExecutor executor = new WfWithdrawExecutor(process.CurrentActivity, process.CurrentActivity, true, cancelProcess);

            executor.Execute();

            return(WfRuntime.GetProcessByProcessID(process.ID));;
        }
Exemplo n.º 5
0
        private static IWfProcess DoWithdrawExecutor(IWfProcess originalProcess)
        {
            IWfProcess         process          = WfRuntime.GetProcessByProcessID(originalProcess.ID);
            WfWithdrawExecutor withdrawExecutor = new WfWithdrawExecutor(process.CurrentActivity, process.CurrentActivity);

            withdrawExecutor.Execute();

            return(WfRuntime.GetProcessByProcessID(originalProcess.ID));
        }
Exemplo n.º 6
0
        public void WithdrawProcess(string processID, bool cancelAllBranchProcesses)
        {
            processID.CheckStringIsNullOrEmpty("processID");

            IWfProcess process = WfRuntime.GetProcessByProcessID(processID);

            WfWithdrawExecutor executor = new WfWithdrawExecutor(process.CurrentActivity, process.CurrentActivity, cancelAllBranchProcesses);

            executor.Execute();
        }
Exemplo n.º 7
0
        public static WfClientProcess Withdraw(WfClientWithdrawParameters parameters)
        {
            IWfProcess process = WfRuntime.GetProcessByProcessID(parameters.ProcessID);

            WfWithdrawExecutor executor = new WfWithdrawExecutor(process.CurrentActivity, process.CurrentActivity, true);

            executor.Execute();

            return(GetClientProcessByProcessID(process.ID));
        }
        public WfClientProcessInfo WithdrawAndCancel(string processID, WfClientRuntimeContext runtimeContext)
        {
            OperationContext.Current.FillContextToOguServiceContext();

            return(ExecuteProcessActionByProcessID(processID, runtimeContext,
                                                   (process) =>
            {
                WfWithdrawExecutor executor = new WfWithdrawExecutor(process.CurrentActivity, process.CurrentActivity, true, true);

                executor.SaveApplicationData += (dataContext) => SaveAbortOpinion(runtimeContext.Opinion);
                return executor;
            }));
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }