Exemple #1
0
        public void BookmakrResumption()
        {
            var process = this.Prepare();

            //启动流程
            this.Evict(process);
            var r1 = new ProcessStartResumption(process);

            this._resumptionService.Add(r1);
            this._scheduler.Resume(r1);
            Thread.Sleep(1000);

            //获取任务对应的书签名
            var bookmarkName = this._sessionManager
                               .OpenSession()
                               .CreateCriteria <WorkItemCreateResumption>()
                               .Add(Expression.Eq("Process", process))
                               .UniqueResult <WorkItemCreateResumption>().HumanActivityInstance.ReferredBookmarkName;

            _log.Info(bookmarkName);

            //恢复书签
            this.Evict(process);
            var persisted = this._processService.GetProcess(process.ID);
            var r2        = new BookmarkResumption(persisted, "节点", bookmarkName, "Agree");

            this._resumptionService.Add(r2);
            this._scheduler.Resume(r2);
            Thread.Sleep(3000);
            this.AssertExecutedResumption(r2);
        }
Exemple #2
0
        private void GoAndScheduleTo(Process process, int index)
        {
            this.ClearRuntimeData(process);
            TestHelper.ChangeProcessStatus(process, ProcessStatus.Running);
            TestHelper.UpdateCurrentNode(process, index);
            var start = new ProcessStartResumption(process);

            this._resumptionService.Add(start);
            this.SyncScheduleUntil(process);
        }
Exemple #3
0
        public void ActivityInstanceCancelResumption()
        {
            var process = this.PrepareParentProcess();

            #region 人工节点取消
            //运行流程
            var start = new ProcessStartResumption(process);
            this._resumptionService.Add(start);
            this._scheduler.Resume(start);
            Thread.Sleep(1000);
            //查找当前的人工节点
            var human = this._sessionManager
                        .OpenSession()
                        .CreateCriteria <HumanActivityInstance>()
                        .Add(Expression.Eq("ProcessId", process.ID))
                        .UniqueResult <HumanActivityInstance>();
            this.Evict(process);
            process = this._processService.GetProcess(process.ID);
            //取消人工节点
            var r = new ActivityInstanceCancelResumption(process, human);
            this._resumptionService.Add(r);
            this._scheduler.Resume(r);
            this.AssertExecutedResumption(r);
            #endregion

            #region 子流程节点取消
            //在子流程节点处运行流程
            TestHelper.UpdateCurrentNode(process, SubProcessNodeIndex);
            start = new ProcessStartResumption(process);
            this._resumptionService.Add(start);
            this._scheduler.Resume(start);
            Thread.Sleep(1000);
            //运行子流程创建调度
            var r_sub = this._resumptionService.GetValidWaitingResumptions(process).First(o =>
                                                                                          o is SubProcessCreateResumption) as SubProcessCreateResumption;
            this._scheduler.Resume(r_sub);

            //创建节点取消调度项
            r = new ActivityInstanceCancelResumption(process, r_sub.SubProcessActivityInstance);
            this._resumptionService.Add(r);

            //子流程仍处于running或调度状态无法撤销
            try { this._scheduler.Resume(r); Assert.IsTrue(false); }
            catch (Exception e) { _log.Info(e.Message); }
            //将子流程的调度项清空并置为非Running后
            var subProcess = this._processService.GetProcess(r_sub.SubProcessActivityInstance.SubProcessId.Value);
            this.ClearResumption(subProcess);
            TestHelper.MarkProcessAsActive(subProcess);
            this._scheduler.Resume(r);
            this.AssertExecutedResumption(r);
            //子流程被删除
            Assert.AreEqual(ProcessStatus.Deleted, subProcess.Status);
            #endregion
        }
Exemple #4
0
        public void SubProcessCompleteResumption()
        {
            #region 父子流程创建
            //父流程
            var parent = this.PrepareParentProcess();
            //将父流程设置到子流程节点
            TestHelper.UpdateCurrentNode(parent, SubProcessNodeIndex);
            //运行父子流程
            var start = new ProcessStartResumption(parent);
            this._resumptionService.Add(start);
            this._scheduler.Resume(start);
            Thread.Sleep(1000);
            //运行子流程创建调度
            var r_sub = this._resumptionService.GetValidWaitingResumptions(parent).First(o =>
                                                                                         o is SubProcessCreateResumption) as SubProcessCreateResumption;
            this._scheduler.Resume(r_sub);
            parent = this._processService.GetProcess(parent.ID);
            //获取子流程
            var subProcess = this._processService.GetProcess(r_sub.SubProcessActivityInstance.SubProcessId.Value);
            #endregion

            //创建子流程完成调度项
            TestHelper.ChangeProcessStatus(parent, ProcessStatus.Running);
            TestHelper.ChangeProcessStatus(subProcess, ProcessStatus.Completed);
            var r = new SubProcessCompleteResumption(parent, subProcess);
            this._resumptionService.Add(r);

            //执行子流程结束调度
            this._scheduler.Resume(r);
            //同时会恢复父流程书签
            Thread.Sleep(5000);
            this.AssertExecutedResumption(r);

            this.Evict(subProcess);
            this.Evict(parent);
            parent     = this._processService.GetProcess(parent.ID);
            subProcess = this._processService.GetProcess(subProcess.ID);
            //子流程应为完成状态
            Assert.AreEqual(ProcessStatus.Completed, subProcess.Status);
            //由于父流程在最后一个节点,也应为完成
            Assert.AreEqual(ProcessStatus.Completed, parent.Status);
        }
