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

Factory

Общие методы


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

Реализация фабрики для каждого типа возвращает набор классов, специфичных именно для этого типа.

Сервис фабрики является входной точкой всегда, когда необходимо работать с данными, специфичными для конкретного типа сущности.

Инстанс фабрики получается из контейнера сервисов.

Здесь и далее под словом "тип" подразумевается "тип сущности в рамках CRM", такой как "Лид", "Сделка" и т.д. К ним же относятся "Смарт-процессы".

Метод Описание С версии
abstract public function getEntityTypeId(): int;
Метод возвращает идентификатор типа CRM.
public function getEntityName(): string
Метод возвращает строковое представление идентификатора типа CRM.
public function getEntityAbbreviation(): string
Метод возвращает сокращенное строковое представление идентификатора типа CRM.
public function getEntityDescription(): string
Метод возвращает языковое обозначение типа.

Функционал типа


Часть этих методов перекликаются с соответствующими методами из Model\Dynamic\Type.


Метод Описание С версии
public function isMultipleAssignedEnabled(): bool
Возвращает true, если функционал множественных ответственных активен. Сейчас всегда возвращает false, не до конца реализовано.
public function isCategoriesSupported(): bool
Возвращает true, если тип поддерживает работу с направлениями.
public function isCategoriesEnabled(): bool
Возвращает true, если тип поддерживает работу с направлениями и этот функционал активирован.
public function isStagesSupported(): bool
Возвращает true, если тип поддерживает работу со стадиями.
public function isStagesEnabled(): bool
Возвращает true, если тип поддерживает работу со стадиями и этот функционал активирован.
public function isLinkWithProductsEnabled(): bool
Возвращает true, если для типа используется функционал привязки к товарам.
public function isBeginCloseDatesEnabled(): bool
Возвращает true, если у типа есть поля "Дата начала" и "Дата окончания".
public function isClientEnabled(): bool
Возвращает true, если у типа есть поле "Клиент" (привязка к контактам и компании).
public function isCrmTrackingEnabled(): bool
Возвращает true, если тип поддерживает работу со сквозной аналитикой и utm-метками.
public function isMyCompanyEnabled(): bool
Возвращает true, если у типа есть поле "Реквизиты моей компании".
public function isDocumentGenerationEnabled(): bool
Возвращает true, если для типа активирован функцинал печати документов.
public function isSourceEnabled(): bool
Возвращает true, если у типа есть поля "Источник" и "Дополнительно об источнике".
public function isUseInUserfieldEnabled(): bool
Возвращает true, если тип может быть использован в поле типа "Привязка к элементам CRM".
public function isRecyclebinEnabled(): bool
Возвращает true, если функционал корзины активирован.
public function isAutomationEnabled(): bool
Возвращает true, если функционал роботов и триггеров активирован.
public function isBizProcEnabled(): bool
Возвращает true, если функционал дизайнера бизнес-процессов активирован.
public function isObserversEnabled(): bool
Возвращает true, если у типа есть поле "Наблюдатели" с соответствующим функционалом.
public function isNewRoutingForDetailEnabled(): bool
Возвращает true, если ссылки на детальную страницу элементов этого типа должны строиться по тому же принципу, что и ссылки на смарт-процессы.
public function isNewRoutingForListEnabled(): bool
Возвращает true, если ссылки на список элементов этого типа должны строиться по тому же принципу, что и ссылки на смарт-процессы.
public function isNewRoutingForAutomationEnabled(): bool
Возвращает true, если ссылки на настройку роботов и триггеров этого типа должны строиться по тому же принципу, что и ссылки на смарт-процессы.

Поля элементов этого типа


