public void SaveScheme(SchemeDefinition <XElement> scheme) { var definingParameters = scheme.DefiningParameters; var definingParametersHash = HashHelper.GenerateStringHash(definingParameters); using (var session = Store.OpenSession()) { var oldSchemes = session.Query <WorkflowProcessScheme>() .Customize(c => c.WaitForNonStaleResultsAsOfNow()) .Where(wps => wps.DefiningParametersHash == definingParametersHash && wps.SchemeCode == scheme.SchemeCode && wps.IsObsolete == scheme.IsObsolete) .ToList(); if (oldSchemes.Any()) { if (oldSchemes.Any(oldScheme => 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 = scheme.AllowedActivities, StartingTransition = scheme.StartingTransition, IsObsolete = scheme.IsObsolete }; session.Store(newProcessScheme); session.SaveChanges(); } }
public void SaveScheme(SchemeDefinition <XElement> scheme) { var definingParameters = scheme.DefiningParameters; var definingParametersHash = HashHelper.GenerateStringHash(definingParameters); var cache = Store.GetOrCreateCache <Guid, WorkflowProcessScheme>(IgniteConstants.WorkflowProcessSchemeCacheName); var schemeCode = scheme.SchemeCode; var isObsolete = scheme.IsObsolete; var oldSchemes = cache.AsCacheQueryable().Where( wps => wps.Value.DefiningParametersHash == definingParametersHash && wps.Value.SchemeCode == schemeCode && wps.Value.IsObsolete == isObsolete).ToList(); if (oldSchemes.Any()) { if (oldSchemes.Any(oldScheme => oldScheme.Value.DefiningParameters == definingParameters)) { throw SchemeAlredyExistsException.Create(schemeCode, SchemeLocation.WorkflowProcessScheme, definingParameters); } } var newProcessScheme = new WorkflowProcessScheme { Id = scheme.Id, DefiningParameters = definingParameters, DefiningParametersHash = definingParametersHash, Scheme = scheme.Scheme.ToString(), SchemeCode = schemeCode, RootSchemeCode = scheme.RootSchemeCode, RootSchemeId = scheme.RootSchemeId.HasValue ? scheme.RootSchemeId.Value.ToString("N") : null, AllowedActivities = JsonConvert.SerializeObject(scheme.AllowedActivities), StartingTransition = scheme.StartingTransition, IsObsolete = scheme.IsObsolete }; cache.Put(newProcessScheme.Id, newProcessScheme); }
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); } }
/// <summary> /// 根据公文审批流程名称processName,创建新并保存的SchemeDefinition, /// 同时返回与processId对应的ProcessInstance实例 /// </summary> /// <param name="processId"></param> /// <param name="processName"></param> /// <param name="parameters"></param> /// <returns></returns> public ProcessInstance CreateNewProcessScheme(Guid processId, string processName, IDictionary <string, IEnumerable <object> > parameters) { SchemeDefinition <TSchemeMedium> schemeDefinition = null; var schemeId = Guid.NewGuid(); var newScheme = Generator.Generate(processName, schemeId, parameters); try { SchemePersistenceProvider.SaveScheme(processName, schemeId, newScheme, parameters); schemeDefinition = new SchemeDefinition <TSchemeMedium>(schemeId, newScheme, false, false); } catch (SchemeAlredyExistsException) { schemeDefinition = SchemePersistenceProvider.GetProcessSchemeWithParameters(processName, parameters, true); } return(ProcessInstance.Create(schemeDefinition.Id, processId, GetProcessDefinition(schemeDefinition), schemeDefinition.IsObsolete, schemeDefinition.IsDeterminingParametersChanged)); }
private ICollection <ExternalClaimTransformation> GetCollection(SchemeDefinition culture) { culture.ClaimTransformations = culture.ClaimTransformations ?? new List <ExternalClaimTransformation>(); return(culture.ClaimTransformations); }