Beispiel #1
0
        /// <summary>
        /// If the scheme is in scheme persistent store marked as obsolete. Upgrades scheme.
        /// </summary>
        /// <param name="processId">Process instance id</param>
        /// <param name="parameters">Defining parameters of process</param>
        public void UpdateSchemeIfObsolete(Guid processId, IDictionary <string, IEnumerable <object> > parameters)
        {
            var processInstance  = Builder.GetProcessInstance(processId);
            var isSchemeObsolete = processInstance.IsSchemeObsolete;
            var isDeterminingParametersChanged = processInstance.IsDeterminingParametersChanged;

            if (!isSchemeObsolete && !isDeterminingParametersChanged)
            {
                return;
            }

            SetProcessNewStatus(processInstance, ProcessStatus.Running);

            try
            {
                processInstance = Builder.CreateNewProcessScheme(processId, processInstance.ProcessScheme.Name, parameters);
                PersistenceProvider.BindProcessToNewScheme(processInstance, true);
                if (OnSchemaWasChanged != null)
                {
                    OnSchemaWasChanged(this, new SchemaWasChangedEventArgs {
                        DeterminingParametersWasChanged = isDeterminingParametersChanged, ProcessId = processId, SchemaWasObsolete = isSchemeObsolete
                    });
                }
            }
            finally
            {
                SetProcessNewStatus(processInstance, ProcessStatus.Idled);
            }
        }