Documentation

Relation

\Bitrix\Crm\Relation - main class with concentrated majority of binding API logic. This class object is a specific type of binding between CRM entities, for example Deal - Quote. This specific object binds and unbinds items, checks for available binding and retrieving bound items.

Methods for handling items

When [link=13962808]RelationManager[/link] handles items работа с элементами (проверка на существование связи, связывание/отвязывание элементов), то он по факту обращается к методам объекта Relation. А именно:

  • areItemsBound(
       ItemIdentifier $parent,
       ItemIdentifier $child
    ): bool
  • bindItems(
       ItemIdentifier $parent,
       ItemIdentifier $child
    ): \Bitrix\Main\Result
  • getParentElements(
       ItemIdentifier $child
    ): ItemIdentifier[]
  • и другие...

Сейчас в CRM существует множество различных типов связи, каждый из которых по-своему реализуется со стороны БД. Поэтому Relation при работе с элементами использует паттерн проектирования Стратегия Стратегия - поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости.
Подробнее...
.

[link=13963826]\Bitrix\Crm\Relation\StorageStrategy[/link] - базовый класс стратегии по работе с БД (стратегии хранения данных). Он предоставляет для Relation публичный интерфейс, посредством которого методы работы с элементами взаимодействуют с БД. То, какая именно стратегия будет применяться для данного типа связи, конфигурируется посредством метода:

\Bitrix\Crm\Relation::setStorageStrategy(
   StorageStrategy $storageStrategy
): Relation

В него в качестве параметра передается инстаницированный объект стратегии.

Для работы методов, которые взаимодействуют с элементами, необходим объект стратегии. Поэтому при вызове этих методов до того, как стратегия была установлена через этот метод, будет выброшено исключение.

Стандартные (предопределенные) и кастомные типы связи

Типы связи могут быть двух видов:

  • стандартные (predefined) - те, что заданы на уровне бизнес-логики и продуктовых решений. Стандартные типы связи не могут быть удалены, изменены. Не может быть создан кастомный тип связи, дублирующий стандартный. Пример: продукт-менеджер решил, что к Сделке можно привязать Предложение.
  • кастомные (custom) - те, которые клиентский код может создать и настроить самостоятельно.Кастомные типы связи находятся полностью во власти клиентского кода. Вы можете их создавать, редактировать, удалять на свое усмотрение. Пример: администратор портала решил, что Смарт-процесс "Реестр договоров" можно привязать к Сделке.

Узнать, к какому конкретно виду принадлежит данный объект Relation можно с помощью метода Relation::isPredefined.

Создание нового объекта

Чтобы инстанцировать новый объект Relation используется фабричный метод Relation::create. В него передаются следующие параметры:

  • int $parentEntityTypeId - идентификатор родительского типа сущности,
  • int $childEntityTypeId - идентификатор типа сущности потомка,
  • bool $isChildrenListEnabled = true - должен ли быть показан грид потомков в детальной карточке родительского элемента (например, как вкладка "Предложения" в карточке сделки). По умолчанию true.

© «Bitrix24», 2001-2024