Правило
Заголовок раздела «Правило»Предпочтение — расширения и точки переопределения вместо инвазивных правок типовых (совместимость библиотек). Но у 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 остаются в силе для всего, что реализовано расширением.