Создание нового типа правил добавления в хранилище

Администратор может настроить правила помещения бинарных данных файлов в определённые группы хранилищ, в зависимости от типа файла, его размера или принадлежности к справочникам Docsvision. Разработчику предоставляется возможность реализовать собственные типы правил для настройки условий помещения в хранилища.

Для использования собственного типа правил добавление в хранилище необходима опция лицензии Docsvision модуль интеграции с произвольными файловыми хранилищами.

Компонент, реализующий правило добавления в хранилище, представляет собой библиотеку .dll с классом, реализующим интерфейсы IBinaryStorageRule и IExtensionInitialize.

Интерфейс IBinaryStorageRule определяет метод проверки выполнения условий помещения в хранилище. Интерфейс IExtensionInitialize определяет метод инициализации провайдера (Initialize), принимающий в сериализованном виде настройки хранилища. Настройки хранилища устанавливаются с помощью графического интерфейса настройки (рассмотрено далее).

Стандартной реализацией интерфейсов IBinaryStorageRule и IExtensionInitialize является класс BaseBinaryStorageRule, который можно использовать в качестве базового класса разрабатываемого компонента с правилом добавления в хранилище.

Также может быть реализован компонент настройки правила, если предполагается предоставлять возможность настройки правила с помощью Консоли настройки Docsvision.

Пример

