Документация для разработчиков
Темная тема

Работа с элементами

Работа с элементами

Создание элемента

$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();


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
2
Тимофей Гурьев
Сообщение не промодерировано, возможны ошибки и неточности.
ID элемента, созданного с помощью (пример «Создание элемента»)
Код
$operation = $factory->getAddOperation($item, $context);
$result = $operation->launch();
можно получить так:
Код
$id = $item->getData()['ID'];
то есть $item изменяется после сохранения, до сохранения ID == 0, после сохранения это реальный ID созданного элемента
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх