/// <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); }
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); }
/// <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); }
/// <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("流程已经结束,或者已经被取消!"); } }
/// <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); }
/// <summary> /// 流程实例更新 /// </summary> /// <param name="entity"></param> /// <param name="wfLinqDataContext"></param> internal void Update(ProcessInstanceEntity entity, ISession session) { ProcessInstanceRepository.Update(entity, session.Connection, session.Transaction); }
/// <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())); }