Ограничение прав на использование элементом управления в программе Конструктор Web-разметок

Программист может установить запрет на выполнение определённых действий с элементом управления в программе Конструктор Web-разметок.

Ограничение устанавливается "функцией проверки", которая возвращает набор флагов, разрешающих только определённые действия с элементом управления. Например, функция проверки может ограничить использование элемента управления определённым типом карточек.

Добавление функции проверки

Чтобы создать расширение, добавляющее функцию проверки, выполните приведенную далее инструкцию.

  1. Создайте проект расширения программы Конструктор Web-разметок.

  2. Добавьте в ядро расширения (файл TemplateDesignerExtension.cs) функцию проверки следующего вида:

    public static AllowedOperationsFlag GetPossibleOperation(IServiceProvider serviceProvider)
    {
        var flags = AllowedOperationsFlag.All; (1)
    
        return flags;
    }
    1 По умолчанию доступны все операции

    Функция проверки должна вернуть набор флагов AllowedOperationsFlag.

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

    Следующий код демонстрирует пример функции проверки, запрещающей добавление элемента управления в разметку карточки, если тип карточки не Документ.

    public static AllowedOperationsFlag GetPossibleOperation(IServiceProvider serviceProvider)
    {
        var flags = AllowedOperationsFlag.All; (1)
    
        var selectedLayoutService = ServiceUtil.GetService<ISelectedLayoutService>(serviceProvider); (2)
    
        if (selectedLayoutService.SelectedCardTypeId != DocsVision.BackOffice.CardLib.CardDefs.CardDocument.ID) (3)
            flags &= ~AllowedOperationsFlag.Create; (4)
    
        return flags;
    }
    1 По умолчанию доступны все операции.
    2 Получение сервиса для работы с разметкой.
    3 Из сервиса получаем идентификатор типа карточек, для которых настраивается разметка.
    4 Если тип карточки не документ (CardDocument.ID) из возможных операций удаляется флаг Create. Что фактически приводит к невозможности добавить элемент управления в разметку

    В примере информация о контексте использования элемента управления предоставляется сервисом ISelectedLayoutService.

  4. Переопределите метод GetAllowedOperations базового класса расширения, чтобы он возвращал коллекцию с парой: ключ — имя. Метод позволяет получить функцию проверки. Значение представлено функцией проверки:

    protected override Dictionary<string, Func<AllowedOperationsFlag>> GetAllowedOperations()
    {
        return new Dictionary<string, Func<AllowedOperationsFlag>>
        {
            {"GetPossibleOperation", () => GetPossibleOperation(this.serviceProvider) } (1)
        };
    }
    1 Обратите внимание, что в функцию передается сервис-провайдер расширения.
  5. Скомпилируйте проект и скопируйте полученную сборку на сервер Web-клиента в папку \%WebCinstallDir%\Plugins\%Каталог Решения%. Ресурсные сборки скопируйте в папки \%WebCinstallDir%\ru\ (для русской локализации), \%WebCinstallDir%\uk\ (для английской локализации) и т.д.

  6. Перезапустите Конструктор Web-разметок.

Проверка примера

  1. Создайте проект нового элемента управления.

  2. В поле GetAllowedOperations (функция проверки) описателя элемента управления укажите функцию GetPossibleOperation.

    ControlTypeDescription GetSuperControlTypeDescription()
    {
        var controlTypeDescription = new ControlTypeDescription("SuperControl")
        {
            DisplayName = "Супер элемент управления",
            ControlGroupDisplayName = "Примеры",
            PropertyDescriptions = {
                PropertyFactory.GetNameProperty (),
                PropertyFactory.GetVisibilityProperty (),
                PropertyFactory.GetClickEvent ()
            },
            GetAllowedOperations = () => GetPossibleOperation(serviceProvider) (1)
        };
    
        return controlTypeDescription;
    }
    1 Передаем функцию проверки.

    Функция проверки также может быть получена по имени из хранилища функций проверки:

    GetAllowedOperations = AllowedOperationsStorage.GetAllowedOperations("GetPossibleOperation")

    Код получения хранилища функций проверки:

    IAllowedOperationsStorage allowedOperationsStorage;
    protected IAllowedOperationsStorage AllowedOperationsStorage
    {
        get
        {
            return this.allowedOperationsStorage ?? (this.allowedOperationsStorage = ServiceUtil.GetService<IAllowedOperationsStorage>(serviceProvider));
        }
    }
  3. Опубликуйте расширение с элементом управления на сервере Web-клиента.

  4. Откройте для настройки разметку карточки Документ.

    Элемент управления Супер элемент управления будет представлен в библиотеке элементов управления.

  5. Откройте любую другую разметку.

    Элемент управления Супер элемент управления будет отсутствовать в библиотеке элементов управления.