Метод Описание С версии
public function getFieldsInfo(): array
Метод возвращает описание полей элементов этого типа в виде массива, где ключ - код поля, а значение - описание.
Результат работы этого метода совместим с методами из старого API \CCrmDeal::GetFieldsInfo(), \CCrmLead::GetFieldsInfo() и т.д.
Описание поля состоит из нескольких ключей:
  • TITLE - Название поля на текущем языке.
  • TYPE - Тип поля, возможные перечисления можно посмотреть в константах класса Crm\Field.
  • ATTRIBUTES - Массив атрибутов поля, возможные перечисления находятся в класса \CCrmFieldInfoAttr.
  • CLASS - FQN класса-наследника Crm\Field, в котором реализована какая-то специфическая для этого поля бизнес-логика.
  • CRM_STATUS_TYPE - Если тип поля crm_status, то здесь находится значение колонки ENTITY_ID для таблицы b_crm_status.
  • SETTINGS - Массив настроек для класса-наследника Crm\Field.
public function getFieldsMap(): array
Метод возвращает карту соответствия "общих" кодов полей и кодов полей этого типа, если они отличаются от "общих" (подробнее в описании Crm\Item).
Ключ - "общий" код поля, а значение - код поля этого типа.
public function getEntityFieldNameByMap
(string $commonFieldName): string
Метод возвращает код поля этого типа по его "общему" коду.
public function getCommonFieldNameByMap
(string $entityFieldName): string
Метод возвращает "общий" код поля по коду поля этого типа.
public function getFieldCaption(string $commonFieldName): string
Метод возвращает языковое название поля по его "общему" коду.
Если название не найдено, то будет возвращен сам код поля.
public function isFieldExists(string $commonFieldName): bool
Метод вернет true, если поле с "общим" кодом $commonFieldName есть у элементов этого типа.
public function getFieldValueCaption
(string $commonFieldName, $fieldValue): string
Метод вернет строковое значение поля с "общим" кодом $commonFieldName и значением $fieldValue.
public function getFieldsCollection(): Field\Collection
Метод вернет коллекцию полей этого типа.
Сюда же войдут пользовательские поля, о которых ниже.

Пользовательские поля типа


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

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


Метод Описание С версии
public function getUserFieldEntityId(): string
Возвращает идентификатор сущности для апи пользовательских полей.
public function clearUserFieldsInfoCache()
Сбрасывает кеш данных о пользовательских полях типа.
public function getUserFieldsInfo(): array
Возвращает описание пользовательских полей в том же формате, что и в метод getFieldsInfo().
public function getUserFields(): array
Возвращает описание пользовательских полей этого типа.

Направления


Данные о направлениях кешируются внутри фабрики.


Метод Описание С версии
public function getCategories(): array
Возвращает массив направлений этого типа.
abstract public function createCategory(array $data = []): Category;
Создает объект направления на основе данных о нем.
public function createDefaultCategoryIfNotExist(): Category
Если уже существует направление по умолчанию, то метод вернет этот объект.
Если направления по умолчанию нет, то это направление будет создано.
Если не удалось создать направление по умолчанию, будет выброшено исключение \Bitrix\Main\InvalidOperationException.
Этот метод используется в тех местах, где данные о направлении являются обязательными (например, в поле CATEGORY_ID таблицы элемента смарт-процесса).
public function getDefaultCategory(): ?Category
Возвращает направление по умолчанию, если оно есть.

Стадии


Данные о стадиях кешируются внутри фабрики.


Метод Описание С версии
public function getStagesEntityId
(?int $categoryId = null): ?string
Возвращает идентификатор ENTITY_ID для таблицы статусов
Если тип не поддерживает работу со стадиями, то вернется null.
public function getStages
(int $categoryId = null): EO_Status_Collection
Возвращает коллекцию стадий направления $categoryId.
Если $categoryId не передано, но тип поддерживает работу с направлениями, то будет получен список стадий направления по умолчанию.
public function purgeStagesCache(): Factor
Очищает кеш стадий.
public function getStage
(string $statusId): ?EO_Status
Возвращает объект стадии по строкому идентификатору $stageId.

Элементы


