Для работы со смарт-процессом используется новое АПИ.
use Bitrix\Crm\Service\Container; $fabrika = Container::getInstance()->getFactory($entityTypeId);
$context = new Context(); $context -> setUserId($userId); /*если добавление происходит в агенте например, то надо установить юзера*/ $item = $fabrika ->createItem($data); $saveOperation = $fabrika ->getAddOperation($item, $context); /*для поддержки кастомизации операции добавления*/ $operationResult = $saveOperation->launch();
$item->set('UF_CRM_1_POLE', $value); $item->save(); /*или для нескольких полей*/ $class = $fabrika -> getDataClass(); $saveResult = $class::update($id, $arUpdate); /*или с поддержкой кастомизации операции изменения */ $saveOperation = $fabrika ->getUpdateOperation($item, $context); $operationResult = $saveOperation->launch();
$saveOperation = $fabrika->getDeleteOperation($item, $context); $operationResult = $saveOperation->launch();
$items = $fabrika->getItems([ 'filter' => ['@ID' => $ids,'=PARENT_ID_1'=>$otherSmartElementId], 'select' => ['ID', 'UF_CRM_2_POLE', 'TITLE'], 'order' => ['UF_CRM_2_POLE' => 'ASC'], 'limit'=>1000, 'offset' =>0 ]);
use Bitrix\Crm\Item,
Bitrix\Crm\Service,
Bitrix\Crm\Service\Operation,
Bitrix\Main\DI,
Bitrix\Main\Loader,
Bitrix\Main\Result,
Bitrix\Main\Error; Loader::includeModule("crm"); $container = new class extends Service\Container { public function getFactory(int $entityTypeId): ? Service\Factory
{ if ($entityTypeId === SMART_PROCESS_ID) { $type = $this->getTypeByEntityTypeId($entityTypeId);
$factory = new class($type) extends Service\Factory\Dynamic { public function getAddOperation(Item $item, Service\Context $context = null): Operation\Add {
$operation = parent::getAddOperation($item, $context);
$operation->addAction(
Operation::ACTION_BEFORE_SAVE,
new class extends Operation\Action {
public function process(Item $item): Result
{
/*ваша функция*/
return new Result();
}
}
);
return $operation->addAction(
Operation::ACTION_AFTER_SAVE,
new class extends Operation\Action {
public function process(Item $item): Result
{
/*ваша функция*/
return new Result();
}
}
);
} public function getUpdateOperation(Item $item, Service\Context $context = null): Operation\Update{
$operation = parent::getUpdateOperation($item, $context);
return $operation->addAction(
Operation::ACTION_AFTER_SAVE,
new class extends Operation\Action {
public function process(Item $item): Result
{
/*ваша функция*/
return new Result();
}
}
);
} public function getDeleteOperation(Item $item, \Bitrix\Crm\Service\Context $context = null): Operation\Delete {
$operation = parent::getDeleteOperation($item, $context);
$operation->addAction(
Operation::ACTION_BEFORE_SAVE,
new class extends Operation\Action {
public function process(Item $item): Result
{
/*ваша функция*/
return new Result();
}
}
);
return $operation;
} };
return $factory; } return parent::getFactory($entityTypeId); }
};
DI\ServiceLocator::getInstance()->addInstance('crm.service.container', $container);