/// <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); } }