private void ConvertFromXMLForFlows(WorkflowProcess process, XElement element) { // Get list SequenceFlows IEnumerable <XElement> flowsList = element.Descendants(XMLNodeName.sequenceFlow.ToString()); foreach (XElement xFlow in flowsList) { // Convertor WorkflowSequenceFlow Sequenceflow = _workflowFlowsConvertor.ConvertFromString(xFlow.ToString()); process.AddFlow(Sequenceflow); } }
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); }