Далее демонстрируется пример реализации правила помещения в хранилища в зависимости от установленного в настройках шаблона файлов. Исходный код примера доступен по ссылке.

  1. Основной класс.

    В данном примере основной класс правила базируется на классе BaseBinaryStorageRule. Класс должен быть помечен атрибутом System.ComponentModel.DisplayName с указанием отображаемого названия типа правила — отображается в Консоли настройки Docsvision.

    Реализация компонента правила предполагает возможность его настройки с помощью Консоли настройки Docsvision. Для этого класс должен быть помечен атрибутом System.ComponentModel.Editor, в котором нужно указать полное название класс, реализующего форму настройки (описание будет приведено далее).

    using DocsVision.Platform.StorageServer.BinaryStorages.Rules;
    using DocsVision.Platform.StorageServer.Files;
    using System;
    using System.ComponentModel;
    using System.Text.RegularExpressions;
    
    namespace RuleByFileName
    {
        [DisplayName("Шаблон файла")]
        [Editor(
            "RuleByFileName.FileNamePatternPropertyControl, RuleByFileName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=774759c67c4f8865, processorArchitecture=MSIL"
            , "DocsVision.Platform.WinForms.Controls.IExtensionPropertiesControl, DocsVision.Platform.WinForms"
        )]
        public class FileNameStorageRule : BaseBinaryStorageRule
        {
            string fileNamePattern;
    
            public FileNameStorageRule() (1)
            {
            }
    
            public FileNameStorageRule(IServiceProvider serviceProvider) : base(serviceProvider, null)
            {
            }
    
            public override bool IsRuleSatisfied(IFileInfo fileInfo) (2)
            {
                Regex regex = new Regex(fileNamePattern, RegexOptions.IgnoreCase); (3)
                return regex.IsMatch(fileInfo.Name);
            }
    
            protected override void ReadSettings() (4)
            {
                fileNamePattern = Settings.Replace(@"\", @"\\").Replace(".", @"\.").Replace("*", ".*"); (5)
                fileNamePattern = "^" + fileNamePattern + "$";
            }
        }
    }
    1 Обязательный конструктор без аргументов.
    2 Метод, осуществляющий проверку соответствия файла условиям данного правила.
    3 Файл проверяется по маске с помощью регулярного выражения fileNamePattern.
    4 Загрузка настроек.

    По умолчанию настройки, установленные в Консоли настройки Docsvision, загружаются в строковую переменную Settings. Предполагается, что пользователь будет указывать шаблон файла в виде Акт*.doc*, а для проверки соответствия имени файла шаблону будет использоваться регулярное выражение. Чтобы привести установленный пользователем шаблон к виду шаблона регулярного выражения был переопределён стандартный метод загрузки настроек ReadSettings.

  2. Компонент настройки.

    При создании нового типа правил помещения в хранилище можно предоставлять возможность настроить его через Консоль настройки Docsvision, или хранить настройки непосредственно в классе, или предоставлять иные способы настройки.

    В данном примере предусмотрен стандартный способ настройки правила с помощью Консоли настройки Docsvision, который предполагает возможность ввода шаблона на странице настройки внешних хранилищ.

    Настройки правил хранилища
    Рисунок 1. Настройки правил хранилища
Для реализации данной функции нужно:
  1. Создать класс с формой настройки.

  2. Указать данный класс в атрибуте Editor основного класса правила помещения в хранилище.

    Класс с формой настройки представляется собой компонент типа System.Windows.Forms.UserControl с реализованным программным интерфейсом IExtensionPropertiesControl. Далее приведён код примера данного класса.

    using DocsVision.Platform.WinForms.Controls;
    using System;
    using System.Windows.Forms;
    
    namespace RuleByUser
    {
        public partial class FileNamePatternPropertyControl : UserControl, IExtensionPropertiesControl
        {
    
            public FileNamePatternPropertyControl()
            {
                InitializeComponent();
            }
    
            public string Settings
            {
                get;
                private set;
            }
    
            public event EventHandler OnPropertiesChanged;
    
            public void Initialize(string settings) (1)
            {
                Settings = settings ?? "*.*"; (2)
    
                PatternBox.Text = Settings; (3)
            }
    
            public bool Save() (4)
            {
                Settings = PatternBox.Text; (5)
    
                return true;
            }
    
            private void PatternBox_TextChanged(object sender, EventArgs e)
            {
                OnPropertiesChanged?.Invoke(this, e);
            }
        }
    }
    1 Вызывается при загрузке компонента.
    2 Если строка настройки отсутствует, используется стандартный шаблон *.*.
    3 Отображаем загруженный шаблон в графическом интерфейсе.
    4 Вызывается при сохранении настроек.
    5 Шаблон, установленный пользователем, должен быть сохранён в переменную Settings.
    Пример формы настройки
    Рисунок 2. Пример формы настройки
    У класса формы две основных задачи:
    • Показать пользователю текущие настройки при открытии формы настройки при вызове метода Initialize;

    • Сохранить настройки пользователя в переменную Settings при вызове метода Save.

      При вызове Save можно осуществить проверку настроек пользователя: если настройки не содержат ошибки нужно вернуть true, иначе — false.

  3. Подписание сборки.

    Разработанный компонент должен быть подписан. Это необходимо для формирования полного имени сборки и регистрации компонента в GAC.

  4. Регистрация компонента в GAC.

    Собранный компонент, включающий основной класс и класс формы настройки, должен быть зарегистрирован в GAC сервера Docsvision. Для регистрации используйте gacutil.

Проверка

Настройка нового правила помещения в хранилище:
  1. Откройте Консоль настройки Docsvision.

  2. Перейдите в раздел Базы данных  Настройки базы данных  Внешние хранилища.

  3. В секции "Правила помещения в хранилища" добавьте новые правила.

    1. При добавлении в параметре Тип выберите вариант Добавить из сборки и выберите сборку с реализованным новым правилом. В список типов правил добавьте строку "Шаблон файла".

    2. Выберите тип "Шаблон файла" и укажите шаблон файла.

    3. Укажите группу хранилищ, в которую будет помещаться файлы по данному правилу.

  4. Переместите правило в начало списка правил, чтобы оно проверялось первым при добавлении файла.

  5. Если требуется, настройте другие параметры хранилищ.

  6. Сохраните настройки.

  7. Создайте карточку и добавьте файл с названием, соответствующим указанному в правиле "Шаблон файла" шаблону. Файл будет сохранён в хранилище из группы хранилищ, указанных при настройке правила "Шаблон файла".