Введение:
Битрикс24 – мощная платформа для управления бизнесом, и модуль «Задачи» является одним из ключевых элементов для организации работы. В «коробочной» версии Битрикс24 разработчики получают прямой доступ к API, что позволяет гибко интегрировать задачи в собственные решения, автоматизировать процессы и создавать кастомные инструменты.
Эта статья – ваш исчерпывающий гид по работе с задачами в Битрикс24 «коробка». Мы рассмотрим все ключевые аспекты: от подключения модуля и использования обработчиков событий до создания сложных фильтров и управления задачами через API. Статья оптимизирована для SEO, чтобы помочь вам быстро найти ответы на свои вопросы и углубить знания в этой области.
1. Подключение модуля задач
Первый шаг к работе с задачами – подключение модуля tasks
в вашем PHP-коде. Это необходимо для доступа ко всем классам и функциям API задач.
<?php
// Подключаем модуль "Задачи"
CModule::IncludeModule("tasks");
?>
2. Обработчики событий: Автоматизация рабочих процессов
Обработчики событий (Event Handlers) – мощный инструмент для автоматизации действий в Битрикс24. Они позволяют вашему коду реагировать на определенные события, происходящие в системе. Для задач доступны следующие события:
OnBeforeTaskAdd
: Вызывается непосредственно перед добавлением новой задачи. Это идеальное место для модификации данных задачи до ее сохранения в базе данных.
<?php
// Регистрируем обработчик события OnBeforeTaskAdd
AddEventHandler("tasks", "OnBeforeTaskAdd", "MyOnBeforeTaskAdd");
function MyOnBeforeTaskAdd(&$arTask)
{
// Пример: Добавляем префикс "[NEW]" к заголовку каждой новой задачи
$arTask["TITLE"] = "[NEW] " . $arTask["TITLE"];
}
?>
OnTaskAdd
: Срабатывает после успешного добавления задачи. Предоставляет вам ID новой задачи ($idTask
) и полный массив данных задачи ($arTask
).
<?php
// Регистрируем обработчик события OnTaskAdd
AddEventHandler("tasks", "OnTaskAdd", "MyOnTaskAdd");
function MyOnTaskAdd($idTask, $arTask)
{
// Пример: Логируем факт создания новой задачи
CEventLog::Add(array(
"SEVERITY" => "INFO",
"AUDIT_TYPE_ID" => "TASKS_TASK_CREATED",
"MODULE_ID" => "tasks",
"ITEM_ID" => $idTask,
"DESCRIPTION" => "Создана задача с ID: " . $idTask
));
}
?>
OnBeforeTaskUpdate
: Вызывается перед обновлением существующей задачи. Позволяет изменять данные задачи ($data
) и поля задачи ($arFields
) непосредственно перед сохранением изменений.
<?php
// Регистрируем обработчик события OnBeforeTaskUpdate
AddEventHandler("tasks", "OnBeforeTaskUpdate", "MyOnBeforeTaskUpdate");
function MyOnBeforeTaskUpdate($id, &$data, &$arTaskCopy)
{
// Пример: Запрещаем изменение поля "Название" после создания задачи
unset($data["TITLE"]);
}
?>
OnTaskUpdate
: Срабатывает после обновления задачи. Передает ID обновленной задачи ($ID
), массив измененных полей ($arFields
) и «копию» задачи до изменений ($arTaskCopy
).
<?php
// Регистрируем обработчик события OnTaskUpdate
AddEventHandler("tasks", "OnTaskUpdate", "MyOnTaskUpdate");
function MyOnTaskUpdate($ID, &$arFields, &$arTaskCopy)
{
// Пример: Логируем изменения статуса задачи
if (isset($arFields["STATUS"])) {
CEventLog::Add(array(
"SEVERITY" => "INFO",
"AUDIT_TYPE_ID" => "TASKS_TASK_STATUS_CHANGED",
"MODULE_ID" => "tasks",
"ITEM_ID" => $ID,
"DESCRIPTION" => "Статус задачи с ID: " . $ID . " изменен на " . $arFields["STATUS"]
));
}
}
?>
Практический пример обработчика: Автоматическое удаление лишних напоминаний (пингов)
Этот пример демонстрирует, как с помощью обработчика OnBeforeTaskAdd
можно настроить автоматическое удаление определенных типов напоминаний, например, Jabber-уведомлений, которые могут быть избыточными.
<?php
// Регистрируем обработчик OnBeforeTaskAdd
AddEventHandler("tasks", "OnBeforeTaskAdd", "removeRedundantReminders");
function removeRedundantReminders(&$arTask)
{
// Проверяем, есть ли напоминания и является ли это массивом
if (isset($arTask['REMINDERS']) && is_array($arTask['REMINDERS']))
{
// Проходим по всем напоминаниям
foreach ($arTask['REMINDERS'] as $key => $reminder)
{
// Если тип транспорта - Jabber, удаляем напоминание
if ($reminder['TRANSPORT'] == CTaskReminders::REMINDER_TRANSPORT_JABBER)
{
unset($arTask['REMINDERS'][$key]);
}
}
}
}
?>
Добавление напоминания к задаче программно
Следующий код демонстрирует, как добавить напоминание к задаче, используя класс CTaskReminders
. Напоминание будет создано для постановщика задачи за 5 часов до крайнего срока и отправлено через Jabber.
<?php
// Массив полей для создания напоминания
$arFields = Array(
"TASK_ID" => $idTask, // ID задачи, к которой добавляем напоминание (переменная $idTask должна быть определена ранее)
"USER_ID" => $arTask["CREATED_BY"], // ID пользователя-получателя (постановщик задачи)
"REMIND_DATE" => date("d.m.Y H:i:s", strtotime("+5 hours")), // Дата и время напоминания (за 5 часов до текущего времени)
"TYPE" => CTaskReminders::REMINDER_TYPE_DEADLINE, // Тип напоминания: к крайнему сроку
"TRANSPORT" => CTaskReminders::REMINDER_TRANSPORT_JABBER // Тип транспорта: Jabber (можно изменить на CTaskReminders::REMINDER_TRANSPORT_EMAIL для email-уведомлений)
);
// Создаем экземпляр класса CTaskReminders
$obTaskReminders = new CTaskReminders;
// Добавляем напоминание
$ID = $obTaskReminders->Add($arFields);
?>
3. Работа с задачами, связанными с CRM сущностями
В Битрикс24 задачи часто используются в связке с CRM, например, для управления задачами по сделкам или лидам. API позволяет эффективно получать и обновлять такие задачи.
Получение задач, привязанных к CRM сущности (сделка):
<?php
// Фильтруем задачи по тегу и привязке к CRM сделке
$arFilter = array(
'TAG' => $tag, // Переменная $tag должна содержать тег для поиска задач
"UF_CRM_TASK" => "D_" . $dealID, // "D_" - префикс для сделок, $dealID - ID сделки
// "L_" - префикс для лидов, "C_" - для контактов, "CO_" - для компаний
);
// Получаем список задач, отсортированный по крайнему сроку
$res = CTasks::GetList(
Array("DEADLINE" => "ASC"), // Сортировка по полю DEADLINE в порядке возрастания
$arFilter, // Применяем фильтр для отбора задач
Array("ID", "TITLE", "DEADLINE"), // Выбираем поля ID, TITLE и DEADLINE
Array("USER_ID" => 1) // Выполняем запрос от имени пользователя с ID=1 (администратор)
);
// Обрабатываем полученные задачи
while($arTask1 = $res->GetNext())
{
echo "ID задачи:".$arTask1["ID"]."<br>"; // Выводим ID задачи
echo "Название:".$arTask1["TITLE"]."<br>"; // Выводим название задачи
echo "Крайний срок:".$arTask1["DEADLINE"]."<br><br>"; // Выводим крайний срок задачи
}
?>
Обновление задач, связанных с CRM (пример обновления статуса):
<?php
// Фильтруем задачи по тегу и CRM сделке
$arFilter = array(
'TAG' => $tag, // Переменная $tag должна быть определена ранее
"UF_CRM_TASK" => "D_".$dealID, // "D_" - префикс для сделок, $dealID - ID сделки
);
// Получаем список задач
$res = CTasks::GetList(
Array("DEADLINE" => "ASC"), // Сортировка по полю DEADLINE в порядке возрастания
$arFilter, // Применяем фильтр для отбора задач
array("ID"), // Выбираем только поле ID
array("USER_ID"=>1) // Выполняем запрос от имени пользователя с ID=1 (администратор)
);
// Создаем объект CTasks для обновления задач
$obTask = new CTasks;
// Цикл по найденным задачам
while($arTask1 = $res->GetNext())
{
// Обновляем статус задачи на "Завершена"
$obTask->Update(
$arTask1["ID"], // ID задачи для обновления
Array(
"STATUS" => CTasks::STATE_COMPLETED // Устанавливаем статус "Завершена" (константа CTasks::STATE_COMPLETED)
),
Array('USER_ID' => 1) // Выполняем обновление от имени пользователя с ID=1 (администратор)
);
}
?>
4. Создание новой задачи через API
Метод \CTaskItem::add()
позволяет программно создавать новые задачи в Битрикс24.
<?php
// Массив данных для новой задачи
$newTask = array(
"TITLE" => "Заголовок задачи", // Заголовок задачи
"DESCRIPTION" => "Описание задачи", // Описание задачи
"TAGS" => array("CRM", "tag1"), // Теги задачи (массив строк)
"DEADLINE" => date("d.m.Y H:i:s", strtotime(("+".($time+4)." hours"))), // Крайний срок (вычисляется динамически)
"CREATED_BY" => $arTaskCopy["RESPONSIBLE_ID"], // ID пользователя, создавшего задачу
"RESPONSIBLE_ID" => $arTaskCopy["RESPONSIBLE_ID"], // ID ответственного пользователя
"AUDITORS" => $arTaskCopy["AUDITORS"], // Наблюдатели (массив ID пользователей)
//"TASK_CONTROL" => "Y", // Контроль задачи постановщиком (необязательное поле)
"ADD_IN_REPORT" => "Y", // Добавление в отчет (необязательное поле)
"DEPENDS_ON" => $arFields["ID"], // Зависимость от другой задачи (необязательное поле)
"UF_CRM_TASK" => $arTaskCopy["UF_CRM_TASK"] // Связь с CRM сущностями (необязательное поле)
);
// Создаем задачу с помощью CTaskItem::add()
$taskItem = \CTaskItem::add($newTask, 1); // 1 - ID пользователя, выполняющего действие (например, администратора)
?>
Дополнительные параметры при создании задачи:
- TASK_CONTROL: ‘Y’ или ‘N’. Включает или отключает контроль выполнения задачи постановщиком. По умолчанию ‘N’.
- ADD_IN_REPORT: ‘Y’ или ‘N’. Включает или отключает добавление задачи в отчеты. По умолчанию ‘N’.
- TASK_CONTROL: ‘Y’ или ‘N’. Включает или отключает контроль задачи постановщиком. По умолчанию ‘N’.
- MATCH_WORK_TIME: ‘Y’ или ‘N’. Учитывать рабочее время при планировании сроков. По умолчанию ‘N’.
- ALLOW_CHANGE_DEADLINE: ‘Y’ или ‘N’. Разрешить или запретить изменение крайнего срока ответственным. По умолчанию ‘Y’.
- AUDITORS: array(user_id1, user_id2, …) Массив ID пользователей-наблюдателей.
- ACCOMPLICES: array(user_id1, user_id2, …) Массив ID пользователей-соисполнителей.
- DEPENDS_ON: array(task_id1, task_id2, …) Массив ID задач, от которых зависит текущая задача.
- TAGS: array(«tag1», «tag2», …) Массив тегов задачи.
- FILES: array(file_id1, file_id2, …) Массив ID файлов, прикрепленных к задаче. (Устаревший метод, рекомендуется использовать UF_TASK_WEBDAV_FILES).
- UF_TASK_WEBDAV_FILES: array(file_id1, file_id2, …) Массив ID файлов Диска, прикрепленных к задаче. (Рекомендуемый метод для прикрепления файлов).
- REPLICATE: ‘Y’ или ‘N’. Задача является регулярной. По умолчанию ‘N’.
- REPLICATE_PARAMS: Сериализованный массив параметров регулярности задачи (для создания регулярных задач).
- GROUP_ID: ID рабочей группы, к которой относится задача.
- PARENT_ID: ID родительской задачи (для создания подзадач).
- Пользовательские поля (UF_*): Вы можете добавлять и использовать любые пользовательские поля, определенные для задач.
5. Добавление наблюдателя в задачу с тегом «SMART» (автоматически)
Следующие обработчики событий демонстрируют, как автоматически добавлять определенного наблюдателя (например, пользователя с ID=25) в задачи, помеченные тегом «SMART».
<?php
// Обработчик OnBeforeTaskAdd для добавления наблюдателя при создании задачи
AddEventHandler("tasks", "OnBeforeTaskAdd", "AddSmartViewerByAdd");
function AddSmartViewerByAdd(&$arFields)
{
$arSmartViewers = [25]; // Массив ID наблюдателей для добавления
// Проверяем наличие тега "SMART"
if(!empty($arFields["TAGS"]) && is_array($arFields["TAGS"]) && in_array("SMART", $arFields["TAGS"]))
{
$arFields["AUDITORS"] = $arFields["AUDITORS"] ?? []; // Инициализируем массив AUDITORS, если он пуст
$arFields["AUDITORS"] = array_unique(array_merge($arFields["AUDITORS"],$arSmartViewers)); // Добавляем новых наблюдателей, исключая дубликаты
}
// Пример: Автоматическое отключение контроля задачи (необязательно)
$possibleCompliteTaskFieldID = 'UF_AUTO_696681441528'; // ID пользовательского поля для контроля
if(isset($arFields[$possibleCompliteTaskFieldID]) && ($arFields[$possibleCompliteTaskFieldID] == '1'))
{
$arFields["TASK_CONTROL"] = "N"; // Отключаем контроль задачи
}
}
// Обработчик OnBeforeTaskUpdate для добавления наблюдателя при обновлении задачи
AddEventHandler("tasks", "OnBeforeTaskUpdate", "AddSmartViewerByUpdate");
function AddSmartViewerByUpdate ($id, &$arFields, &$arTaskCopy) {
$arSmartViewers = [25]; // Массив ID наблюдателей для добавления
// Проверяем наличие тега "SMART"
if(!empty($arFields["TAGS"]) && is_array($arFields["TAGS"]) && in_array("SMART", $arFields["TAGS"]))
{
$arFields["AUDITORS"] = $arFields["AUDITORS"] ?? $arTaskCopy["AUDITORS"]; // Инициализируем массив AUDITORS
$arFields["AUDITORS"] = array_unique(array_merge($arFields["AUDITORS"],$arSmartViewers)); // Добавляем новых наблюдателей
}
}
?>
6. Примеры рабочих фильтров для CTasks::GetList()
Метод CTasks::GetList()
позволяет получать списки задач с гибкой фильтрацией. Рассмотрим несколько примеров:
Простой фильтр: Задачи с тегом «SMART»
<?php
// Фильтр для задач с тегом "SMART"
$arFilter = array(
'TAG' => array("SMART"), // Фильтруем по тегу "SMART"
);
// Получаем список задач
$res = CTasks::GetList(
Array("DEADLINE" => "ASC"), // Сортировка по крайнему сроку
$arFilter, // Применяем фильтр
Array("ID", "TITLE", "DEADLINE"), // Выбираем поля ID, TITLE, DEADLINE
Array("USER_ID"=>1) // Запрос от имени пользователя ID=1
);
// Обрабатываем результаты (вывод, логирование и т.д.)
while($arTask1 = $res->GetNext()){
// ... (код обработки результатов)
}
?>
Дополнительные примеры сложных фильтров:
- Фильтр по дате создания за определенный период:
<?php
$arFilter = array(
'>=CREATED_DATE' => date("d.m.Y H:i:s", strtotime("-1 month")), // Задачи, созданные не ранее месяца назад
'<=CREATED_DATE' => date("d.m.Y H:i:s"), // Задачи, созданные не позднее текущего момента
);
?>
- Фильтр по ответственному и приоритету:
<?php
$arFilter = array(
"RESPONSIBLE_ID" => 5, // Задачи, ответственным за которые является пользователь с ID=5
"PRIORITY" => CTasks::PRIORITY_HIGH, // И приоритет - высокий
);
?>
- Фильтр по статусу и наличию наблюдателей:
<?php
$arFilter = array(
"STATUS" => CTasks::STATE_IN_PROGRESS, // Задачи в статусе "В процессе"
"!AUDITORS" => false, // И у которых есть наблюдатели (поле AUDITORS не пустое)
);
?>
- Фильтр с использованием логического «ИЛИ» и пользовательского поля:
<?php
$arFilter = array(
'::LOGIC' => 'OR', // Логическое "ИЛИ"
"STATUS" => CTasks::STATE_NEW, // Задачи в статусе "Новая"
"UF_TASK_IMPORTANT" => 1, // ИЛИ задачи, у которых пользовательское поле UF_TASK_IMPORTANT равно 1 (например, "Важная задача")
);
?>
Сложный фильтр: Задачи, где текущий пользователь соисполнитель или ответственный, и задачи не завершены
<?php
// Сложный фильтр для отбора задач
$arFilter = array(
'::LOGIC' => 'AND', // Логическое "И" для всего фильтра
'!REAL_STATUS' => CTasks::STATE_COMPLETED, // Исключаем завершенные задачи
'::SUBFILTER-1' => array( // Подфильтр 1 (логическое "ИЛИ")
'::LOGIC' => 'OR', // Логическое "ИЛИ" внутри подфильтра
'::SUBFILTER-1' => array( // Вложенный подфильтр 1.1
'ACCOMPLICE' => array($USER->GetID()), // Задачи, где текущий пользователь - соисполнитель
'REAL_STATUS' => array( // И статусы:
CTasks::STATE_NEW,
CTasks::STATE_PENDING,
CTasks::STATE_IN_PROGRESS
),
),
'::SUBFILTER-2' => array( // Вложенный подфильтр 1.2
'RESPONSIBLE_ID' => $USER->GetID(), // ИЛИ задачи, где текущий пользователь - ответственный
'REAL_STATUS' => array( // И статусы:
CTasks::STATE_NEW,
CTasks::STATE_PENDING,
CTasks::STATE_IN_PROGRESS
),
),
),
);
// Получаем список задач с применением сложного фильтра
$res = CTasks::GetList(
Array(), // Сортировка не важна в данном примере
$arFilter, // Применяем сложный фильтр
Array("ID", "TITLE", "STATUS", "RESPONSIBLE_ID", "CREATED_BY", "DEADLINE"), // Выбираем нужные поля
Array() // Дополнительные параметры не требуются
);
// Обрабатываем результаты
while($Tasks = $res->GetNext())
{
// ... (код обработки результатов)
}
?>
7. Ключевые константы и методы для работы с задачами
Для эффективной работы с API задач важно знать основные константы и методы.
Константы статусов задач (CTasks::STATE_*
):
CTasks::METASTATE_VIRGIN_NEW
(-2
): Новая задача (не просмотрена).CTasks::METASTATE_EXPIRED
(-1
): Задача просрочена.CTasks::METASTATE_EXPIRED_SOON
(-3
): Задача почти просрочена.CTasks::STATE_NEW
(1
): Новая задача.CTasks::STATE_PENDING
(2
): Задача принята исполнителем.CTasks::STATE_IN_PROGRESS
(3
): Задача выполняется.CTasks::STATE_SUPPOSEDLY_COMPLETED
(4
): Условно завершена (ожидает подтверждения).CTasks::STATE_COMPLETED
(5
): Задача завершена.CTasks::STATE_DEFERRED
(6
): Задача отложена.CTasks::STATE_DECLINED
(7
): Задача отклонена.
Константы приоритетов задач (CTasks::PRIORITY_*
):
CTasks::PRIORITY_LOW
(0
): Низкий приоритет.CTasks::PRIORITY_AVERAGE
(1
): Средний приоритет.CTasks::PRIORITY_HIGH
(2
): Высокий приоритет.
Константы действий над задачей (CTaskItem::ACTION_*
):
CTaskItem::ACTION_ACCEPT
(1
): Принять задачу.CTaskItem::ACTION_DECLINE
(2
): Отклонить задачу.CTaskItem::ACTION_COMPLETE
(3
): Завершить задачу.CTaskItem::ACTION_APPROVE
(4
): Подтвердить выполнение задачи.CTaskItem::ACTION_DISAPPROVE
(5
): Отклонить выполнение задачи.CTaskItem::ACTION_START
(6
): Начать выполнение задачи.CTaskItem::ACTION_DELEGATE
(7
): Делегировать задачу.CTaskItem::ACTION_REMOVE
(8
): Удалить задачу.CTaskItem::ACTION_EDIT
(9
): Редактировать задачу.CTaskItem::ACTION_DEFER
(10
): Отложить задачу.CTaskItem::ACTION_RENEW
(11
): Возобновить задачу.CTaskItem::ACTION_CREATE
(12
): Создать задачу.CTaskItem::ACTION_CHANGE_DEADLINE
(13
): Изменить крайний срок.CTaskItem::ACTION_PAUSE
(17
): Поставить задачу на паузу.CTaskItem::ACTION_START_TIME_TRACKING
(18
): Запустить учет времени.CTaskItem::ACTION_CHECKLIST_ADD_ITEMS
(14
): Добавить пункт в чек-лист.CTaskItem::ACTION_CHECKLIST_REORDER_ITEMS
(22
): Изменить порядок пунктов чек-листа.CTaskItem::ACTION_ELAPSED_TIME_ADD
(15
): Добавить затраченное время.CTaskItem::ACTION_ADD_FAVORITE
(19
): Добавить в избранное.CTaskItem::ACTION_DELETE_FAVORITE
(20
): Удалить из избранного.CTaskItem::ACTION_TOGGLE_FAVORITE
(21
): Переключить «избранность».CTaskItem::ACTION_READ
(23
): Прочитать задачу.CTaskItem::ACTION_RATE
(1702
): Оценить задачу.
Константы ролей пользователей в задаче (CTaskItem::ROLE_*
):
CTaskItem::ROLE_NOT_A_MEMBER
(1
): Не участник задачи.CTaskItem::ROLE_DIRECTOR
(2
): Постановщик.CTaskItem::ROLE_RESPONSIBLE
(4
): Ответственный.CTaskItem::ROLE_ACCOMPLICE
(8
): Соисполнитель.CTaskItem::ROLE_AUDITOR
(16
): Наблюдатель.
Константы форматов описания задачи (CTaskItem::DESCR_FORMAT_*
):
CTaskItem::DESCR_FORMAT_RAW
(1
): Оригинальный формат (HTML или BBCode).CTaskItem::DESCR_FORMAT_HTML
(2
): HTML формат.CTaskItem::DESCR_FORMAT_PLAIN_TEXT
(3
): Текстовый формат.
Константы идентификаторов предустановленных фильтров (CTaskFilterCtrl::STD_PRESET_*
):
CTaskFilterCtrl::ROOT_PRESET
(0
): Корневой пресет (не используется напрямую).CTaskFilterCtrl::STD_PRESET_ACTIVE_MY_TASKS
(-1
): «Мои задачи».CTaskFilterCtrl::STD_PRESET_ACTIVE_I_AM_DOER
(-2
): «Порученые мне».CTaskFilterCtrl::STD_PRESET_ACTIVE_I_AM_ORIGINATOR
(-3
): «Поставленные мной».CTaskFilterCtrl::STD_PRESET_ACTIVE_I_AM_AUDITOR
(-4
): «Наблюдаю».CTaskFilterCtrl::STD_PRESET_DEFERRED_MY_TASKS
(-5
): «Отложенные».CTaskFilterCtrl::STD_PRESET_COMPLETED_MY_TASKS
(-6
): «Завершенные».CTaskFilterCtrl::STD_PRESET_ACTIVE_I_AM_RESPONSIBLE
(-7
): «Я ответственный».CTaskFilterCtrl::STD_PRESET_ACTIVE_I_AM_ACCOMPLICE
(-8
): «Я соисполнитель».CTaskFilterCtrl::STD_PRESET_ALL_MY_TASKS
(-9
): «Все задачи».CTaskFilterCtrl::STD_PRESET_EXPIRED
(-11
): «Просроченные».CTaskFilterCtrl::STD_PRESET_EXPIRED_SOON
(-12
): «Скоро истекает срок».CTaskFilterCtrl::STD_PRESET_ALIAS_TO_DEFAULT
(-9
): Псевдоним для «Все задачи».
Основные методы класса CTasks
:
Метод | Описание | Версия API |
---|---|---|
Add | Добавляет новую задачу. | 10.0.2 |
AddAccomplices | Добавляет соисполнителей к задаче (устаревший метод, используйте CTaskItem->update() ). | 10.0.2 |
AddAuditors | Добавляет наблюдателей к задаче (устаревший метод, используйте CTaskItem->update() ). | 10.0.2 |
AddFiles | Добавляет файлы к задаче (устаревший метод, используйте CTaskItem->update() ). | 10.0.2 |
AddPrevious | Добавляет предыдущие задачи (устаревший метод, используйте CTaskItem->update() ). | 10.0.2 |
AddTags | Добавляет теги к задаче (устаревший метод, используйте Tag ). | 10.0.2 |
Delete | Удаляет задачу по ID. | 10.0.2 |
GetByID | Возвращает массив полей задачи по ID. | 10.0.2 |
GetChildrenCount | Возвращает количество подзадач. | 10.0.2 |
GetList | Возвращает список задач с фильтрацией и сортировкой. | 10.0.2 |
GetUpdatesCount | Возвращает количество изменений в задачах (deprecated). | 10.0.5 |
Update | Обновляет параметры задачи. | 10.0.5 |
getAvailableOrderFields | Возвращает массив доступных полей для сортировки. | 10.0.5 |
Примеры для основных методов класса CTasks
Важно: Перед использованием этих примеров убедитесь, что у вас подключен модуль tasks:
<?php
CModule::IncludeModule("tasks");
?>
1. Add()
Описание: Метод Add()
добавляет новую задачу и возвращает ее ID.
Пример:
<?php
CModule::IncludeModule("tasks");
// Параметры новой задачи
$taskData = [
'TITLE' => 'Новая задача, созданная через CTasks::Add()',
'RESPONSIBLE_ID' => 1, // ID ответственного пользователя
'DESCRIPTION' => 'Описание новой задачи.',
// ... другие поля задачи ...
];
$task = new CTasks();
$taskId = $task->Add($taskData);
if ($taskId) {
echo "Задача успешно создана. ID задачи: " . $taskId;
} else {
echo "Не удалось создать задачу. Ошибки:\n";
echo "<pre>";
var_dump($task->GetErrors());
echo "</pre>";
}
?>
Пояснение:
- Создается массив
$taskData
с параметрами новой задачи, включая обязательныеTITLE
иRESPONSIBLE_ID
. - Создается экземпляр класса
CTasks
. $task->Add($taskData)
вызывает методAdd()
для создания задачи.- Проверяется, успешно ли создана задача, и выводится ID задачи или список ошибок, если таковые возникли, используя
$task->GetErrors()
.
2. AddAccomplices()
Описание: Метод AddAccomplices()
добавляет соисполнителей к задаче. Устаревший метод. Рекомендуется использовать CTaskItem->update()
.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID задачи, к которой добавляем соисполнителей
$taskId = 123;
// Массив ID пользователей-соисполнителей
$accomplicesIds = [2, 3];
$task = new CTasks();
$task->AddAccomplices($taskId, $accomplicesIds);
echo "Соисполнители успешно добавлены к задаче с ID " . $taskId;
?>
Пояснение:
- Указывается ID задачи
$taskId
и массив ID соисполнителей$accomplicesIds
. - Создается экземпляр класса
CTasks
. $task->AddAccomplices($taskId, $accomplicesIds)
вызывает методAddAccomplices()
для добавления соисполнителей.- Выводится сообщение об успехе.
3. AddAuditors()
Описание: Метод AddAuditors()
добавляет наблюдателей к задаче. Устаревший метод. Рекомендуется использовать CTaskItem->update()
.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID задачи, к которой добавляем наблюдателей
$taskId = 123;
// Массив ID пользователей-наблюдателей
$auditorsIds = [4, 5];
$task = new CTasks();
$task->AddAuditors($taskId, $auditorsIds);
echo "Наблюдатели успешно добавлены к задаче с ID " . $taskId;
?>
Пояснение:
- Аналогично
AddAccomplices()
, но добавляет наблюдателей.
4. AddFiles()
Описание: Метод AddFiles()
добавляет файлы к задаче. Устаревший метод. Рекомендуется использовать CTaskItem->update()
.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID задачи, к которой добавляем файлы
$taskId = 123;
// Массив ID файлов (из модуля Файлы или Диск)
$fileIds = [10, 11];
$task = new CTasks();
$task->AddFiles($taskId, $fileIds);
echo "Файлы успешно добавлены к задаче с ID " . $taskId;
?>
Пояснение:
- Указывается ID задачи
$taskId
и массив ID файлов$fileIds
. - Создается экземпляр класса
CTasks
. $task->AddFiles($taskId, $fileIds)
вызывает методAddFiles()
для добавления файлов.- Выводится сообщение об успехе.
5. AddPrevious()
Описание: Метод AddPrevious()
добавляет предыдущие задачи (зависимости) к задаче. Устаревший метод. Рекомендуется использовать CTaskItem->update()
.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID задачи, к которой добавляем зависимости
$taskId = 123;
// Массив ID предыдущих задач
$previousTaskIds = [120, 121];
$task = new CTasks();
$task->AddPrevious($taskId, $previousTaskIds);
echo "Зависимости успешно добавлены к задаче с ID " . $taskId;
?>
Пояснение:
- Аналогично
AddFiles()
, но добавляет зависимости от предыдущих задач.
6. AddTags()
Описание: Метод AddTags()
добавляет теги к задаче. Устаревший метод. Рекомендуется использовать Tag
.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID задачи, к которой добавляем теги
$taskId = 123;
// Массив тегов
$tags = ["Важный", "Срочно"];
$task = new CTasks();
$task->AddTags($taskId, 1, $tags); // 1 - ID пользователя, выполняющего действие
echo "Теги успешно добавлены к задаче с ID " . $taskId;
?>
Пояснение:
- Указывается ID задачи
$taskId
, ID пользователя, выполняющего действие (в примере1
), и массив тегов$tags
. - Создается экземпляр класса
CTasks
. $task->AddTags($taskId, 1, $tags)
вызывает методAddTags()
для добавления тегов.- Выводится сообщение об успехе.
7. Delete()
Описание: Метод Delete()
удаляет задачу по ее ID.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID задачи для удаления
$taskId = 123;
$task = new CTasks();
$result = $task->Delete($taskId);
if ($result) {
echo "Задача с ID " . $taskId . " успешно удалена.";
} else {
echo "Не удалось удалить задачу с ID " . $taskId . ". Ошибки:\n";
echo "<pre>";
var_dump($task->GetErrors());
echo "</pre>";
}
?>
Пояснение:
- Указывается ID задачи
$taskId
для удаления. - Создается экземпляр класса
CTasks
. $task->Delete($taskId)
вызывает методDelete()
для удаления задачи.- Проверяется результат удаления и выводится сообщение об успехе или список ошибок, если удаление не удалось.
8. GetByID()
Описание: Метод GetByID()
возвращает массив с полями задачи по ее ID.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID задачи для получения данных
$taskId = 123;
$task = new CTasks();
$taskDataResult = $task->GetByID($taskId);
if ($taskData = $taskDataResult->Fetch()) {
echo "Данные задачи с ID " . $taskId . ":\n";
echo "<pre>";
var_dump($taskData);
echo "</pre>";
} else {
echo "Не удалось получить данные задачи с ID " . $taskId . ".";
}
?>
Пояснение:
- Указывается ID задачи
$taskId
для получения данных. - Создается экземпляр класса
CTasks
. $task->GetByID($taskId)
вызывает методGetByID()
и возвращает объектCDBResult
.$taskDataResult->Fetch()
извлекает массив с полями задачи из результата запроса.- Проверяется, удалось ли получить данные, и выводится массив
$taskData
или сообщение об ошибке.
9. GetChildrenCount()
Описание: Метод GetChildrenCount()
возвращает количество подзадач для указанной задачи.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID родительской задачи, для которой нужно получить количество подзадач
$taskId = 123;
$task = new CTasks();
$childrenCountResult = $task->GetChildrenCount([], $taskId);
if ($childrenCountResult) {
if ($childrenCount = $childrenCountResult->Fetch()) {
echo "Количество подзадач для задачи с ID " . $taskId . ": " . $childrenCount["CNT"];
} else {
echo "У задачи с ID " . $taskId . " нет подзадач.";
}
} else {
echo "Не удалось получить количество подзадач для задачи с ID " . $taskId . ".";
}
?>
Пояснение:
- Указывается ID родительской задачи
$taskId
. - Создается экземпляр класса
CTasks
. $task->GetChildrenCount([], $taskId)
вызывает методGetChildrenCount()
и возвращает объектCDBResult
.$childrenCountResult->Fetch()
извлекает массив с количеством подзадач.- Выводится количество подзадач или сообщение об их отсутствии/ошибке.
10. GetList()
Описание: Метод GetList()
возвращает список задач, отфильтрованных и отсортированных по заданным параметрам.
Пример:
<?php
CModule::IncludeModule("tasks");
// Параметры фильтрации
$arFilter = [
'RESPONSIBLE_ID' => 1, // Фильтр по ответственному пользователю
'STATUS' => CTasks::STATE_IN_PROGRESS, // Фильтр по статусу "В процессе"
];
// Параметры сортировки
$arOrder = [
'PRIORITY' => 'DESC', // Сортировать по приоритету в убывающем порядке
'DEADLINE' => 'ASC', // Затем по сроку в возрастающем порядке
];
// Параметры выборки полей
$arSelect = [
'ID',
'TITLE',
'PRIORITY',
'STATUS',
'DEADLINE',
'RESPONSIBLE_ID',
];
$task = new CTasks();
$taskListResult = $task->GetList($arOrder, $arFilter, $arSelect);
if ($taskListResult) {
echo "Список задач, отфильтрованных и отсортированных:\n";
echo "<pre>";
while ($taskItem = $taskListResult->Fetch()) {
var_dump($taskItem);
echo "<br><br>";
}
echo "</pre>";
} else {
echo "Не удалось получить список задач.";
}
?>
Пояснение:
- Создаются массивы
$arOrder
,$arFilter
, и$arSelect
для определения параметров запроса. $task->GetList($arOrder, $arFilter, $arSelect)
вызывает методGetList()
и возвращает объектCDBResult
.- В цикле
while ($taskItem = $taskListResult->Fetch())
перебираются задачи из результата запроса, и данные каждой задачи выводятся на экран с помощьюvar_dump($taskItem)
.
11. GetUpdatesCount()
Описание: Метод GetUpdatesCount()
возвращает количество изменений в задачах. Устаревший метод.
Пример:
<?php
CModule::IncludeModule("tasks");
// Массив просмотренных задач, где ключ - ID задачи, значение - дата просмотра в формате базы данных
$arViewedTasks = [
123 => '2023-10-26 10:00:00',
124 => '2023-10-25 15:30:00',
];
$task = new CTasks();
$updatesCount = $task->GetUpdatesCount($arViewedTasks);
if ($updatesCount) {
echo "Количество обновлений в задачах:\n";
echo "<pre>";
var_dump($updatesCount);
echo "</pre>";
} else {
echo "Не удалось получить количество обновлений.";
}
?>
Пояснение:
- Создается массив
$arViewedTasks
с данными о просмотренных задачах. $task->GetUpdatesCount($arViewedTasks)
вызывает методGetUpdatesCount()
и возвращает массив с количеством обновлений для каждой задачи.- Выводится массив
$updatesCount
или сообщение об ошибке.
12. Update()
Описание: Метод Update()
обновляет параметры существующей задачи.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID задачи для обновления
$taskId = 123;
// Массив полей для обновления
$updateTaskData = [
'TITLE' => 'Обновленное название задачи',
'DESCRIPTION' => 'Обновленное описание задачи.',
'PRIORITY' => CTasks::PRIORITY_HIGH, // Изменить приоритет на высокий
// ... другие поля для обновления ...
];
$task = new CTasks();
$result = $task->Update($taskId, $updateTaskData);
if ($result) {
echo "Задача с ID " . $taskId . " успешно обновлена.";
} else {
echo "Не удалось обновить задачу с ID " . $taskId . ". Ошибки:\n";
echo "<pre>";
var_dump($task->GetErrors());
echo "</pre>";
}
?>
Пояснение:
- Указывается ID задачи
$taskId
для обновления и массив$updateTaskData
с новыми значениями полей. - Создается экземпляр класса
CTasks
. $task->Update($taskId, $updateTaskData)
вызывает методUpdate()
для обновления задачи.- Проверяется результат обновления и выводится сообщение об успехе или список ошибок.
13. getAvailableOrderFields()
Описание: Метод getAvailableOrderFields()
возвращает массив доступных полей для сортировки в методе GetList()
.
Пример:
<?php
CModule::IncludeModule("tasks");
$task = new CTasks();
$orderFields = $task->getAvailableOrderFields();
echo "Доступные поля для сортировки:\n";
echo "<pre>";
var_dump($orderFields);
echo "</pre>";
?>
Пояснение:
- Создается экземпляр класса
CTasks
. $task->getAvailableOrderFields()
вызывает методgetAvailableOrderFields()
и возвращает массив$orderFields
.- Выводится массив доступных полей для сортировки.
Эти примеры демонстрируют, как использовать основные методы класса CTasks
для работы с задачами в Битрикс24. Пожалуйста, обратите внимание, что некоторые методы (AddAccomplices
, AddAuditors
, AddFiles
, AddPrevious
, AddTags
, GetUpdatesCount
) являются устаревшими, и рекомендуется использовать новые методы класса CTaskItem
для работы с задачами.
Методы нового класса CTaskItem
:
Метод | Описание |
---|---|
add | Метод возвращает экземпляр класса CTaskItem . |
getData | Метод возвращает массив, содержащий данные о задаче. |
getDescription | Метод возвращает описание задачи. |
getFiles | Метод возвращает массив, содержащий идентификаторы файлов, прикрепленных к задаче. |
getTags | Метод возвращает массив, содержащий теги задачи. |
getDependsOn | Метод возвращает массив, содержащий идентификаторы задач, от которых зависит задача. |
getAllowedActions | Метод возвращает массив, описывающий допустимые действия над задачей. |
isActionAllowed | Метод проверяет, разрешено ли действие. |
delete | Метод удаляет задачу. |
delegate | Метод делегирует задачу пользователю. |
startExecution | Метод переводит задачу в статус «выполняется». |
defer | Метод переводит задачу в статус «отложена». |
renew | Метод переводит задачу в статус «не выполняется». |
complete | Метод переводит задачу в статус «завершена» или «условно завершена». |
approve | Метод переводит задачу, ожидающую контроля, в статус «завершена». |
disapprove | Метод переводит задачу, ожидающую контроля, в статус «не выполняется». |
update | Метод изменяет параметры задачи. |
addByTemplate | Метод добавляет задачу по шаблону. |
addChildTaskByTemplate | Метод добавляет подзадачи из шаблона. |
duplicate | Метод копирует задачу или задачи. |
duplicateChildTasks | Метод копирует подзадачи выбранной задачи. |
addToFavorite | Метод добавляет задачу в Избранное. |
deleteFromFavorite | Метод удаляет задачу из Избранного. |
toggleFavorite | Метод меняет для указанной задачи состояние избранности. |
addProjectDependence | Метод добавляет зависимость одной задачи от другой в рамках Ганта. |
updateProjectDependence | Метод обновляет зависимость одной задачи от другой в рамках Ганта. |
Примеры для методов класса CTaskItem
Важно: Перед использованием этих примеров убедитесь, что у вас подключен модуль tasks:
<?php
CModule::IncludeModule("tasks");
?>
1. add()
Описание: Метод add()
создает новую задачу и возвращает экземпляр класса CTaskItem
, представляющий эту задачу.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID пользователя, от имени которого создается задача
$userId = 1;
// Параметры новой задачи
$taskData = [
'TITLE' => 'Моя новая задача',
'RESPONSIBLE_ID' => $userId, // Назначить ответственным того же пользователя
'DESCRIPTION' => 'Описание моей новой задачи.',
// ... другие поля задачи ...
];
try {
$taskItem = CTaskItem::add($taskData, $userId);
if ($taskItem) {
echo "Задача успешно создана. ID задачи: " . $taskItem->getId();
} else {
echo "Не удалось создать задачу.";
}
} catch (TasksException $e) {
echo "Ошибка при создании задачи: " . $e->getMessage();
}
?>
2. getData()
Описание: Метод getData()
возвращает массив, содержащий данные о задаче. По умолчанию возвращает экранированные данные для безопасного вывода в HTML.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskData = $taskItem->getData();
echo "<pre>";
var_dump($taskData);
echo "</pre>";
} catch (TasksException $e) {
echo "Ошибка при получении данных задачи: " . $e->getMessage();
}
?>
3. getDescription()
Описание: Метод getDescription()
возвращает описание задачи в различных форматах (RAW, HTML, Plain Text). По умолчанию возвращает HTML-форматированное описание.
Примеры:
a) Получение HTML-описания (по умолчанию):
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$descriptionHTML = $taskItem->getDescription();
echo "HTML описание: " . $descriptionHTML;
} catch (TasksException $e) {
echo "Ошибка при получении описания задачи: " . $e->getMessage();
}
?>
b) Получение RAW-описания (как есть, BB-код или HTML):
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$descriptionRAW = $taskItem->getDescription(CTaskItem::DESCR_FORMAT_RAW);
echo "RAW описание: " . $descriptionRAW;
} catch (TasksException $e) {
echo "Ошибка при получении описания задачи: " . $e->getMessage();
}
?>
c) Получение Plain Text описания (без HTML/BB-кодов):
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$descriptionPlainText = $taskItem->getDescription(CTaskItem::DESCR_FORMAT_PLAIN_TEXT);
echo "Plain Text описание: " . $descriptionPlainText;
} catch (TasksException $e) {
echo "Ошибка при получении описания задачи: " . $e->getMessage();
}
?>
4. getFiles()
Описание: Метод getFiles()
возвращает массив, содержащий идентификаторы файлов, прикрепленных к задаче. Важно: Этот метод возвращает идентификаторы файлов, хранящихся в устаревшем модуле WebDAV. Для новых задач, использующих Диск, следует использовать другие методы для работы с файлами.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$files = $taskItem->getFiles();
echo "Идентификаторы файлов, прикрепленных к задаче:\n";
echo "<pre>";
var_dump($files);
echo "</pre>";
} catch (TasksException $e) {
echo "Ошибка при получении файлов задачи: " . $e->getMessage();
}
?>
5. getTags()
Описание: Метод getTags()
возвращает массив, содержащий теги задачи.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$tags = $taskItem->getTags();
echo "Теги задачи:\n";
echo "<pre>";
var_dump($tags);
echo "</pre>";
} catch (TasksException $e) {
echo "Ошибка при получении тегов задачи: " . $e->getMessage();
}
?>
6. getDependsOn()
Описание: Метод getDependsOn()
возвращает массив, содержащий идентификаторы задач, от которых зависит текущая задача.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$dependsOnTasks = $taskItem->getDependsOn();
echo "Задачи, от которых зависит текущая задача:\n";
echo "<pre>";
var_dump($dependsOnTasks);
echo "</pre>";
} catch (TasksException $e) {
echo "Ошибка при получении зависимостей задачи: " . $e->getMessage();
}
?>
7. getAllowedActions()
Описание: Метод getAllowedActions()
возвращает массив, описывающий допустимые действия над задачей для текущего пользователя.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$allowedActions = $taskItem->getAllowedActions();
echo "Допустимые действия над задачей:\n";
echo "<pre>";
var_dump($allowedActions);
echo "</pre>";
} catch (TasksException $e) {
echo "Ошибка при получении допустимых действий: " . $e->getMessage();
}
?>
8. isActionAllowed()
Описание: Метод isActionAllowed()
проверяет, разрешено ли определенное действие над задачей для текущего пользователя. Возвращает true
, если действие разрешено, и false
в противном случае.
Примеры:
a) Проверка разрешения на редактирование задачи:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$canEdit = $taskItem->isActionAllowed(CTaskItem::ACTION_EDIT);
if ($canEdit) {
echo "Редактирование задачи разрешено.";
} else {
echo "Редактирование задачи запрещено.";
}
} catch (TasksException $e) {
echo "Ошибка при проверке разрешения: " . $e->getMessage();
}
?>
b) Проверка разрешения на удаление задачи:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$canDelete = $taskItem->isActionAllowed(CTaskItem::ACTION_REMOVE);
if ($canDelete) {
echo "Удаление задачи разрешено.";
} else {
echo "Удаление задачи запрещено.";
}
} catch (TasksException $e) {
echo "Ошибка при проверке разрешения: " . $e->getMessage();
}
?>
9. delete()
Описание: Метод delete()
удаляет задачу.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->delete();
echo "Задача успешно удалена.";
} catch (TasksException $e) {
echo "Ошибка при удалении задачи: " . $e->getMessage();
}
?>
10. delegate()
Описание: Метод delegate()
делегирует задачу другому ответственному пользователю.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
// ID пользователя, которому делегируется задача
$newResponsibleId = 2;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->delegate($newResponsibleId);
echo "Задача успешно делегирована пользователю с ID " . $newResponsibleId;
} catch (TasksException $e) {
echo "Ошибка при делегировании задачи: " . $e->getMessage();
}
?>
11. startExecution()
Описание: Метод startExecution()
переводит задачу в статус «выполняется» (CTasks::STATE_IN_PROGRESS
).
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->startExecution();
echo "Задача переведена в статус 'выполняется'.";
} catch (TasksException $e) {
echo "Ошибка при переводе задачи в статус 'выполняется': " . $e->getMessage();
}
?>
12. pauseExecution()
Описание: Метод pauseExecution()
переводит задачу в статус «ожидает выполнения» (CTasks::STATE_PENDING
).
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->pauseExecution();
echo "Задача переведена в статус 'ожидает выполнения'.";
} catch (TasksException $e) {
echo "Ошибка при переводе задачи в статус 'ожидает выполнения': " . $e->getMessage();
}
?>
13. defer()
Описание: Метод defer()
переводит задачу в статус «отложена» (CTasks::STATE_DEFERRED
).
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->defer();
echo "Задача переведена в статус 'отложена'.";
} catch (TasksException $e) {
echo "Ошибка при переводе задачи в статус 'отложена': " . $e->getMessage();
}
?>
14. renew()
Описание: Метод renew()
переводит задачу в статус «новая» или «принята», в зависимости от настроек. В контексте модуля tasks, обычно переводит в «новая» (CTasks::STATE_NEW
).
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->renew();
echo "Задача переведена в статус 'новая'.";
} catch (TasksException $e) {
echo "Ошибка при переводе задачи в статус 'новая': " . $e->getMessage();
}
?>
15. complete()
Описание: Метод complete()
переводит задачу в статус «завершена» (CTasks::STATE_COMPLETED
) или «условно завершена» (CTasks::STATE_SUPPOSEDLY_COMPLETED
), в зависимости от настроек контроля постановщиком.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->complete();
echo "Задача переведена в статус 'завершена' или 'условно завершена'.";
} catch (TasksException $e) {
echo "Ошибка при переводе задачи в статус 'завершена' или 'условно завершена': " . $e->getMessage();
}
?>
16. approve()
Описание: Метод approve()
одобряет условно завершенную задачу и переводит ее в статус «завершена» (CTasks::STATE_COMPLETED
).
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->approve();
echo "Задача одобрена и переведена в статус 'завершена'.";
} catch (TasksException $e) {
echo "Ошибка при одобрении задачи: " . $e->getMessage();
}
?>
17. disapprove()
Описание: Метод disapprove()
отклоняет условно завершенную задачу и переводит ее обратно в статус «новая» или «принята» (обычно «новая», CTasks::STATE_NEW
).
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->disapprove();
echo "Задача отклонена и переведена в статус 'новая'.";
} catch (TasksException $e) {
echo "Ошибка при отклонении задачи: " . $e->getMessage();
}
?>
18. update()
Описание: Метод update()
позволяет изменять параметры задачи. Принимает массив с новыми значениями полей задачи.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
$newTaskData = [
'TITLE' => 'Обновленное название задачи',
'DESCRIPTION' => 'Обновленное описание задачи.',
'PRIORITY' => CTasks::PRIORITY_HIGH, // Изменить приоритет на высокий
// ... другие поля для обновления ...
];
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->update($newTaskData);
echo "Задача успешно обновлена.";
} catch (TasksException $e) {
echo "Ошибка при обновлении задачи: " . $e->getMessage();
}
?>
19. addByTemplate()
Описание: Метод addByTemplate()
создает новую задачу на основе шаблона задачи и возвращает экземпляр класса CTaskItem
для созданной задачи.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID шаблона задачи
$templateId = 456;
// ID пользователя, от имени которого создается задача
$userId = 1;
try {
$newTaskItem = CTaskItem::addByTemplate($templateId, $userId);
if ($newTaskItem) {
echo "Задача успешно создана из шаблона. ID задачи: " . $newTaskItem->getId();
} else {
echo "Не удалось создать задачу из шаблона.";
}
} catch (TasksException $e) {
echo "Ошибка при создании задачи из шаблона: " . $e->getMessage();
}
?>
20. addChildTaskByTemplate()
Описание: Метод addChildTaskByTemplate()
добавляет подзадачи к текущей задаче на основе шаблона подзадач. Возвращает массив экземпляров CTaskItem
для созданных подзадач.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи (родительской)
$taskId = 123;
// ID шаблона подзадач
$templateId = 789;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$childTaskItems = $taskItem->addChildTaskByTemplate($templateId);
if (!empty($childTaskItems)) {
echo "Подзадачи успешно созданы из шаблона. IDs подзадач: ";
foreach ($childTaskItems as $childTaskItem) {
echo $childTaskItem->getId() . ", ";
}
} else {
echo "Не удалось создать подзадачи из шаблона.";
}
} catch (TasksException $e) {
echo "Ошибка при создании подзадач из шаблона: " . $e->getMessage();
}
?>
21. duplicate()
Описание: Метод duplicate()
копирует текущую задачу и возвращает экземпляр класса CTaskItem
для созданной копии.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$duplicatedTaskItem = $taskItem->duplicate();
if ($duplicatedTaskItem) {
echo "Задача успешно скопирована. ID копии: " . $duplicatedTaskItem->getId();
} else {
echo "Не удалось скопировать задачу.";
}
} catch (TasksException $e) {
echo "Ошибка при копировании задачи: " . $e->getMessage();
}
?>
22. duplicateChildTasks()
Описание: Метод duplicateChildTasks()
копирует подзадачи текущей задачи и привязывает их к другой задаче (клону). Возвращает массив экземпляров CTaskItem
для скопированных подзадач.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи (родительской)
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
// ID задачи-клона
$duplicatedTaskId = 456;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$duplicatedTaskItem = CTaskItem::getInstance($duplicatedTaskId, $userId);
$duplicatedChildTaskItems = $taskItem->duplicateChildTasks($duplicatedTaskItem);
if (!empty($duplicatedChildTaskItems)) {
echo "Подзадачи успешно скопированы в задачу-клон. IDs скопированных подзадач: ";
foreach ($duplicatedChildTaskItems as $duplicatedChildTaskItem) {
echo $duplicatedChildTaskItem->getId() . ", ";
}
} else {
echo "Не удалось скопировать подзадачи.";
}
} catch (TasksException $e) {
echo "Ошибка при копировании подзадач: " . $e->getMessage();
}
?>
23. addToFavorite()
Описание: Метод addToFavorite()
добавляет текущую задачу в список «Избранное» для текущего пользователя.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->addToFavorite();
echo "Задача добавлена в 'Избранное'.";
} catch (TasksException $e) {
echo "Ошибка при добавлении задачи в 'Избранное': " . $e->getMessage();
}
?>
24. deleteFromFavorite()
Описание: Метод deleteFromFavorite()
удаляет текущую задачу из списка «Избранное» для текущего пользователя.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->deleteFromFavorite();
echo "Задача удалена из 'Избранное'.";
} catch (TasksException $e) {
echo "Ошибка при удалении задачи из 'Избранное': " . $e->getMessage();
}
?>
25. toggleFavorite()
Описание: Метод toggleFavorite()
переключает состояние «Избранное» для текущей задачи. Если задача была в «Избранном», она удаляется, если не была — добавляется. Возвращает true
, если задача была добавлена в «Избранное», и false
, если удалена.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи
$taskId = 123;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$isFavorite = $taskItem->toggleFavorite();
if ($isFavorite) {
echo "Задача добавлена в 'Избранное'.";
} else {
echo "Задача удалена из 'Избранное'.";
}
} catch (TasksException $e) {
echo "Ошибка при переключении состояния 'Избранное': " . $e->getMessage();
}
?>
26. addProjectDependence()
Описание: Метод addProjectDependence()
добавляет зависимость от другой задачи в рамках Ганта.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи (родительской)
$taskId = 123;
// ID задачи, от которой нужно сделать зависимость
$parentTaskId = 987;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->addProjectDependence($parentTaskId);
echo "Зависимость от задачи с ID " . $parentTaskId . " успешно добавлена.";
} catch (TasksException $e) {
echo "Ошибка при добавлении зависимости: " . $e->getMessage();
} catch (ActionNotAllowedException $e) {
echo "Действие не разрешено: " . $e->getMessage();
} catch (ActionFailedException $e) {
echo "Не удалось добавить зависимость: " . $e->getMessage();
}
?>
27. updateProjectDependence()
Описание: Метод updateProjectDependence()
обновляет тип зависимости от другой задачи в рамках Ганта.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи (родительской)
$taskId = 123;
// ID задачи, от которой зависимость уже существует
$parentTaskId = 987;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
// Новый тип зависимости (пример)
$linkType = CTaskDependenceTable::LINK_TYPE_START_START;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->updateProjectDependence($parentTaskId, $linkType);
echo "Тип зависимости от задачи с ID " . $parentTaskId . " успешно обновлен.";
} catch (TasksException $e) {
echo "Ошибка при обновлении типа зависимости: " . $e->getMessage();
} catch (ActionNotAllowedException $e) {
echo "Действие не разрешено: " . $e->getMessage();
} catch (ActionFailedException $e) {
echo "Не удалось обновить тип зависимости: " . $e->getMessage();
}
?>
28. deleteProjectDependence()
Описание: Метод deleteProjectDependence()
удаляет зависимость одной задачи от другой в рамках Ганта.
Пример:
<?php
CModule::IncludeModule("tasks");
// ID существующей задачи (родительской)
$taskId = 123;
// ID задачи, от которой нужно удалить зависимость
$parentTaskId = 987;
// ID пользователя, имеющего доступ к задаче
$userId = 1;
try {
$taskItem = CTaskItem::getInstance($taskId, $userId);
$taskItem->deleteProjectDependence($parentTaskId);
echo "Зависимость от задачи с ID " . $parentTaskId . " успешно удалена.";
} catch (TasksException $e) {
echo "Ошибка при удалении зависимости: " . $e->getMessage();
} catch (ActionNotAllowedException $e) {
echo "Действие не разрешено: " . $e->getMessage();
} catch (ActionFailedException $e) {
echo "Не удалось удалить зависимость: " . $e->getMessage();
}
?>
Важно:
- Замените
123
(и другие примеры IDs) на реальные ID существующих задач в вашей системе. - Убедитесь, что пользователь с ID
1
(или другим$userId
в примерах) имеет доступ к задачам, с которыми вы работаете. - Не забудьте про обработку исключений
TasksException
и других возможных исключений, как показано в примерах.
8. REST API для задач (tasks.task.*)
Для более гибкой интеграции задач в веб-приложения и внешние системы, Битрикс24 предоставляет REST API. Методы REST API для задач доступны через пространство имен tasks.task.*
.
Получение доступных полей задачи (tasks.task.getFields)
Метод tasks.task.getFields
позволяет получить список всех доступных полей задачи, их типы и описания. Это полезно для динамического построения форм и фильтров.
<?php
require_once (__DIR__."/crest.php"); // Подключение библиотеки REST API
// Вызов метода rest api tasks.task.getFields
$arTaskFields = CRest::call(
'tasks.task.getFields',
[] // Пустой массив параметров
);
// Вывод результата (для отладки)
echo "<pre>";
var_dump($arTaskFields);
echo "</pre>";
?>
Создание задачи через REST API (tasks.task.add)
Метод tasks.task.add
используется для создания новых задач через REST API.
<?php
require_once (__DIR__."/crest.php"); // Подключение библиотеки REST API
$result = CRest::call(
'tasks.task.add',
[
"fields" => [
"TITLE" => "test task name", // Название задачи
"RESPONSIBLE_ID" => 1, // ID ответственного пользователя
"DESCRIPTION" => "Здесь должно быть описание задачи", // Описание задачи
"UF_CRM_TASK" => ["D_2", "L_2", "C_2"], // Привязка к CRM (сделка, лид, контакт)
"UF_AUTO_397120965343" => "значение строкового поля", // Пример пользовательского строкового поля
"UF_AUTO_623440760361" => 777, // Пример пользовательского числового поля
"UF_AUTO_481217671836" => "15.02.2024 01:01:00", // Пример пользовательского поля даты
"UF_AUTO_405537248694" => true, // Пример пользовательского логического поля
]
]
);
// Вывод результата (для отладки)
echo "<pre>";
var_dump($result);
echo "</pre>";
?>
Изменение (обновление) задачи через REST API (tasks.task.update)
Метод tasks.task.update
позволяет обновлять существующие задачи.
<?php
require_once(__DIR__."/crest.php"); // Подключение библиотеки REST API
$result = CRest::call(
'tasks.task.update',
[
"taskId" => 30, // ID задачи, которую нужно обновить
"fields" => [
"TITLE" => "new test task name", // Новое название задачи
]
]
);
// Вывод результата (для отладки)
echo "<pre>";
var_dump($result);
echo "</pre>";
?>
Получение данных о задаче через REST API (tasks.task.get)
Метод tasks.task.get
используется для получения данных конкретной задачи по ее ID.
<?php
require_once(__DIR__."/crest.php"); // Подключение библиотеки REST API
$result = CRest::call(
'tasks.task.get',
[
"taskId" => 30, // ID задачи, данные которой нужно получить
"select" => ["ID", "TITLE"] // Выбор полей для получения (ID, TITLE)
]
);
// Вывод результата (для отладки)
echo "<pre>";
var_dump($result);
echo "</pre>";
?>
Получение списка задач через REST API (tasks.task.list)
Метод tasks.task.list
позволяет получить массив задач с фильтрацией и постраничной навигацией.
<?php
require_once (__DIR__."/crest.php"); // Подключение библиотеки REST API
$result = CRest::call(
'tasks.task.list',
[
"select" => ["ID", "TITLE"], // Выбор полей для получения (ID, TITLE)
"order" => ["ID" => "DESC"], // Сортировка по ID в обратном порядке
"filter" => ["!STATUS" => 5], // Фильтр: исключить задачи со статусом 5 (завершенные)
]
);
// Вывод результата (для отладки)
echo "<pre>";
var_dump($result);
echo "</pre>";
?>
Удаление задачи через REST API (tasks.task.delete)
Метод tasks.task.delete
используется для удаления задачи по ее ID.
<?php
require_once (__DIR__."/crest.php"); // Подключение библиотеки REST API
$result = CRest::call(
'tasks.task.delete',
[
"taskId" => 28, // ID задачи, которую нужно удалить
]
);
// Вывод результата (для отладки)
echo "<pre>";
var_dump($result);
echo "</pre>";
?>
Завершение задачи через REST API (tasks.task.complete)
Метод tasks.task.complete
используется для завершения задачи.
<?php
require_once (__DIR__."/crest.php"); // Подключение библиотеки REST API
$result = CRest::call(
'tasks.task.complete',
[
"taskId" => 30 // ID задачи, которую нужно завершить
]
);
// Вывод результата (для отладки)
echo "<pre>";
var_dump($result);
echo "</pre>";
?>
Дополнительные методы REST API (tasks.task.*):
- tasks.task.getcounters: Возвращает счетчики задач для текущего пользователя. Полезно для отображения количества новых, просроченных и других типов задач в интерфейсе.
- tasks.task.timer.start(taskId): Запускает таймер учета времени для задачи.
- tasks.task.timer.pause(taskId): Приостанавливает таймер учета времени для задачи.
- tasks.task.timer.complete(taskId): Завершает таймер учета времени для задачи.
- tasks.task.checklistitem.add(taskId, fields): Добавляет пункт в чек-лист задачи.
- tasks.task.checklistitem.getlist(taskId): Возвращает список пунктов чек-листа задачи.
- tasks.task.checklistitem.update(taskId, itemId, fields): Обновляет пункт чек-листа.
- tasks.task.checklistitem.delete(taskId, itemId): Удаляет пункт чек-листа.
- tasks.task.commentitem.add(taskId, fields): Добавляет комментарий к задаче.
- tasks.task.commentitem.getlist(taskId): Возвращает список комментариев к задаче.
- tasks.task.commentitem.get(taskId, itemId): Возвращает данные конкретного комментария.
- tasks.task.commentitem.update(taskId, itemId, fields): Обновляет комментарий.
- tasks.task.commentitem.delete(taskId, itemId): Удаляет комментарий.
8.1. Обработка ошибок и отладка
При работе с API задач важно правильно обрабатывать ошибки и уметь отлаживать код.
- Проверка результатов выполнения методов: Все методы API возвращают объекты, содержащие информацию об успехе выполнения и, в случае ошибки, массив ошибок. Всегда проверяйте isSuccess() и getErrors() для обработки возможных проблем.
<?php
$result = CTaskItem::add($newTask, 1);
if (!$result->isSuccess()) {
$errors = $result->getErrors()->getMessages();
foreach ($errors as $error) {
echo "Ошибка: " . $error->getMessage() . " (Код: " . $error->getCode() . ")<br>";
}
} else {
$taskId = $result->getId();
echo "Задача успешно создана, ID: " . $taskId;
}
?>
- Использование CAdminException для обработки ошибок в административном интерфейсе: При разработке административных страниц Битрикс24 используйте CAdminException для корректного отображения ошибок пользователю.
- Логирование ошибок: В продакшн-среде рекомендуется вести логирование ошибок для последующего анализа и исправления. Используйте CEventLog::Add() или собственные механизмы логирования.
- Отладка с помощью var_dump() и <pre>: Для отладки в процессе разработки используйте var_dump() и тег <pre> для просмотра содержимого переменных и массивов, возвращаемых API.
9. Оптимизация производительности при работе с задачами
При работе с большим количеством задач важно учитывать производительность вашего кода.
- Пакетные запросы (REST API): Используйте пакетные запросы REST API (batch метод) для выполнения нескольких операций за один запрос. Это снижает нагрузку на сервер и ускоряет выполнение операций.
- Эффективная фильтрация: Тщательно продумывайте фильтры для CTasks::GetList() и tasks.task.list, чтобы сократить количество получаемых задач и уменьшить нагрузку на базу данных.
- Кеширование данных: Используйте механизмы кеширования Битрикс24 для хранения часто используемых данных (например, списков задач, данных пользователей) и снижения нагрузки на базу данных.
- Использование CTaskItem::getInstance(): Для повторного доступа к задаче в рамках одного запроса используйте статический метод CTaskItem::getInstance(), который использует пул объектов и кеширование, что повышает производительность.
- Отложенные операции (агенты и очереди): Для длительных операций, таких как массовая обработка задач или отправка уведомлений, используйте агенты Битрикс24 или собственные очереди задач, чтобы не блокировать основной поток выполнения и обеспечить отзывчивость системы.
10. Безопасность при работе с API задач
- Проверка прав доступа: Всегда проверяйте права доступа пользователя перед выполнением операций с задачами, используя методы checkAccess() класса CTaskItem или TaskAccessController.
- Фильтрация входных данных: Очищайте и валидируйте все входные данные, получаемые от пользователей или внешних систем, перед использованием их в запросах к API задач, чтобы предотвратить SQL-инъекции и другие угрозы безопасности.
- Ограничение доступа к API: Ограничьте доступ к API задач только доверенным пользователям или приложениям. Используйте права доступа Битрикс24 для контроля доступа к модулю «Задачи» и его API.
- Использование HTTPS: Всегда используйте HTTPS для обмена данными с API Битрикс24, чтобы защитить данные от перехвата и несанкционированного доступа.
Заключение:
В этой статье мы подробно рассмотрели различные методы работы с задачами в Битрикс24 «коробка», от базового подключения модуля до использования REST API.
Используйте полученные знания для создания эффективных решений на базе Битрикс24!