Получение активностей, связанных с компанией или контактом

Этот 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()));
}

Полезные ресурсы: