Ограничение выполнения действий с элементом управления
Программист может установить запрет на выполнение определённых действий с элементом управления в программе Конструктор Web-разметок.
Ограничение устанавливается "функцией проверки", которая возвращает набор флагов, разрешающих только определённые действия с элементом управления. Например, функция проверки может ограничить использование элемента управления определённым типом карточек.
Добавление функции проверки
Чтобы создать расширение, добавляющее функцию проверки, выполните приведенную далее инструкцию.
-
Создайте проект расширения программы Конструктор Web-разметок.
-
Добавьте в ядро расширения (файл DesignerExtension.cs) функцию проверки следующего вида:
public static AllowedOperationsFlag GetPossibleOperation(IServiceProvider serviceProvider) { var flags = AllowedOperationsFlag.All; (1) return flags; }
1 По умолчанию доступны все операции Функция проверки должна вернуть набор флагов AllowedOperationsFlag.
-
Добавьте в код функции проверки алгоритм, добавляющий нужные ограничения.
Следующий код демонстрирует пример функции проверки, запрещающей добавление элемента управления в разметку карточки, если тип карточки не Документ.
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.
-
Переопределите метод
GetAllowedOperations
базового класса расширения, чтобы он возвращал коллекцию с парой: ключ — имя. Метод позволяет получить функцию проверки. Значение представлено функцией проверки:protected override Dictionary<string, Func<AllowedOperationsFlag>> GetAllowedOperations() { return new Dictionary<string, Func<AllowedOperationsFlag>> { {"GetPossibleOperation", () => GetPossibleOperation(this.serviceProvider) } (1) }; }
1 Обратите внимание, что в функцию передается сервис-провайдер расширения.
Проверка примера
-
В поле 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)); } }
-
Опубликуйте расширение с элементом управления на сервере Web-клиента.
-
Откройте для настройки разметку карточки Документ.
-
Откройте любую другую разметку.