Связь выборок с администрируемыми объектами#
основные понятия#
Элемент администрирования#
Элемент администрирования (класс Btk_AcItem) - логический объект, который соответствует одной выборке.
На каждую выборку, обладающую своей avm.xml, создается отдельный элемент администрирования, обладает перечнем элементарных привилегий
Элементарная привилегия#
Элементарная привилегия (класс Btk_AcItemPrivilege, коллекция к Btk_AcItem) - логический объект, который соответствует одному из элементов выборки: атрибуту или операции.
Элементарные привилегии обладают типом привилегии. Например, атрибуты относятся к типу Чтение.
Тип элементарной привилегии#
Определяет группу Элементарной привилегии. Позволяет управлять доступом к группам привилегий, а не по отдельности к каждой элементарной привилегии
Объект администрирования#
Объект администрирования (класс Btk_AcObject) - логический объект, который соответствует Бизнес объекту, и обладает перечнем элементов администрирования, входящих в этот объект.
Бизнес объект#
Бизнес объект (класс Btk_BoEntity) - логическое объединение нескольких классов в единую сущность.
Бизнес объект создается на корневые классы, и включает все его коллекции.
Базовая выборка#
Выборка, которая соответствует классу. Например, выборка Btk_ClassAvi является базовой выборкой класса Btk_Class
Произвольная выборка#
Выборка, которая не принадлежит какому-либо классу.
В том числе и выборки-наследники от базовой выборки
Корневой класс#
Класс, на который формируется отдельный бизнес объект. Является логическим отдельным объектом, который обладает своими коллекциями.
Это классы с типом Справочник, Документ, Настройка, Журнал.
Принцип построения адм. объектов#
Формирование на основе структуры odm.xml#
На каждый
корневой класссоздается свойадминистрируемый объект, имя которого равно именикласса.В
администрируемый объектвключаютсяэлементы администрирования, которые соответствуют выборкам всех классов входящий вбизнес объект(сам класс и все его коллекции).
Пример структуры бизнес объекта:
Документ Some_Document
+ Коллекция Some_DocumentPosition
+ Коллекция Some_DocumentPositionDet
+ V-коллекция Коллекция Some_DocumentLink
Пример сформированного администрируемого объекта:
Адм. объект Some_Document
+ Элемент Some_DocumentAvi
+ Элемент Some_Document\Some_DocumentPositionAvi
+ Элемент Some_Document\Some_DocumentPosition\Some_DocumentPositionDetAvi
+ Элемент Some_Document\Some_DocumentLinkAvi
Элементы администрирования в составе объекта администрирования имеют имя, которое соответствует их пути внутри бизнес объекта.
Зачем используются такие пути будет описано в главе Определение связи выборки и адм. объекта
Подключение произвольной выборки в структуру адм. объекта#
По мимо элементов администрирования, соответствующих базовым выборкам классов бизнес объектов, есть возможность добавить произвольную выборку в структуру администрируемого объекта. Для этого существует 2 способа:
Подключение в исходном коде
Вavm.xmlбазовой выборкикорневого классадобавить тегacObject, в котором указать дополнительныеэлементы администрирования.Пример разметки:
<view xmlns="http://www.global-system.ru/xsd/global3-view-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.global-system.ru/xsd/global3-view-1.0" name="Some_Document"> <acObject> <acItems> <acItem name="Some_Document\Some_CustomAvi" caption="Произвольная выборка"/> </acItems> </acObject> </view>
В этом примере объявлен один дополнительный
элемент администрированияв составе объекта «Some_Document», с именем «Some_Document\Some_CustomAvi» и наименованием «Произвольная выборка». Наименование используется для визуального отображения этого элемента в приложении администратор.Подключение через приложение
администраторОткрыть карточку нужного
объекта администрированиядобавить новый элемент на закладке
Элементы администрируемого объекта
Определение связи выборки и адм. объекта#
Каждая выборка на открытии в событии onLoadAdminMeta через методы выборки acObject и acObjectItem определяет свою принадлежность к элементу администрирования и объекту администрирования.
Все настройки прав доступа к выборке будут искаться по паре значений, которые вернули эти два метода.
Значение, которые вернули эти два метода для выборки, можно увидеть через окно отладки.
Т.е. чтобы к выборке корректно применялись настройки доступа, в приложении администратор должен быть объект администрирования, имя которого равно результату метода acObject, и в составе этого объекта должен быть элемент администрирования, имя которого равно результату метода acObjectItem.
Метод acObject#
Возвращает системное имя объекта администрирования к которому относится выборка. Например, «Some_Document»
Основной принцип:
Если выборка принадлежит классу, и класс
корневой, то имя этого класса = имя адм. объектаИначе вызывается метод
acObjectмастер-выборки.
Метод acObjectItem#
Возвращает системное имя элемента администрирования в составе объекта. например, «Some_Document\Some_DocumentPositionAvi»
Основной принцип:
Вызывается метод
acObjectItemмастер-выборки.К полученному значению добавляется текущее имя выборки.
Базовые выборки классов#
Для базовых выборок классов в большинстве случаев корректно отрабатывает стандартная логика определения элемента администрирования и объекта администрирования.
Исключением может служить базовая выборка v-коллекций, если она открывается вне формы, на которой расположена базовая выборка мастер-объекта. Например, если открыть список объектов v-коллекции, как главную выборку формы.
Произвольные выборки#
Для произвольных выборок определить принадлежность к объекту администрирования автоматически не так просто, как для базовых выборок, которые соответствуют структуре бизнес объектов.
В большинстве случаев разработчику требуется самостоятельно переопределить работу методов acObject и acObjectItem.
Выборка как самостоятельный адм. объект#
Если произвольную выборку предполагается использовать как самостоятельный объект администрирования, то требуется:
в
avm.xmlобъявить тегacObjectв
Aviпереопределить методыacObjectиacObjectItemследующим образом:override def acObject: NString = { baseAvi.simpleName } override def acObjectItem: NString = { baseAvi.simpleName }
Выборка как часть другого адм. объекта#
Если произвольную выборку предполагается использовать как часть существующего объекта администрирования, то требуется:
В
avm.xmlбазовой выборкикорневого классаэтогобизнес объектаобъявить тегacObjectи внутри него добавить новыйэлемент администрирования<view xmlns="http://www.global-system.ru/xsd/global3-view-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.global-system.ru/xsd/global3-view-1.0" name="Some_Document"> <acObject> <acItems> <acItem name="Some_Document\Some_CustomAvi" caption="Произвольная выборка"/> </acItems> </acObject> </view>
в
Aviпроизвольной выборкипереопределить методыacObjectиacObjectItemследующим образом:override def acObject: NString = { //имя объекта "Some_Document" } override def acObjectItem: NString = { //путь, который мы указали в теге acItem "Some_Document\\Some_CustomAvi" }
в
Apiпроизвольной выборкизарегистрировать с помощью методаBtk_AcObjectItemApi().registerByAcObjectItemNamedef regAcObjectItem(): Unit = { val bvDefinedAcObjectItem = TxIndex(Btk_AcObjectItemAta.Type)(_.sCode).byKey("Some_Document\\Some_Document\\Some_CustomAvi#Default").isEmpty if (bvDefinedAcObjectItem) Btk_AcObjectItemApi().registerByAcObjectItemName("Some_Document\\Some_Document\\Some_CustomAvi#Default") }
Часто задаваемые вопросы#
Проблема: при заходе не под суперпользователем выборка не отображается/не применяются права#
Возможная причина: некорректное определение acObjectItem или acObject#
Войдите под суперпользователем или пользователем с правами:
Доступ к отображению
Права на открытие окна отладки
Откройте окно отладки (
Ctrl+Alt+Shift+W) и проверьте:acObjectItemдолжен быть цепочкой «мастер-деталь»Начало
acObjectItemдолжно совпадать сacObject
Примеры корректного определения:

Для выборки как администрируемого объекта

Для детализации

Для переопределенной выборки

Для переопределенной детализации
Примеры некорректных определений:#
1. Переопределение thisApi в выборке без класса.

Решение:
Убрать ненужное переопределение
Или переопределить
acObjectсоответствующим образом
2. Коллекция переменной ссылочности без мастера

Решение:
Не открывать такие списки как самостоятельные отображения
Или переопределить
acObjectкак один из возможных БО
3. Ошибка в переопределении acObject

Решение:
Исправить или удалить некорректное переопределение
Если объект определяется правильно, но проблема осталась:#
Откройте приложение «Администратор»
Проблема: новый атрибут/колонка не отображается у обычного пользователя#
Проверка:#
В приложении «Администратор» найдите нужный элемент администрирования
Убедитесь в наличии нужной привилегии
Если привилегии нет:
Обновите администрируемый объект
Проверьте avm:
атрибут определен в dvm, но отсутствует в avm: добавьте ссылку на шаблон dvm.
Для динамических построителей: добавьте атрибут в avm
Проблема: SQL-ошибка из-за дискретного доступа#
Скрипт фильтрации может вызывать ошибки, если:
Обращается к несуществующим в отображении колонкам
Используется параметр (например
&id), отсутствующий в запросе
Рекомендации:
Используйте только гарантированно существующие колонки (лучше
id)Для специальных отображений:
Если администрирование не нужно: переопределите
isAdministered: Boolean = falseЕсли нужно разграничение прав: вынесите в отдельную выборку