Beispiel #1
0
        /// <summary>
        /// 删除不正常的流程实例(流程在取消状态,才可以进行删除!)
        /// </summary>
        /// <param name="processInstanceGUID"></param>
        /// <returns></returns>
        internal bool Delete(Guid processInstanceGUID)
        {
            bool     isDeleted = false;
            ISession session   = SessionFactory.CreateSession();

            try
            {
                ProcessInstanceEntity entity = ProcessInstanceRepository.GetById <ProcessInstanceEntity>(processInstanceGUID);

                if (entity.ProcessState == (int)ProcessStateEnum.Canceled)
                {
                    ProcessInstanceRepository.Delete <ProcessInstanceEntity>(processInstanceGUID, session.Connection, session.Transaction);
                    session.Commit();
                    isDeleted = true;
                }
                else
                {
                    throw new ProcessInstanceException("流程只有先取消,才可以删除!");
                }
            }
            catch (System.Exception)
            {
                session.Rollback();
                throw;
            }
            finally
            {
                session.Dispose();
            }

            return(isDeleted);
        }
Beispiel #2
0
        internal TransitionInstanceEntity CreateTransitionInstanceObject(ProcessInstanceEntity processInstance,
                                                                         TransitionEntity transition,
                                                                         ActivityInstanceEntity fromActivityInstance,
                                                                         ActivityInstanceEntity toActivityInstance,
                                                                         TransitionTypeEnum transitionType,
                                                                         WfLogonUser logonUser,
                                                                         byte conditionParseResult)
        {
            var entity = new TransitionInstanceEntity();

            entity.AppName                  = processInstance.AppName;
            entity.AppInstanceID            = processInstance.AppInstanceID;
            entity.TransitionInstanceGUID   = Guid.NewGuid();
            entity.ProcessGUID              = processInstance.ProcessGUID;
            entity.ProcessInstanceGUID      = processInstance.ProcessInstanceGUID;
            entity.TransitionGUID           = transition.TransitionGUID;
            entity.TransitionType           = (byte)transitionType;
            entity.FromActivityGUID         = transition.FromActivityGUID;
            entity.FromActivityInstanceGUID = fromActivityInstance.ActivityInstanceGUID;
            entity.FromActivityType         = fromActivityInstance.ActivityType;
            entity.FromActivityName         = fromActivityInstance.ActivityName;
            entity.ToActivityGUID           = transition.ToActivityGUID;
            entity.ToActivityInstanceGUID   = toActivityInstance.ActivityInstanceGUID;
            entity.ToActivityType           = toActivityInstance.ActivityType;
            entity.ToActivityName           = toActivityInstance.ActivityName;
            entity.ConditionParseResult     = conditionParseResult;
            entity.CreatedByUserID          = logonUser.UserID;
            entity.CreatedByUserName        = logonUser.UserName;
            entity.CreatedDateTime          = System.DateTime.Now;

            return(entity);
        }
Beispiel #3
0
        /// <summary>
        /// 获取运行中的流程实例
        /// </summary>
        /// <param name="appName"></param>
        /// <param name="appInstanceID"></param>
        /// <param name="processGUID"></param>
        /// <returns></returns>
        internal ProcessInstanceEntity GetRunningProcess(string appName,
                                                         int appInstanceID,
                                                         Guid processGUID)
        {
            ProcessInstanceEntity processInstanceEntity = null;
            var processInstanceList = GetProcessInstance(appName, appInstanceID, processGUID, ProcessStateEnum.Running).ToList();

            if (processInstanceList.Count == 1)
            {
                processInstanceEntity = processInstanceList[0];
            }

            return(processInstanceEntity);
        }
Beispiel #4
0
        /// <summary>
        /// 流程终止操作
        /// </summary>
        /// <returns></returns>
        internal bool Terminate(Guid processInstanceGUID)
        {
            ProcessInstanceEntity entity = ProcessInstanceRepository.GetById <ProcessInstanceEntity>(processInstanceGUID);

            if (entity.ProcessState == (int)ProcessStateEnum.Running ||
                entity.ProcessState == (int)ProcessStateEnum.Ready ||
                entity.ProcessState == (int)ProcessStateEnum.Suspended)
            {
                //ProcessInstanceRepository.Terminate(ProcessInstanceGUID);

                return(true);
            }
            else
            {
                throw new ProcessInstanceException("流程已经结束,或者已经被取消!");
            }
        }
Beispiel #5
0
        /// <summary>
        /// 根据流程定义,创建新的流程实例
        /// </summary>
        /// <param name="processID">流程定义ID</param>
        /// <returns>流程实例的ID</returns>
        internal ProcessInstanceEntity CreateNewProcessInstanceObject(string appName,
                                                                      int appInstanceID,
                                                                      ProcessEntity processEntity,
                                                                      int userID,
                                                                      string userName)
        {
            ProcessInstanceEntity entity = new ProcessInstanceEntity();

            entity.ProcessGUID           = processEntity.ProcessGUID;
            entity.ProcessInstanceGUID   = Guid.NewGuid();
            entity.ProcessName           = processEntity.ProcessName;
            entity.AppName               = appName;
            entity.AppInstanceID         = appInstanceID;
            entity.ProcessState          = (int)ProcessStateEnum.Running;
            entity.CreatedByUserID       = userID;
            entity.CreatedByUserName     = userName;
            entity.CreatedDateTime       = System.DateTime.Now;
            entity.LastUpdatedByUserID   = userID;
            entity.LastUpdatedByUserName = userName;
            entity.LastUpdatedDateTime   = System.DateTime.Now;

            return(entity);
        }
Beispiel #6
0
 /// <summary>
 /// 流程实例更新
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="wfLinqDataContext"></param>
 internal void Update(ProcessInstanceEntity entity,
                      ISession session)
 {
     ProcessInstanceRepository.Update(entity, session.Connection, session.Transaction);
 }
Beispiel #7
0
        /// <summary>
        /// 流程数据插入
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="wfLinqDataContext"></param>
        /// <returns></returns>
        internal void Insert(ProcessInstanceEntity entity, ISession session = null)
        {
            int result = ProcessInstanceRepository.Insert(entity, session.Connection, session.Transaction);

            Debug.WriteLine(string.Format("process instance inserted, Guid:{0}, time:{1}", entity.ProcessInstanceGUID.ToString(), System.DateTime.Now.ToString()));
        }