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