Exemple #5
0
        public void ProcessStartResumption()
        {
            var process = this.Prepare();

            Assert.AreEqual(ProcessStatus.Running, process.Status);

            var r = new ProcessStartResumption(process);

            this._resumptionService.Add(r);

            //执行流程启动调度
            this._scheduler.Resume(r);
            Thread.Sleep(1000);

            this.Evict(process);
            this.AssertExecutedResumption(r);

            process = this._processService.GetProcess(process.ID);
            //完成后new->running
            Assert.AreEqual(ProcessStatus.Running, process.Status);
        }
Exemple #6
0
        public void ErrorResumption()
        {
            var process = this.Prepare();

            //启动流程
            this.Evict(process);
            var r1 = new ProcessStartResumption(process);

            this._resumptionService.Add(r1);
            this._scheduler.Resume(r1);
            Thread.Sleep(1000);
            //错误恢复
            this.Evict(process);
            var persisted = this._processService.GetProcess(process.ID);

            //将流程置为Running
            TestHelper.ChangeProcessStatus(persisted, ProcessStatus.Running);
            var r2 = new ErrorResumption(persisted, 1);

            this._resumptionService.Add(r2);
            this._scheduler.Resume(r2);
            Thread.Sleep(1000);
            this.AssertExecutedResumption(r2);
        }
Exemple #7
0
        public void Create()
        {
            var process    = this.Prepare();
            var subProcess = this.PrepareSubProcess(process);

            //流程发起调度
            WaitingResumption r = new ProcessStartResumption(process);

            this._resumptionService.Add(r);
            this.Evict(r);
            WaitingResumption r2 = this._resumptionService.Get(r.ID);

            Assert.IsNotNull(r2);
            Assert.IsInstanceOf <ProcessStartResumption>(r2);
            //书签恢复调度
            r = new BookmarkResumption(process, "节点1", "bookmark", "result");
            this._resumptionService.Add(r);
            this.Evict(r);
            r2 = this._resumptionService.Get(r.ID);
            Assert.IsNotNull(r2);
            Assert.IsInstanceOf <BookmarkResumption>(r2);
            //错误恢复调度
            r = new ErrorResumption(process, 0);
            this._resumptionService.Add(r);
            this.Evict(r);
            r2 = this._resumptionService.Get(r.ID);
            Assert.IsNotNull(r2);
            Assert.IsInstanceOf <ErrorResumption>(r2);
            //人工任务创建调度
            var h = new HumanActivityInstance(process.ID, 0, 1, "节点", "bookmark", new string[] { "houkun" });

            this._processService.CreateActivityInstance(h);
            r = new WorkItemCreateResumption(process, h);
            this._resumptionService.Add(r);
            this.Evict(r);
            r2 = this._resumptionService.Get(r.ID);
            Assert.IsNotNull(r2);
            Assert.IsInstanceOf <WorkItemCreateResumption>(r2);
            //流程完成调度
            TestHelper.ChangeProcessStatus(subProcess, ProcessStatus.Completed);
            r = new SubProcessCompleteResumption(process, subProcess);
            this._resumptionService.Add(r);
            this.Evict(r);
            r2 = this._resumptionService.Get(r.ID);
            Assert.IsNotNull(r2);
            Assert.IsInstanceOf <SubProcessCompleteResumption>(r2);
            //子流程启动调度
            var sub = new SubProcessActivityInstance(process.ID, 0, 1, "节点", "bookmark");

            this._processService.CreateActivityInstance(sub);
            r = new SubProcessCreateResumption(process, sub);
            this._resumptionService.Add(r);
            this.Evict(r);
            r2 = this._resumptionService.Get(r.ID);
            Assert.IsNotNull(r2);
            Assert.IsInstanceOf <SubProcessCreateResumption>(r2);
            //节点实例取消调度
            r = new ActivityInstanceCancelResumption(process, h);
            this._resumptionService.Add(r);
            this.Evict(r);
            r2 = this._resumptionService.Get(r.ID);
            Assert.IsNotNull(r2);
            Assert.IsInstanceOf <ActivityInstanceCancelResumption>(r2);
        }