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

Общие сведения

Расширение — это вид проекта, предназначенный для изменения функциональности других проектов (приложений или библиотек) без изменения их исходных файлов. С помощью расширений можно добавлять новую функциональность, в том числе поставляемую отдельно в виде плагинов, сохраняя возможность обновлять основной проект.

Расширение может дорабатывать один или несколько конкретных проектов либо быть универсальным — добавлять новую функциональность без привязки к определенному проекту. Добавить расширение к проекту можно из среды разработки или создать отдельный проект в панели управления.

После создания расширение устанавливается в приложение через панель управления и может находиться во включенном или выключенном состоянии.

Состав проекта расширения, поддерживаемые в нем элементы и порядок применения расширений в приложении описаны в разделах ниже.

Виды расширений и расширяемые проекты​

Расширять можно проекты приложений и библиотеки. Одно расширение может одновременно изменять один или несколько проектов: например, только проект приложения, только проект библиотеки, или проект приложения совместно с несколькими библиотеками.

Если в расширении не указаны расширяемые проекты, оно называется универсальным расширением. Такое расширение может только добавлять новую функциональность, не изменяя другие проекты, и содержит только собственные подсистемы.

Отличия от библиотек​

Библиотеки отличаются от расширений способом подключения к приложению и возможностями по изменению проекта:

  • Библиотека добавляет новые, самостоятельные элементы, которые доступны глобально или в рамках проекта. Библиотека не может изменять существующие элементы проекта, к которому она подключена.
  • Расширение может не только добавлять новые элементы, но и изменять поведение расширяемого проекта. Элементы расширения имеют доступ к внутренним элементам расширяемого проекта с видимостью ВПроекте и ВПодсистеме.

Пространства имен и область видимости​

При работе с расширениями важно учитывать правила формирования пространств имен и области видимости элементов. Типы, созданные по собственным элементам расширения и элементам-расширениям, находятся в пространстве имен расширения: ПоставщикРасширения::ИмяПроектаРасширения::ИмяПодсистемы[::ИмяПакета]::ИмяТипа.

Доступность элементов и типов в расширении определяется следующим образом:

  • Элементы в любых подсистемах расширения имеют доступ к элементам расширяемого проекта с видимостью ВПроекте.
  • Элементы в расширении подсистемы имеют доступ к элементам расширяемой подсистемы с видимостью ВПодсистеме.
  • Элементы из других подсистем самого проекта расширения доступны по обычным правилам.

Использование расширений в приложениях​

Чтобы расширение стало доступно в конкретном приложении, его необходимо к нему подключить. Подключенное расширение может находиться в одном из двух состояний:

  • Включено — функциональность расширения доступна в запущенном приложении. В этом состоянии доступны обновление, выключение и удаление расширения.
  • Выключено — функциональность расширения недоступна (отключаются добавленные типы и изменения интерфейса), но само расширение остается в приложении. В этом состоянии доступны включение, обновление и удаление.

Администратор может выключить расширение, например, при его неправильной работе или обнаружении ошибок применения новой версии расширяемого проекта. Выключение позволяет временно отключить функциональность расширения с возможностью последующего включения. Если расширение больше не нужно, его удаляют из приложения.

Порядок расширений задается при их подключении к приложению и может быть изменен в форме обновления приложения. Этот порядок определяет последовательность запуска обработчиков обновления: внутри одного расширения сначала выполняются обработчики библиотек из его зависимостей, затем — обработчики самого расширения. Аналогично по порядку применяются изменения к модифицируемым элементам, когда их меняют несколько расширений. Если при применении новой версии расширяемого проекта в одном из расширений обнаруживаются ошибки, администратор может выключить проблемное расширение и повторить применение. Если при применении проекта приложения возникают ошибки в элементах расширений, применение не выполняется.

примечание

Добавление, обновление, включение, выключение расширений и изменение их порядка запускают процедуру обновления приложения.

Библиотеки и ресурсы в расширениях​

Расширения могут взаимодействовать с библиотеками и управлять ресурсами. Важно различать механику работы с расширяемыми и используемыми библиотеками, а также понимать ограничения, накладываемые на доступ к ресурсам из кода.

Расширяемые и используемые библиотеки​

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

  • Расширяемые библиотеки указываются в свойстве РасширяемыеПроекты проекта расширения. Эти библиотеки не включаются в сборку расширения. Они должны присутствовать в приложении на момент применения расширения, а их версии должны соответствовать заданному диапазону.
  • Используемые библиотеки указываются в свойстве Библиотеки проекта расширения. Эти библиотеки включаются в сборку расширения. Они могут как присутствовать в приложении до установки расширения, так и отсутствовать в нем.

Если используемая библиотека уже присутствует в приложении, ее версия должна строго совпадать с версией, указанной в зависимостях расширения. Если библиотека отсутствует в приложении, она добавляется при применении расширения.

Используемые библиотеки подпадают под те же ограничения, что и само расширение: они могут включать только поддерживаемые виды элементов.

Поведение библиотек при управлении расширением​

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

  • При выключении расширения элементы и типы из используемых библиотек также становятся недоступными. Это происходит только в том случае, если библиотеку не использует расширяемый проект (транзитивно) и библиотеку больше не использует ни одно другое включенное расширение.
  • При включении расширения, если хотя бы одно включаемое расширение использует ранее выключенную библиотеку, эта библиотека также включается автоматически.
  • При удалении расширения библиотека будет удалена из приложения только в том случае, если удаляемое расширение было единственным, кто ее использовал.

Доступ к ресурсам из расширений​

В расширении подсистемы и ее пакетах можно добавлять ресурсы — например, изображения. Область видимости ресурсов действует только на ресурсы самой подсистемы и не меняет область видимости ресурсов расширяемой подсистемы.

Доступ к ресурсам возможен двумя способами:

  • С помощью литерала Ресурс{Путь} — по полному или относительному пути:

    Ресурс{БазаЗадач::Основная::Картинки/Иконка.svg}
    Ресурс{Картинки/Иконка.svg}
    Ресурс{Расширение1::Основная::Картинки/Иконка2.svg}
  • С помощью типа ПакетРесурсов — статический метод Текущий() возвращает пакет текущего пространства имен, у которого доступны:

    • определенный ресурс по заданному пути — Получить(Путь: Строка);

    • все ресурсы в указанной папке — ПолучитьВсе(Путь: Строка = "", ВключитьВложенные: Булево = Истина).

      ПакетРесурсов.Текущий().ПолучитьВсе("Картинки", Ложь)
важно

Из расширяемого проекта нет доступа к ресурсам расширения подсистемы — при попытке такого обращения выдается ошибка применения. Из расширения доступ к ресурсам расширяемой подсистемы есть.

Поддерживаемые элементы и ограничения​

В расширении поддерживается определенный набор элементов проекта, при этом действуют некоторые ограничения.

В расширении можно добавлять следующие стандартные элементы:

Действуют следующие ограничения:

  • HTTP- и SOAP-сервисы должны иметь разрешения РазрешеноВсем или РазрешеноАутентифицированным для сервиса в целом. Использование разрешений РазрешенияВычисляются и разрешений для отдельных шаблонов не поддерживается.
  • Нельзя изменять свойства расширяемой подсистемы.