← Назад к заметкам

Заметки

Как получить элементы смарт-процесса PHP-кодом без REST

Как получить элементы смарт-процесса PHP-кодом без REST: factory, Container, getItems, entityTypeId.

Как получить элементы смарт-процесса PHP-кодом без REST: factory, Container, getItems, entityTypeId.

Задача

Разбираем практический сценарий для смарт-процессов.

Задача — как получить элементы смарт-процесса PHP-кодом без REST. В этой заметке важно не смешивать похожие сущности и сначала определить, с каким типом CRM-данных работает код.

Как это устроено

Основная проверка — понять, какие данные реально участвуют в сценарии.

Factory — отдельный участок проверки. Его лучше подтвердить на тестовом элементе, а не переносить логику со сделки или другого смарт-процесса вслепую.

Container — отдельный участок проверки. Его лучше подтвердить на тестовом элементе, а не переносить логику со сделки или другого смарт-процесса вслепую.

getItems — отдельный участок проверки. Его лучше подтвердить на тестовом элементе, а не переносить логику со сделки или другого смарт-процесса вслепую.

Рабочий подход

Начинайте с штатного API и проверяйте фактический ответ.

Для облака используйте REST. Для коробки, если код выполняется внутри портала, чаще удобнее D7 и фабрика CRM.

Не переносите пример со сделки без адаптации: у смарт-процесса свой entityTypeId, свои настройки типа и свои ограничения.

Частые ошибки

Основные ошибки связаны с неверным типом владельца, правами или обходом штатной операции.

Если метод возвращает пусто, сначала проверьте ID типа, ID элемента, права текущего пользователя и включена ли нужная возможность в настройках смарт-процесса.

Если действие срабатывает только после ручного пересохранения, значит код, скорее всего, обходит часть штатной логики CRM.

Минимальный пример

Пример показывает только базовую форму вызова. На реальном портале замените ID и имена полей на свои.

use Bitrix\Main\Loader;
use Bitrix\Crm\Service\Container;

const ENTITY_TYPE_ID = 178;

Loader::includeModule('crm');

$factory = Container::getInstance()->getFactory(ENTITY_TYPE_ID);

$items = $factory->getItems([
    'select' => ['ID', 'TITLE', 'ASSIGNED_BY_ID', 'CREATED_TIME'],
    'filter' => ['=ASSIGNED_BY_ID' => 15],
    'order' => ['ID' => 'DESC'],
    'limit' => 50,
]);