public SchemeDefinition <XElement> GetProcessSchemeWithParameters(string schemeCode, string definingParameters, Guid?rootSchemeId, bool ignoreObsolete) { IEnumerable <WorkflowProcessScheme> processSchemes = new List <WorkflowProcessScheme>(); var hash = HashHelper.GenerateStringHash(definingParameters); using (OracleConnection connection = new OracleConnection(ConnectionString)) { processSchemes = WorkflowProcessScheme.Select(connection, schemeCode, hash, ignoreObsolete ? false : (bool?)null, rootSchemeId); } if (!processSchemes.Any()) { throw new SchemeNotFoundException(); } if (processSchemes.Count() == 1) { var scheme = processSchemes.First(); return(ConvertToSchemeDefinition(scheme)); } foreach (var processScheme in processSchemes.Where(processScheme => processScheme.DefiningParameters == definingParameters)) { return(ConvertToSchemeDefinition(processScheme)); } throw new SchemeNotFoundException(); }
public void SaveScheme(SchemeDefinition <XElement> scheme) { var definingParameters = scheme.DefiningParameters; var definingParametersHash = HashHelper.GenerateStringHash(definingParameters); using (OracleConnection connection = new OracleConnection(ConnectionString)) { var oldSchemes = WorkflowProcessScheme.Select(connection, scheme.SchemeCode, definingParametersHash, scheme.IsObsolete, scheme.RootSchemeId); if (oldSchemes.Any()) { foreach (var oldScheme in oldSchemes) { if (oldScheme.DefiningParameters == definingParameters) { throw SchemeAlredyExistsException.Create(scheme.SchemeCode, SchemeLocation.WorkflowProcessScheme, scheme.DefiningParameters); } } } var newProcessScheme = new WorkflowProcessScheme { Id = scheme.Id, DefiningParameters = definingParameters, DefiningParametersHash = definingParametersHash, Scheme = scheme.Scheme.ToString(), SchemeCode = scheme.SchemeCode, RootSchemeCode = scheme.RootSchemeCode, RootSchemeId = scheme.RootSchemeId, AllowedActivities = JsonConvert.SerializeObject(scheme.AllowedActivities), StartingTransition = scheme.StartingTransition, IsObsolete = scheme.IsObsolete }; newProcessScheme.Insert(connection); WorkflowProcessScheme.Commit(connection); } }