Документация для разработчиков
Темная тема

Модели

Общее описание

Это абстрактный js-экстеншн, содержащий только один класс.

Этот класс в паре с Service\Converter призван обеспечить "бесшовный" и прозрачный обмен данными между бекендом и фронтендом.

Жизненный цикл выглядит следующим образом:

  • Данные загружаются из базы данных.
  • На бекенде они преобразуются в json с помощью Service\Converter.
  • На основе данных создается наследник crm.model, обеспечивающий удобный доступ к данным на стороне фронтенда.
  • Данные могут быть изменены на фронтенде по аналогии с методами EntityObject на бекенде.
  • После изменения данные могут быть сохранены вызовом метода save, который сделает ajax-запрос на соответствующий контроллер.
  • Контроллер выполнит действие над элементом и вернет обратно актуальное состояние объекта снова в json формате.

Есть ещё вариант, когда на фронте есть только id и модель может получить актуальные данные с бекенда с помощью метода load().

Чтобы все эти действия работали, внутри модели должен быть способ получить название четырех ajax-действий:

  • get;
  • add;
  • update;
  • delete.

По умолчанию названия действий получаются как 'crm.api.' + this.getModelName() + '.' + action.

Модель можно сконфигурировать, передав дополнительные get-параметры для каждого действия

Но чтобы вся цепочка заработала как задумано, на каждый тип данных необходимо иметь:

  • свою реализацию конвертера;
  • свою реализацию модели;
  • свой контроллер.

Пока что всё это есть только для настроек смарт-процесса (crm.type-model).

Методы

Метод Описание С версии
constructor(data: {}, params: {})

  • data - объект с данными. Имеет произвольную структуру.
  • params - параметры работы с моделью.
    • getParameters - набор дополнительных параметров для выполнения действий. Является объектом, где могут быть свойства.
Конструктор. Аргумент data используется как данные о модели. Аргумень params используется при ajax-запросах.
get actions()
Вернет объект с ключами get, add, update, delete, где указаны названия ajax-действий для выполнения чтения, добавления, обновления и удаления данных.
compileActionString(action: string): string
Соберет строку с названием ajax-действия для выполнения action .
getId(): ?number
Вернет идентификатор. Если его нет, то считается, что это новые данные, ещё не сохраненные в БД.
getEntityTypeId(): ?number
Вернет идентификатор типа сущности CRM.
isSaved(): boolean
Вернет true, если id > 0.
isDeleted(): boolean
Вернет true, если объект удален из базы данных (был вызван и успешно отработал метод delete).
setData(data)
Запишет данные модели data.
getData()
Вернет данные модели.
setGetParameters(action: string, 
parameters: getParameters)
Запишет дополнительные get-параметры getParameters для действия с кодом action.
getGetParameters(action: string): 
getParameters
Вернет дополнительные get-параметры для действия с кодом action.
getModelName(): string
Вернет строковое представление модели. Абстрактный метод, должен быть определен в наследнике.
setDataFromResponse(response: {data: {}})
Записывает новые данные о модели из ответа на ajax-действие response.
load(): Promise<{data: {}},string[]>
Выполнит ajax-запрос на действие с кодом get. Вернет Promise, который будет разрешен после обновления данных о модели.
save(): Promise<{data: {}},string[]>
Выполнит ajax-запрос на действие с кодом add (если данные не были сохранены) или update. Вернет Promise, который будет разрешен после после выполнения запроса.
delete(): Promise<{data: {}},string[]>
Выполнит ajax-запрос на действие с кодом delete (если данные не были сохранены) или update. Вернет Promise, который будет разрешен после после выполнения запроса.

Наследники


TypeModel (crm.type-model)

Класс для работы с настройками смарт-процессов.

ajax-действия:

  • get: crm.type.get
  • add: crm.type.add
  • update: crm.type.update
  • delete: crm.type.delete

Позволяет полноценно работать с данными на стороне фронтенда.

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

  • getTitle / setTitle
  • getCreatedBy
  • getIsCategoriesEnabled / setIsCategoriesEnabled
  • getIsStagesEnabled / setIsStagesEnabled
  • getIsBeginCloseDatesEnabled / setIsBeginCloseDatesEnabled
  • getIsClientEnabled / setIsClientEnabled
  • getIsLinkWithProductsEnabled / setIsLinkWithProductsEnabled
  • getIsCrmTrackingEnabled / setIsCrmTrackingEnabled
  • getIsMycompanyEnabled / setIsMycompanyEnabled
  • getIsDocumentsEnabled / setIsDocumentsEnabled
  • getIsSourceEnabled / setIsSourceEnabled
  • getIsUseInUserfieldEnabled / setIsUseInUserfieldEnabled
  • getIsObserversEnabled / setIsObserversEnabled
  • getIsRecyclebinEnabled / setIsRecyclebinEnabled
  • getIsAutomationEnabled / setIsAutomationEnabled
  • getIsBizProcEnabled / setIsBizProcEnabled
  • getIsSetOpenPermissions / setIsSetOpenPermissions
  • getLinkedUserFields / setLinkedUserFields
  • getCustomSectionId / setCustomSectionId

Помимо этих полей есть методы управления сложными данными о настройках - настройки дополнительных разделов и настройки связей:

  • getCustomSections / setCustomSections

    Данные о настройках дополнительных разделов имеют вид массива с элементами:

    {
        id: number,
        title: string,
        isSelected: boolean
    }
    
  • getRelations / setRelations

    Данные о настройках связей имеют вид RelationsMap[]:

    declare type RelationsMap = {
    	parent: Relation[],
    	child: Relation[],
    }
    
    declare type Relation = {
    	entityTypeId: number,
    	isChildrenListEnabled?: boolean|null,
    	isPredefined?: boolean,
    }
    

StageModel (crm.stage-model)

Модель данных о стадии. Не работает с ajax-действиями, работает только на фронтенде.

Имеет набор именованных методов для получения данных о стадии:

  • getName / setName
  • getEntityId
  • getStatusId
  • getSort / setSort
  • getColor / setColor
  • getSemantics
  • getCategoryId
  • isFinal
  • isSuccess
  • isFailure

CategoryModel (crm.category-model)

Модель данных о направлении произвольного типа сущности. Не работает с ajax-действиями, работает только на фронтенде.

Имеет набор именованных методов для получения данных о направлении:

  • getName / setName
  • getSort / setSort
  • isDefault / setDefault

Примеры

$entityTypeId = 140;

$type = \Bitrix\Crm\Model\Dynamic\TypeTable::getByEntityTypeId($entityTypeId)->fetchObject();

\Bitrix\Main\UI\Extension::load(['crm.type-model']);

const typeModel = new BX.Crm.Models.TypeModel(jsonSerialize()) ?>);

typeModel.setTitle('newTitle);

typeModel.save().then(() => {
    console.log('typeModel updated');
});

Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2023, «1С-Битрикс», 2023
Наверх