> For the complete documentation index, see [llms.txt](https://projects.itproduct.ru/azimut/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://projects.itproduct.ru/azimut/rasshirenie-platformy/writing-extensions.md).

# Разработка дополнений

Не смотря на то что в Азимуте не нужно программировать (кроме sql), все-таки встречаются задачи, где без этого никак не выкрутиться. С помощью c# вы можете расширить возможности Азимута.

Мы рассмотрим самые распространенные задачи, это:

* Интеграции (сложное API и Автозадачи)
* Расширение возможностей клиентского приложения
* Расширение возможностей конфигуратора
* Расширение процесса публикации релизов

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

Для работы с c# лучше использовать Visual Studio.

Первое что необходимо сделать, это создать решение (sln) для нашего проекта. Оно создается автоматически при первом его открытии. Чтобы открыть решение, нажмите CSharp.

<figure><img src="/files/IcNbz4F5AILOy7KASKuj" alt=""><figcaption></figcaption></figure>

В решении будет сформировано 3 пустых проекта:

<figure><img src="/files/Cn5LWdnTXaAs2K2AUSlk" alt=""><figcaption></figcaption></figure>

* .Client - для клиентской части
* .Server - для серверной части
* .Editor - для расширения возможностей конфигуратора

Решение формируется в Мои документы, в папке Azimut.CSharp/<Имя проекта>/, а также сохраняется в базе, в таблице SY\_CSharpFiles. Как только вы добавляете/меняете файл в проекте, он автоматически компилируется и конфигуратор видит новые изменения.

Таблица SY\_CSharpFiles конечно не заменит полноценного хранилища исходных кодов, но в качестве средства синхронизации кода между всеми разработчиками сгодится.

## Посмотрите пример на видео

{% embed url="<https://rutube.ru/video/4d285b7d2cd7af0121c84e1f1e288df3/>" %}

## Что вообще можно расширять

### Основные базовые типы

| Тип                                                            | Описание                                                                                    |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| Azimut.Metadata.MetadataFuncType                               | Самый базовый абстрактный функциональный тип                                                |
| Azimut.Business.Design.MetadataBaseVerb                        | Базовый тип команды (кнопки)                                                                |
| Azimut.Business.Design.DocumentBaseBinding                     | Базовый функциональный тип биндинга значения                                                |
| Azimut.Business.Design.MetadataValueBaseFunc\<TValue>          | Базовый функциональный тип простого значения в биндингах                                    |
| Azimut.Business.Actions.MetadataActionBase                     | Базовое серверное действие                                                                  |
| Azimut.Business.MetadataChannelBase                            | Базовый канал уведомления                                                                   |
| Azimut.Business.MetadataBaseColumn                             | Базовый тип столбца сущности (таблицы)                                                      |
| Azimut.Business.MetadataEvents.MetadataEventBase               | Базовый тип сообщения системы уведомлений (например, Стандартное сообщение, Xslt сообщение) |
| Azimut.Business.MetadataBaseScript                             | Базовый тип скрипта контекста                                                               |
| Azimut.Business.MetadataScriptParameterBase                    | Базовый тип параметра скрипта контекста                                                     |
| Azimut.Business.NotificationActions.NotificationActionBase     | Базовое действие в уведомлениях чата                                                        |
| Azimut.Business.SchedulerTasks.Periods.SchedulerTaskPeriodBase | Базовый период запуска задачи планировщика (ежесекундно, минутно и т.д.)                    |
| Azimut.Business.Design.ForeignModes.MetadataForeignModeBase    | Базовый режим внешнего ключа, этот же тип является "Без внешнего ключа"                     |
| Azimut.Business.Design.SqlModifierFuncItemBase                 | Базовый элемент модификатора (что модифицируем - поле, метаданные..)                        |
| Azimut.Business.Design.Views.MetadataBaseViewDocument          | Базовый тип документа редактирования                                                        |
| Azimut.Business.Design.Views.MetadataMasks.MetadataBaseMask    | Базовая маска ввода                                                                         |
| Azimut.Business.Design.Views.MetadataFileUploaderBase          | Базовый тип загрузчика файлов с клиента на сервер                                           |
| Azimut.Business.Design.Views.MetadataBaseProperty              | Базовый тип поля представления                                                              |
| Azimut.Business.Design.Views.MetadataBindingProperty           | Базовый тип поля представления, который биндится к полям сущности                           |
| Azimut.Business.Design.Views.ReferenceBaseFilter               | Базовый фильтр в поле Справочник                                                            |
| Azimut.Business.Design.Views.MetadataPropertySummaryBase       | Базовая функция для посчета итогов столбца в гриде                                          |
| Azimut.Business.Design.Wizards.WizardStep                      | Базовый тип шага визарда                                                                    |
| Azimut.Host.Api.Controllers.ApiControllerBase                  | Базовый контроллер Api                                                                      |
| Azimut.Host.Api.Authorizers.BaseAuthorizer                     | Базовый способ авторизации в API (он же является типом "без авторизации")                   |
| Azimut.Host.Api.ChatBotProcessing.ChatBotProcessingBase        | Базовая обработка сообщения чат бота                                                        |
