public ActivityInstanceCancelResumption(Process process, ActivityInstanceBase activityInstance) : base(process, process.Priority) { this.ActivityInstance = activityInstance; this.Validate(); }
void IProcessService.CreateActivityInstance(ActivityInstanceBase instance) { if (instance is SubProcessActivityInstance) { _subProcessCount += 1; } if (instance is ServerActivityInstance) { _serverCount += 1; } if (instance is HumanActivityInstance) { _humanCount += 1; } }
void IProcessService.CreateActivityInstance(ActivityInstanceBase instance) { }
void IProcessService.UpdateActivityInstance(ActivityInstanceBase instance) { _repository.UpdateActivityInstance(instance); this._log.InfoFormat("更新流程实例#{0}的节点实例“{1}”#{2}" , instance.ProcessId , instance.ActivityName , instance.ID); }
void IProcessService.CreateActivityInstance(ActivityInstanceBase instance) { _repository.AddActivityInstance(instance); this._log.InfoFormat( "创建节点实例信息:{0}|ActivityInstanceId={1}|ActivityName={2}|FlowNodeIndex={3}|ProcessId={4}" , instance , instance.ID , instance.ActivityName , instance.FlowNodeIndex , instance.ProcessId); }
bool IProcessService.CanRollback(Process process, User previousActioner, out ActivityInstanceBase previous, out string reason) { //TODO:是否要为rollback引入代理逻辑? reason = string.Empty; previous = null; if (!this.IsStatusOrSchedulingSafe(process, ProcessStatus.Active)) { if (this._log.IsDebugEnabled) this._log.DebugFormat("不允许回滚:{0}", reason = "只有处于活动状态的流程才允许回滚"); return false; } previous = (this as IProcessService).GetPreviousActivityInstance(process); #region 常规判断 if (previous == null) { if (this._log.IsDebugEnabled) this._log.DebugFormat("不允许回滚:{0}", reason = "没有找到上一个节点信息"); return false; } if (!(previous is HumanActivityInstance)) { if (this._log.IsDebugEnabled) this._log.DebugFormat("不允许回滚:{0}", reason = "上一个节点不是人工节点"); return false; } if (process.ProcessType.GetActivitySetting(previous.ActivityName).IsChildOfActivity) { if (this._log.IsDebugEnabled) this._log.DebugFormat("不允许回滚:{0}", reason = string.Format("上一节点“{0}”是其他节点的子节点,不支持回滚", previous.ActivityName)); return false; } #endregion #region 上一个节点是人工节点才允许回滚 var human = previous as HumanActivityInstance; if (!human.IsReady(previousActioner)) { if (this._log.IsDebugEnabled) this._log.DebugFormat("不允许回滚:{0}", reason = "传入的上一节点执行人并非实际执行人"); return false; } if (human.Actioners.Length > 1) { if (this._log.IsDebugEnabled) this._log.DebugFormat("不允许回滚:{0}", reason = string.Format("上一节点“{0}”执行人大于一人,不允许回滚", previous.ActivityName)); return false; } if (_workItemRepository.FindAllByProcess(process).FirstOrDefault(o => o.Status != WorkItemStatus.New) != null) { if (this._log.IsDebugEnabled) this._log.DebugFormat("不允许回滚:{0}", reason = string.Format("由于流程当前任务已开始被处理,无法回滚")); return false; } #endregion //TODO:目前未考虑子流程节点的情况 return true; }
void IProcessService.CancelAllAbout(Process process, ActivityInstanceBase activityInstance) { //取消所有调度请求 this._schedulerService.CancelAll(process, activityInstance.ID, activityInstance.ActivityName); //若是人工节点则取消所有人工任务 if (activityInstance is HumanActivityInstance) _workItemRepository.CancelAll(process, activityInstance.ID); //若是子流程节点则撤销对应的子流程实例 Process subProcess; var sub = activityInstance as SubProcessActivityInstance; if (sub != null && sub.SubProcessId.HasValue && (subProcess = _repository.FindBy(sub.SubProcessId.Value)) != null) this.CancelAllAbout(process, subProcess); this._log.InfoFormat("取消流程实例“{0}”#{1}的节点“{2}”#{3}相关的运行时信息" , process.Title , process.ID , activityInstance.ActivityName , activityInstance.ID); }
void IProcessService.CreateActivityInstance(ActivityInstanceBase instance) { if (instance is SubProcessActivityInstance) _subProcessCount += 1; if (instance is ServerActivityInstance) _serverCount += 1; if (instance is HumanActivityInstance) _humanCount += 1; }
public void UpdateActivityInstance(ActivityInstanceBase instance) { this.GetSession().Update(instance); }
public void AddActivityInstance(ActivityInstanceBase instance) { this.GetSession().Save(instance); }