protected override bool FilesFilterForImmediateMode(ComponentInstallStatus desiredStatus, ComponentInstallStatus allowedStatus, bool isNew, bool isRequiringUpdate) { // Текущий статус установки. CurrentInstallStatus currentInstallStatus = Session.GetService<ISessionCurrentInstallStatusExtension>().GetStatus(); // Новая установка. if (currentInstallStatus == CurrentInstallStatus.Install && desiredStatus == ComponentInstallStatus.Install && allowedStatus.HasFlag(ComponentInstallStatus.Install)) { // Для новой базы запускаем скрипт. return isNew; } // Обслуживание (изменение этого же продукта). // Добавлена новая база. В этом случае также необходимо выполнить скрипты с атрибутом Install. if (currentInstallStatus == CurrentInstallStatus.Change // Компонент уже должен быть установлен. && desiredStatus == ComponentInstallStatus.AlreadyInstalled) { return isNew && (allowedStatus.HasFlag(ComponentInstallStatus.Install) || allowedStatus.HasFlag(ComponentInstallStatus.Reinstall)); } // При обновлении и patch новую базу не добавляем, поэтому эту ситуацию не обрабатываем. return false; }
/// <summary> /// Фильтр для получения файлов для режима Immediate. /// </summary> /// <param name="desiredStatus">Желаемый установочный статус компонента.</param> /// <param name="allowedStatus">Разрешенный установочный статус компонента заданный для свойств SQL-скрипта. /// Может содержать несколько значений.</param> /// <param name="isNew">Признак новой базы данных.</param> /// <param name="isRequiringUpdate">Признак, требует ли база данных обновление.</param> /// <returns></returns> protected abstract bool FilesFilterForImmediateMode(ComponentInstallStatus desiredStatus, ComponentInstallStatus allowedStatus, bool isNew, bool isRequiringUpdate);
protected override bool FilesFilterForImmediateMode(ComponentInstallStatus desiredStatus, ComponentInstallStatus allowedStatus, bool isNew, bool isRequiringUpdate) { // Текущий статус установки. CurrentInstallStatus currentInstallStatus = Session.GetService<ISessionCurrentInstallStatusExtension>().GetStatus(); // Новая установка. if (currentInstallStatus == CurrentInstallStatus.Install && desiredStatus == ComponentInstallStatus.Install && allowedStatus.HasFlag(ComponentInstallStatus.Install)) { // Для базы требующей обновления запускаем скрипт. return isRequiringUpdate; } // Обслуживание (изменение этого же продукта). // Здесь будут базы с версией меньше устанавливаемой. // Базы с версией равной и больше текущей не должны обновлятся согласно возврату хранимой процедуры (по ТЗ). if (currentInstallStatus == CurrentInstallStatus.Change // Компонент уже должен быть установлен. && desiredStatus == ComponentInstallStatus.AlreadyInstalled && allowedStatus.HasFlag(ComponentInstallStatus.Reinstall)) { return isRequiringUpdate; } // При обновлении запускаем скрипты только с признаком переустановки. if (currentInstallStatus == CurrentInstallStatus.Update && desiredStatus == ComponentInstallStatus.Reinstall && allowedStatus.HasFlag(ComponentInstallStatus.Reinstall)) { return isRequiringUpdate; } // При patch запускаем скрипты только с признаком переустановки. if (currentInstallStatus == CurrentInstallStatus.Patch && desiredStatus == ComponentInstallStatus.AlreadyInstalled && allowedStatus.HasFlag(ComponentInstallStatus.Reinstall)) { return isRequiringUpdate; } return false; }