On this page
event
Работа с активностями (делами) в Битрикс24
Примеры PHP-кода для получения и создания активностей (дел) в Битрикс24, связанных с элементами CRM.
Получение активностей, связанных с компанией или контактом
Этот PHP-код позволяет получить список активностей (дел), связанных с определенной компанией или контактом в Битрикс24. Вы можете использовать его для анализа истории взаимодействий.
use Bitrix\Crm\ActivityTable;
use Bitrix\Crm\Activity\Provider\Call;
use Bitrix\Crm\Activity\Provider\Meeting;
// ID компании или контакта, для которого ищем активности
// Предполагается, что эти переменные получены из бизнес-процесса
$entityTypeId = \CCrmOwnerType::Company; // Или \CCrmOwnerType::Contact
$entityId = $this->GetRootActivity()->GetVariable("EntityID"); // Например, ID компании или контакта
if (!$entityId) {
// Обработка случая, когда ID сущности не передан
$this->TrackingService->WriteToTrackingService("Ошибка: Не указан ID сущности для поиска активностей.");
return;
}
$arFilter = [
'OWNER_TYPE_ID' => $entityTypeId,
'OWNER_ID' => $entityId,
// Дополнительные фильтры, например, по типу активности или дате
// 'PROVIDER_ID' => Call::ACTIVITY_PROVIDER_ID, // Только звонки
// 'COMPLETED' => 'N', // Только незавершенные активности
];
$arSelect = [
'ID', 'SUBJECT', 'TYPE_ID', 'COMPLETED', 'DEADLINE',
'OWNER_TYPE_ID', 'OWNER_ID', 'DESCRIPTION', 'PROVIDER_ID'
];
$arActivities = ActivityTable::getList([
'order' => ['DEADLINE' => 'DESC'],
'filter' => $arFilter,
'select' => $arSelect,
'cache' => ['ttl' => 3600]
])->fetchAll();
$activityList = [];
foreach ($arActivities as $activity) {
$activityList[] = [
'ID' => $activity['ID'],
'SUBJECT' => $activity['SUBJECT'],
'TYPE' => \CCrmActivityType::ResolveName($activity['TYPE_ID']),
'COMPLETED' => $activity['COMPLETED'] === 'Y' ? 'Да' : 'Нет',
'DEADLINE' => $activity['DEADLINE'],
'DESCRIPTION' => $activity['DESCRIPTION'],
'PROVIDER' => $activity['PROVIDER_ID']
];
}
// Присваиваем результат переменной бизнес-процесса
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("ActivityList", $activityList);
Создание новой активности (звонка или встречи)
Данный скрипт демонстрирует, как создать новую активность (например, звонок или встречу) и связать ее с элементом CRM (компанией, контактом, лидом или сделкой).
use Bitrix\Crm\ActivityTable;
use Bitrix\Crm\Activity\Provider\Call;
use Bitrix\Crm\Activity\Provider\Meeting;
use Bitrix\Main\Type\DateTime;
// ID сущности, к которой будет привязана активность
// Предполагается, что эти переменные получены из бизнес-процесса
$ownerTypeId = \CCrmOwnerType::Company; // Или \CCrmOwnerType::Contact, \CCrmOwnerType::Lead, \CCrmOwnerType::Deal
$ownerId = $this->GetRootActivity()->GetVariable("OwnerID"); // Например, ID компании
// Параметры новой активности
$activitySubject = "Плановый звонок клиенту";
$activityDescription = "Обсуждение нового предложения по автоматизации Битрикс24.";
$activityDeadline = (new DateTime())->add("+1 day"); // Активность на завтра
$activityResponsibleId = $this->GetRootActivity()->GetVariable("ResponsibleUserID"); // ID ответственного пользователя
if (!$ownerId || !$activityResponsibleId) {
$this->TrackingService->WriteToTrackingService("Ошибка: Не указан ID владельца или ответственного пользователя.");
return;
}
$fields = [
'OWNER_TYPE_ID' => $ownerTypeId,
'OWNER_ID' => $ownerId,
'TYPE_ID' => \CCrmActivityType::Call, // Или \CCrmActivityType::Meeting
'SUBJECT' => $activitySubject,
'DESCRIPTION' => $activityDescription,
'DEADLINE' => $activityDeadline,
'COMPLETED' => 'N', // Активность не завершена
'PRIORITY' => \CCrmActivityPriority::Medium,
'RESPONSIBLE_ID' => $activityResponsibleId,
'AUTHOR_ID' => $activityResponsibleId, // Автор активности
'PROVIDER_ID' => Call::ACTIVITY_PROVIDER_ID, // Для звонка
// 'PROVIDER_ID' => Meeting::ACTIVITY_PROVIDER_ID, // Для встречи
'PROVIDER_TYPE_ID' => Call::PROVIDER_TYPE_CALL, // Для звонка
// 'PROVIDER_TYPE_ID' => Meeting::PROVIDER_TYPE_MEETING, // Для встречи
'DIRECTION' => \Bitrix\Crm\ActivityDirection::Outgoing, // Исходящий звонок
];
$result = ActivityTable::add($fields);
if ($result->isSuccess()) {
$newActivityId = $result->getId();
$this->TrackingService->WriteToTrackingService("Активность успешно создана. ID: " . $newActivityId);
// Присваиваем ID новой активности переменной бизнес-процесса
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("NewActivityID", $newActivityId);
} else {
$this->TrackingService->WriteToTrackingService("Ошибка при создании активности: " . implode(', ', $result->getErrorMessages()));
}
Полезные ресурсы: