Example #1
0
        public ActivityInstanceCancelResumption(Process process, ActivityInstanceBase activityInstance)
            : base(process, process.Priority)
        {
            this.ActivityInstance = activityInstance;

            this.Validate();
        }
        public ActivityInstanceCancelResumption(Process process, ActivityInstanceBase activityInstance)
            : base(process, process.Priority)
        {
            this.ActivityInstance = activityInstance;

            this.Validate();
        }
Example #3
0
 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) { }
Example #5
0
 void IProcessService.CreateActivityInstance(ActivityInstanceBase instance)
 {
 }
Example #6
0
        void IProcessService.UpdateActivityInstance(ActivityInstanceBase instance)
        {
            _repository.UpdateActivityInstance(instance);

            this._log.InfoFormat("更新流程实例#{0}的节点实例“{1}”#{2}"
                , instance.ProcessId
                , instance.ActivityName
                , instance.ID);
        }
Example #7
0
        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);
        }
Example #8
0
        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;
        }
Example #9
0
        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);
        }
Example #10
0
 void IProcessService.CreateActivityInstance(ActivityInstanceBase instance)
 {
     if (instance is SubProcessActivityInstance)
         _subProcessCount += 1;
     if (instance is ServerActivityInstance)
         _serverCount += 1;
     if (instance is HumanActivityInstance)
         _humanCount += 1;
 }
Example #11
0
 public void UpdateActivityInstance(ActivityInstanceBase instance)
 {
     this.GetSession().Update(instance);
 }
Example #12
0
 public void AddActivityInstance(ActivityInstanceBase instance)
 {
     this.GetSession().Save(instance);
 }