Работа с элементами
Работа с элементами
- Класс для работы с элементом любого типа сущности - \Bitrix\Crm\Item
- Получение объектов осуществляется через методы фабрики \Bitrix\Crm\Service\Factory
- Выполнение действий (создание / изменение / удаление и другие) оборачивается в операции \Bitrix\Crm\Service\Operation
- Особенности работы с коллекциями элемента раскрыты в отдельной статье
- Немного про структуру данных с привязками
Создание элемента
$entityTypeId = \CCrmOwnerType::Deal; $factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory($entityTypeId); if (!$factory) { echo 'factory not found'; return; } // пустой элемент, у которого заполнены значения полей по умолчанию. В том числе направление, стадия, кем создан и т.д. $item = $factory->createItem(); // метод вернет данные об элементе в виде массива, идентичного по структуре "старому" API // $item->getCompatibleData(); // теперь надо записать новые значения полей $item ->setAssignedById($newAssigned) ->setMycompanyId($newMycompanyId) ; // можно данные записать массивом, аналогичным по структуре "старому" API $item->setFromCompatibleData([ \Bitrix\Crm\Item::FIELD_NAME_ASSIGNED => $newAssigned, \Bitrix\Crm\Item::FIELD_NAME_MYCOMPANY_ID => $newMycompanyId, ]) // данные нигде не сохранены, они только хранятся внутри $item // чтобы сохранить изменения в БД без выполнения всех связанных действий, достаточно вызвать // $item->save(); // НО ДЕЛАТЬ ТАК НЕ РЕКОМЕНДУЕТСЯ. // Все связанные действия, часто обеспечивающие работоспособность функционала crm будут пропущены (обновления счетчиков, // прав доступа, поисковых индексов, т.д.) // если необходимо переопределить контекст выполнения, это надо сделать в явном виде $context = new \Bitrix\Crm\Service\Context(); $context->setUserId($userId); // операция производится от пользователя $userId с выполнением всех проверок $operation = $factory->getAddOperation($item, $context); $result = $operation->launch();
Изменение элемента
Например, мы хотим изменить состав связанных с элементом контактов, без учёта всех проверок.
$entityTypeId = \CCrmOwnerType::Deal; $entityId = 261; $factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory($entityTypeId); // нет смысла выполнять код дальше, если у сущности нет поля "Клиент" if (!$factory || !$factory->isClientEnabled()) { echo 'factory not found'; return; } $item = $factory->getItem($entityId); if (!$item) { echo 'item not found'; return; } // $item->getContacts() вернет массив orm-объектов из таблицы b_crm_contact, привязанных к этому элементу // он может быть полезен, когда необходимо прочитать данные привязанных контактов. // здесь хранится простой массив с данными о привязках к контактам //$existingBindings = $item->getContactBindings(); // добавить связь с контактом с ид = 4 $item->bindContacts(\Bitrix\Crm\Binding\EntityBinding::prepareEntityBindings(\CCrmOwnerType::Contact, [4])); // удалить связь с контактом с ид = 3 $item->unBindContacts(\Bitrix\Crm\Binding\EntityBinding::prepareEntityBindings(\CCrmOwnerType::Contact, [3])); // данные о новых привязках ещё нигде не сохранены, они только хранятся внутри $item // чтобы сохранить изменения в БД без выполнения всех связанных действий, достаточно вызвать // $item->save(); // НО ДЕЛАТЬ ТАК НЕ РЕКОМЕНДУЕТСЯ. // Все связанные действия, часто обеспечивающие работоспособность функционала crm будут пропущены (обновления счетчиков, // прав доступа, поисковых индексов, т.д.) // если необходимо переопределить контекст выполнения, это надо сделать в явном виде // $context = new \Bitrix\Crm\Service\Context(); // $context->setUserId($userId); $operation = $factory->getUpdateOperation($item); $operation->disableAllChecks(); $result = $operation->launch();
Удаление элемента
$entityTypeId = \CCrmOwnerType::Deal; $entityId = 260; $factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory($entityTypeId); if (!$factory) { echo 'factory not found'; return; } $item = $factory->getItem($entityId); if (!$item) { echo 'item not found'; return; } // удалить элемент без выполнения дополнительных проверок и действий можно через // $item->delete(); // НО ТАК ДЕЛАТЬ НЕ РЕКОМЕНДУЕТСЯ! // В таблицах останутся лишние записи (индексы, связи и т.д.) $result = $factory->getDeleteOperation($item)->launch();
Сообщение не промодерировано, возможны ошибки и неточности.
|
||||
ID элемента, созданного с помощью (пример «Создание элемента»)
| ||||
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.