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

Не смотря на то что в Азимуте не нужно программировать (кроме 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        | Базовая обработка сообщения чат бота                                                        |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://projects.itproduct.ru/azimut/rasshirenie-platformy/writing-extensions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
