RelationManager
RelationManager - это объект-сервис, получаемый через \Bitrix\Crm\Service\Container. Именно через него происходит общение клиентского кода и API связей. Объект позволяет получить информацию о существующих типах связи, найти связанные элементы или создать новые связи или типы связей.
Создание и редактирование типов связи
Типы связи могут быть двух видов — стандартные и кастомные. API связей позволяет работать с ними обоими. Но клиентский код может создавать, редактировать и удалять только кастомные связи. Для этих операций есть методы с соответствующими названиями:
RelationManager::bindTypes,
RelationManager::updateTypesBinding,
RelationManager::unbindTypes).
Все они после своего выполнения возвращают объект \Bitrix\Main\Result. Если по ходу выполнения возникают ошибки, они складываются в него в виде объектов \Bitrix\Main\Error. Большинство ошибок имеет свой код в виде константы RelationManager::ERROR_CODE_*, с помощью которых можно определить, что конкретно пошло не так.
Проверить, существует ли тип связи между сущностями, можно через метод RelationManager::areTypesBound
. Он вернет true, если тип связи существует, вне зависимости от того, стандартный он или кастомный.
getAvailableForParentBindingEntityTypes
RelationManager::getAvailableForParentBindingEntityTypes( ?int $currentEntityId = null ): array[]
Метод позволяет получить массив всех типов сущностей, которые могут быть родителями для переданного типа сущности. Если передан null, то возвращает все сущности, которые в принципе могут быть родителями.
Возвращаемый массив имеет следующую структуру:
$result = [ // entityTypeId 2 => [ 'entityTypeId' => 2, 'title' => 'Сделка', ], 7 => [ 'entityTypeId' => 7, 'title' => 'Предложение', ], ];
getAvailableForChildBindingEntityTypes
RelationManager::getAvailableForChildBindingEntityTypes( ?int $currentEntityId = null ): array[]
Метод аналогичен предыдущему. Он возвращает массив всех типов сущностей, которые могут быть потомками текущего типа или потомками в целом.
Получение типов связи
Метод | Описание | С версии |
---|---|---|
RelationManager::getRelation( RelationIdentifier $identifier ): ?Relation | Метод возвращает конкретный тип связи, если он существует. | |
RelationManager::getRelations( int $entityTypeId ): Relation\Collection | Метод возвращает коллекцию всех типов связи, в которых фигурирует $entityTypeId (не важно, как родитель или как потомок). | |
RelationManager::getParentRelations( int $childEntityTypeId ): Relation\Collection | Метод возвращает коллекцию всех типов связи, в которых $childEntityTypeId упоминается как сущность-потомок. | |
RelationManager::getChildRelations( int $parentEntityTypeId ): Relation\Collection | Метод возвращает коллекцию всех типов связи, в которых $parentEntityTypeId упоминается как родительская сущность. |
Создание и удаление связей
С помощью метода RelationManager::bindItems
можно связать между собой два элемента. А с помощью метода RelationManager::unbindItems
можно эту связь удалить.
Аналогично методам для редактирования типов связи, эти методы возвращают объект \Bitrix\Main\Result, в который складываются возникающие ошибки. Большинство из них имеет код в виде константы RelationManager::ERROR_CODE_*.
Проверить, связаны ли элементы, можно через RelationManager::areItemsBound
.
Получение связанных элементов
Метод | Описание | С версии |
---|---|---|
RelationManager::getElements( ItemIdentifier $identifier ): ItemIdentifier[] | Метод возвращает все элементы, которые связаны с переданным элементом. | |
RelationManager::getParentElements( ItemIdentifier $child ): ItemIdentifier[] | Метод возвращает все элементы, которые связаны с переданным элементом и являются его родителями. | |
RelationManager::getChildElements( ItemIdentifier $parent ): ItemIdentifier[] | Метод возвращает все элементы, которые связаны с переданным элементом и являются его потомками. |