Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        /// <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);
 }