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 }
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); }