Метод Описание С версии
abstract public function getDataClass(): string;
Возвращает FQN класса-таблета, где хранятся элементы этого типа.
public function getItemByEntityObject
(EntityObject $object): Item
Возвращает объект элемента по orm-объекту $object.
public function getItems
(array $parameters = []): array
Возвращает массив объектов элементов.
Здесь $parameters - массив со структурой, полностью аналогичной аргументу в методе \\Bitrix\Main\Entity\DataManager::getList().
public function getItemsFilteredByPermissions
( array $parameters, ?int $userId = null, 
string $operation = UserPermissions::OPERATION_READ ): array
Возвращает массив объектов элементов аналогично методу getList, но здесь учитываются права доступа пользователя с id $userId при выполнении действия $operation.
Параметр $userId как есть передается в метод Service\Container::getUserPermissions().
public function getItem(int $id): ?Item
Возвращает объект элемента по его $id.
public function getItemsCount
(array $filter = []): int
Возвращает количество элементов по фильтру $filter.
public function getItemsCountFilteredByPermissions
( array $filter = [], ?int $userId = null, 
string $operation = UserPermissions::OPERATION_READ ): int
Возвращает количество элементов по фильтру $filter с учетом прав доступа пользователя с id $userId при выполнении действия $operation.
Параметр $userId как есть передается в метод Service\Container::getUserPermissions().
public function createItem(array $data = []): Item
Создает новый элемент со значениями полей из $data.
В $data должны использоваться "общие" ключи.
При этом сюда можно передавать значения только скалярных собственных полей. Для остальных типов полей (пользовательские, ссылки) работоспособность не гарантируется.
public function getItemCategoryId(int $id): ?int
Возвращает идентификатор направления элемента по его $id.

Изменения


Метод Описание С версии
public function getAddOperation
(Item $item, Context $context = null): Operation\Add
Возвращает объект операции добавления элемента $item с контекстом $context.
public function getUpdateOperation
(Item $item, Context $context = null): Operation\Update
Возвращает объект операции изменения элемента $item с контекстом $context.
public function getDeleteOperation
(Item $item, Context $context = null): Operation\Delete
Возвращает объект операции удаления элемента $item с контекстом $context.
public function getConversionOperation
(Item $item, EntityConversionConfig $configs, Context $context = null): 
Operation\Conversion
Возвращает объект операции конвертации элемента $item с конфигом $configs с контекстом $context.
public function getCopyOperation
(Item $item, Context $context = null): Operation\Copy
Возвращает объект операции копирования элемента $item с контекстом $context.
getDependantFieldsMap(): array
Возвращает набор зависимых полей, где ключ - код поля, а значение - массив с кодами полей, которые от него зависят.

История действий над элементом


Метод Описание С версии
public function getTrackedObject
(Item $itemBeforeSave, Item $item = null): 
TrackedObject
Метод возвращает объект класса TrackedObject, используемый при записи истории элемента с помощью сервиса истории. Возвращаемый объект сконфигурирован в соответствии с особенностями типа сущности, с которым работает фабрика.
Item $itemBeforeSave - элемент до сохранения. Если изменения над ним не проводились, то это — текущий элемент. Item $item - текущее состояние элемента. Если изменения над элементом не проводились, то этот параметр не используется.

UI


Метод Описание С версии
public function getEditorAdapter(): EditorAdapter
Метод возвращает сконфигурированный сервис адаптера для редактора.

Пример


use Bitrix\Crm\Service;

$factory = Service\Container::getInstance()->getFactory(\CCrmOwnerType::Quote);
if ($factory->isStagesEnabled ())
{
	$stages = $factory->getStages();
}
// все элементы без учета прав доступа
$allItems = $factory->getItems([]);
// элементы с учетом прав доступа на чтение для текущего пользователя
$items = $factory->getItemsFilteredByPermissions([]);
© «Битрикс», 2001-2024, «1С-Битрикс», 2024