Битрикс24: API смарт-процессов

08.10.2022

Для работы со смарт-процессом используется новое АПИ. 

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


Возврат к списку


Материалы по теме: