public void Delete(Guid id) { sysBpmsSequenceFlow SequenceFlow = this.Context.sysBpmsSequenceFlows.FirstOrDefault(d => d.ID == id); if (SequenceFlow != null) { this.Context.sysBpmsSequenceFlows.Remove(SequenceFlow); } }
public ResultOperation Update(sysBpmsSequenceFlow SequenceFlow) { ResultOperation resultOperation = new ResultOperation(); if (resultOperation.IsSuccess) { this.UnitOfWork.Repository <ISequenceFlowRepository>().Update(SequenceFlow); this.UnitOfWork.Save(); } return(resultOperation); }
public void Update(sysBpmsSequenceFlow sequenceFlow) { //To fix 'Attaching an entity failed' error. var local = this.Context.Set <sysBpmsSequenceFlow>().Local.FirstOrDefault(f => f.ID == sequenceFlow.ID); if (local != null) { this.Context.Entry(local).State = EntityState.Detached; local = null; } this.Context.Entry(sequenceFlow.Clone()).State = EntityState.Modified; }
public ResultOperation Delete(Guid SequenceFlowId) { ResultOperation resultOperation = null; try { resultOperation = new ResultOperation(); if (resultOperation.IsSuccess) { this.BeginTransaction(); sysBpmsSequenceFlow sysBpmsSequenceFlow = this.GetInfo(SequenceFlowId); foreach (sysBpmsCondition Condition in new ConditionService(this.UnitOfWork).GetList(null, SequenceFlowId, null)) { resultOperation = new ConditionService(this.UnitOfWork).Delete(Condition.ID); if (!resultOperation.IsSuccess) { break; } } //remove DefaultSequence foreach (sysBpmsGateway gateway in new GatewayService(base.UnitOfWork).GetListByDefaultSequence(SequenceFlowId)) { gateway.DefaultSequenceFlowID = null; resultOperation = new GatewayService(base.UnitOfWork).Update(gateway); if (!resultOperation.IsSuccess) { break; } } if (resultOperation.IsSuccess) { this.UnitOfWork.Repository <ISequenceFlowRepository>().Delete(SequenceFlowId); this.UnitOfWork.Save(); new ElementService(this.UnitOfWork).Delete(sysBpmsSequenceFlow.ElementID, sysBpmsSequenceFlow.ProcessID); } } } catch (Exception ex) { return(base.ExceptionHandler(ex)); } base.FinalizeService(resultOperation); return(resultOperation); }
public void Add(sysBpmsSequenceFlow sequenceFlow) { this.Context.sysBpmsSequenceFlows.Add(sequenceFlow); }
public (List <sysBpmsSequenceFlow> flowsList, bool result) CheckGateway(sysBpmsGateway gateway, sysBpmsSequenceFlow joinFromSequenceFlow, Guid?threadTaskID) { SequenceFlowService sequenceFlowService = new SequenceFlowService(this.UnitOfWork); List <sysBpmsSequenceFlow> acceptedForkSequenceFlows = new List <sysBpmsSequenceFlow>(); ConditionService conditionService = new ConditionService(this.UnitOfWork); switch ((sysBpmsGateway.e_TypeLU)gateway.TypeLU) { case sysBpmsGateway.e_TypeLU.ExclusiveGateWay: { List <sysBpmsCondition> listCondition = conditionService.GetList(gateway.ID, null, null); foreach (sysBpmsCondition condition in listCondition) { if (new DynamicCodeEngine(base.EngineSharedModel, this.UnitOfWork).ExecuteBooleanCode(DesignCodeUtility.GetDesignCodeFromXml(condition.Code))) { acceptedForkSequenceFlows.Add(sequenceFlowService.GetInfo(condition.SequenceFlowID.Value)); break; } } } break; case sysBpmsGateway.e_TypeLU.InclusiveGateWay: { List <sysBpmsThreadTask> listRunningThreadTask = new ThreadTaskService(base.UnitOfWork).GetListRunning(base.EngineSharedModel.CurrentThreadID.ToGuidObj()); if (!listRunningThreadTask.Any(c => c.ID != threadTaskID && gateway.TraceToStart.ToStringObj().Split(',').Contains(c.Task.ElementID))) { List <sysBpmsCondition> listCondition = conditionService.GetList(gateway.ID, null, null); foreach (sysBpmsCondition condition in listCondition) { if (new DynamicCodeEngine(base.EngineSharedModel, this.UnitOfWork).ExecuteBooleanCode(DesignCodeUtility.GetDesignCodeFromXml(condition.Code))) { acceptedForkSequenceFlows.Add(sequenceFlowService.GetInfo(condition.SequenceFlowID.Value)); } } } else { return(new List <sysBpmsSequenceFlow>(), true); } } break; case sysBpmsGateway.e_TypeLU.ParallelGateWay: { List <sysBpmsSequenceFlow> listJoinSequenceFlow = sequenceFlowService.GetList(base.EngineSharedModel.CurrentProcessID.Value, gateway.ElementID, "", ""); //if all sequence flow were executed, run condition code and clear gateway Status Xml List if (listJoinSequenceFlow.Where(c => c.ID != joinFromSequenceFlow.ID).All(c => base.EngineSharedModel.CurrentThread.GatewayStatus.Any(d => d.GatewayID == gateway.ID && d.List.Any(f => f.SequenceFlowID == c.ID && f.Done))) || base.EngineSharedModel.CurrentThread == null) { acceptedForkSequenceFlows = sequenceFlowService.GetList(base.EngineSharedModel.CurrentProcessID.Value, "", gateway.ElementID, ""); new ThreadService(base.UnitOfWork).ClearGatewayStatusXml(base.EngineSharedModel.CurrentThread, gateway.ID); } else { //add this sequence flow path to executed path in Thread.GatewayStatusXml new ThreadService(base.UnitOfWork).AddGatewayStatusXml(base.EngineSharedModel.CurrentThread, gateway.ID, joinFromSequenceFlow.ID); return(new List <sysBpmsSequenceFlow>(), true); } } break; } if (!acceptedForkSequenceFlows.Any() && gateway.DefaultSequenceFlowID.HasValue) { acceptedForkSequenceFlows.Add(sequenceFlowService.GetInfo(gateway.DefaultSequenceFlowID.Value)); } return(acceptedForkSequenceFlows, acceptedForkSequenceFlows.Any()); }
public ResultOperation Update(Guid processID, WorkflowProcess _WorkflowProcess) { ResultOperation resultOperation = new ResultOperation(); List <sysBpmsGateway> listGateway = this.GetList(processID); ElementService elementService = new ElementService(this.UnitOfWork); List <Guid> listDeleted = new List <Guid>(); //Delete gateways that are not in diagram xml element. foreach (sysBpmsGateway item in listGateway.Where(c => !_WorkflowProcess.ExclusiveGateways.Any(d => d.ID == c.ElementID) && !_WorkflowProcess.InclusiveGateways.Any(d => d.ID == c.ElementID) && !_WorkflowProcess.ParallelGateways.Any(d => d.ID == c.ElementID))) { resultOperation = this.Delete(item.ID); listDeleted.Add(item.ID); if (!resultOperation.IsSuccess) { return(resultOperation); } } listGateway = listGateway.Where(c => !listDeleted.Contains(c.ID)).ToList(); //ExclusiveGateway foreach (WorkflowExclusiveGateway item in _WorkflowProcess.ExclusiveGateways) { sysBpmsGateway gateway = listGateway.FirstOrDefault(c => c.ElementID == item.ID); sysBpmsSequenceFlow newSequenceFlow = null; //if SequenceFlow did not add before and item.Default is not empty add it if (!string.IsNullOrWhiteSpace(item.Default)) { sysBpmsSequenceFlow currentDefualt = new SequenceFlowService(this.UnitOfWork).GetInfo(item.Default, processID); if (currentDefualt == null) { WorkflowSequenceFlow _WorkflowSequenceFlow = _WorkflowProcess.SequenceFlows.FirstOrDefault(c => c.ID == item.Default); newSequenceFlow = new sysBpmsSequenceFlow() { TargetElementID = _WorkflowSequenceFlow.TargetRef, SourceElementID = _WorkflowSequenceFlow.SourceRef, Name = _WorkflowSequenceFlow.Name, ElementID = _WorkflowSequenceFlow.ID, Element = new sysBpmsElement() { ID = _WorkflowSequenceFlow.ID, Name = _WorkflowSequenceFlow.Name, ProcessID = processID, TypeLU = (int)sysBpmsElement.e_TypeLU.Sequence, }, ID = Guid.NewGuid(), ProcessID = processID, }; } else if (gateway != null) { gateway.DefaultSequenceFlowID = currentDefualt.ID; } } if (gateway != null) { if (newSequenceFlow != null) { gateway.SequenceFlow = newSequenceFlow; } gateway.TypeLU = (int)sysBpmsGateway.e_TypeLU.ExclusiveGateWay; resultOperation = this.Update(gateway); if (!resultOperation.IsSuccess) { return(resultOperation); } gateway.Element.Name = item.Name; elementService.Update(gateway.Element); } else { gateway = new sysBpmsGateway() { ID = Guid.NewGuid(), ElementID = item.ID, ProcessID = processID, SequenceFlow = newSequenceFlow, TypeLU = (int)sysBpmsGateway.e_TypeLU.ExclusiveGateWay, Element = new sysBpmsElement() { ID = item.ID, Name = item.Name, ProcessID = processID, TypeLU = (int)sysBpmsElement.e_TypeLU.Gateway, } }; resultOperation = this.Add(gateway); } if (!resultOperation.IsSuccess) { return(resultOperation); } } //InclusiveGateway foreach (WorkflowInclusiveGateway item in _WorkflowProcess.InclusiveGateways) { sysBpmsGateway gateway = listGateway.FirstOrDefault(c => c.ElementID == item.ID); sysBpmsSequenceFlow newSequenceFlow = null; //if SequenceFlow did not add before and item.Default is not empty add it if (!string.IsNullOrWhiteSpace(item.Default)) { sysBpmsSequenceFlow currentDefualt = new SequenceFlowService(this.UnitOfWork).GetInfo(item.Default, processID); if (currentDefualt == null) { WorkflowSequenceFlow _WorkflowSequenceFlow = _WorkflowProcess.SequenceFlows.FirstOrDefault(c => c.ID == item.Default); newSequenceFlow = new sysBpmsSequenceFlow() { TargetElementID = _WorkflowSequenceFlow.TargetRef, SourceElementID = _WorkflowSequenceFlow.SourceRef, Name = _WorkflowSequenceFlow.Name, ElementID = _WorkflowSequenceFlow.ID, Element = new sysBpmsElement() { ID = _WorkflowSequenceFlow.ID, Name = _WorkflowSequenceFlow.Name, ProcessID = processID, TypeLU = (int)sysBpmsElement.e_TypeLU.Sequence, }, ID = Guid.NewGuid(), ProcessID = processID, }; } else if (gateway != null) { gateway.DefaultSequenceFlowID = currentDefualt.ID; } } if (gateway != null) { if (newSequenceFlow != null) { gateway.SequenceFlow = newSequenceFlow; } gateway.TypeLU = (int)sysBpmsGateway.e_TypeLU.InclusiveGateWay; resultOperation = this.Update(gateway); if (!resultOperation.IsSuccess) { return(resultOperation); } gateway.Element.Name = item.Name; elementService.Update(gateway.Element); } else { gateway = new sysBpmsGateway() { ID = Guid.NewGuid(), ElementID = item.ID, ProcessID = processID, SequenceFlow = newSequenceFlow, TypeLU = (int)sysBpmsGateway.e_TypeLU.InclusiveGateWay, Element = new sysBpmsElement() { ID = item.ID, Name = item.Name, ProcessID = processID, TypeLU = (int)sysBpmsElement.e_TypeLU.Gateway, } }; resultOperation = this.Add(gateway); } if (!resultOperation.IsSuccess) { return(resultOperation); } } //ParallelGateway foreach (WorkflowParallelGateway item in _WorkflowProcess.ParallelGateways) { sysBpmsGateway gateway = listGateway.FirstOrDefault(c => c.ElementID == item.ID); if (gateway != null) { gateway.TypeLU = (int)sysBpmsGateway.e_TypeLU.ParallelGateWay; resultOperation = this.Update(gateway); if (!resultOperation.IsSuccess) { return(resultOperation); } gateway.Element.Name = item.Name; elementService.Update(gateway.Element); } else { gateway = new sysBpmsGateway() { ID = Guid.NewGuid(), ElementID = item.ID, ProcessID = processID, TypeLU = (int)sysBpmsGateway.e_TypeLU.ParallelGateWay, Element = new sysBpmsElement() { ID = item.ID, Name = item.Name, ProcessID = processID, TypeLU = (int)sysBpmsElement.e_TypeLU.Gateway, } }; resultOperation = this.Add(gateway); } if (!resultOperation.IsSuccess) { return(resultOperation); } } return(resultOperation); }
public ResultOperation Update(Guid processID, WorkflowProcess workflowProcess) { ResultOperation resultOperation = new ResultOperation(); try { this.BeginTransaction(); List <sysBpmsSequenceFlow> SequenceFlows = this.GetList(processID); foreach (sysBpmsSequenceFlow item in SequenceFlows.Where(c => !workflowProcess.SequenceFlows.Any(d => d.ID == c.ElementID))) { resultOperation = this.Delete(item.ID); if (!resultOperation.IsSuccess) { return(resultOperation); } } //save all SequenceFlows. foreach (WorkflowSequenceFlow item in workflowProcess.SequenceFlows) { sysBpmsSequenceFlow sequenceFlow = SequenceFlows.FirstOrDefault(c => c.ElementID == item.ID); if (sequenceFlow != null) { if (sequenceFlow.Name != item.Name || sequenceFlow.SourceElementID != item.SourceRef || sequenceFlow.TargetElementID != item.TargetRef) { sequenceFlow.Name = item.Name; sequenceFlow.SourceElementID = item.SourceRef; sequenceFlow.TargetElementID = item.TargetRef; resultOperation = this.Update(sequenceFlow); if (!resultOperation.IsSuccess) { return(resultOperation); } //Element sequenceFlow.Element.Name = item.Name; resultOperation = new ElementService(this.UnitOfWork).Update(sequenceFlow.Element); if (!resultOperation.IsSuccess) { return(resultOperation); } } } else { sequenceFlow = new sysBpmsSequenceFlow() { ID = Guid.NewGuid(), ElementID = item.ID, ProcessID = processID, Name = item.Name, SourceElementID = item.SourceRef, TargetElementID = item.TargetRef, //Element Element = new sysBpmsElement() { ID = item.ID, Name = item.Name, ProcessID = processID, TypeLU = (int)sysBpmsElement.e_TypeLU.Sequence, } }; resultOperation = this.Add(sequenceFlow); if (!resultOperation.IsSuccess) { return(resultOperation); } } } ; } catch (Exception ex) { return(base.ExceptionHandler(ex)); } if (resultOperation.IsSuccess) { this.UnitOfWork.Save(); } base.FinalizeService(resultOperation); return(resultOperation); }