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() и т.д.
Описание поля состоит из нескольких ключей:
| |
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([]);
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.