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

Модели

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

Это абстрактный 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-2024, «1С-Битрикс», 2024