Перейти к содержимому

Грабли расширений (CFE) и переименования конфигурации

Директивный

v8std#std644

#расширения#миграции

Предпочтение — расширения и точки переопределения вместо инвазивных правок типовых (совместимость библиотек). Но у CFE есть нетривиальные правила загрузки, нарушение которых ломает расширение молча.

1. Роль CFE раздаёт права только на заимствованные объекты

Заголовок раздела «1. Роль CFE раздаёт права только на заимствованные объекты»

Роль в расширении может давать права только на объекты, заимствованные (adopted) в это расширение. Если Rights.xml роли ссылается на незаимствованный объект основной конфигурации — расширение не грузится или права не применяются. role-compile объекты не заимствует. Перед созданием роли с правами на типовой объект — сначала заимствовать (достаточно «оболочечного» заимствования заголовка).

2. InternalInfo CFE содержит фиксированные 7 ContainedObject

Заголовок раздела «2. InternalInfo CFE содержит фиксированные 7 ContainedObject»

Секция Configuration/InternalInfo (XCFInternalInfo) в XML-выгрузке CFE содержит фиксированные 7 xr:ContainedObject — по одному на КЛАСС метаданных, а не на каждый объект. При добавлении объекта в расширение секцию не трогать: меняется только ChildObjects.

3. Переименование конфигурации молча ломает права ролей

Заголовок раздела «3. Переименование конфигурации молча ломает права ролей»

Переименование конфигурации (Name в Configuration.xml) при загрузке из XML-исходников молча ломает права уровня конфигурации у всех ролей.

4. Регламентные задания расширения живут вместе с ним

Заголовок раздела «4. Регламентные задания расширения живут вместе с ним»

Задание, добавленное расширением, исчезает при отключении расширения — вместе с расписанием, и после повторного подключения расписание настраивается заново. Требования к таким заданиям (переподключение, безопасный режим, след в реестре) — в стандарте Регламентные задания.

Каждое правило — про «мину», которая даёт зелёный exit code, но нерабочий результат. Симптомы нарушения:

  • «Неуникальный идентификатор класса хранимого объекта» на xr:ClassId (правило 2);
  • массовые «Неизвестный объект метаданных — Configuration.СтароеИмя» по одному на роль при exit code 0; не работает вход по типовым ролям; огромный дифф по всем Rights.xml; на старте — «не существует описание подсистемы, совпадающей с именем конфигурации» (правило 3).

Если доработка возможна только инвазивной правкой типовой (нет точки расширения) — это делается с обоснованием, но правила загрузки CFE остаются в силе для всего, что реализовано расширением.