Как получить всю ветку ID подзадач?
\CTasks::getTaskSubTree($taskId)
Вернет нам список всех ID вне зависимости от уровня вложения.
Array ( [0] => 100002 [1] => 100003 [2] => 100004 [3] => 100005 )
Увы, без информации о вложенности.
Как получить сами задачи? Рекурсивно!
Имеем уже существующую задачу и запрашиваем ее подзадачи
$tree = $this->getSubTasks($taskId);
В итоге имеет массив со всеми задачами, с уровнем вложенности.
В идеале, советую использовать новое ядро и closure table
private function getSubTasks($taskId, $level = 0) { $list = array(); if(\CTasks::getTaskSubTree($taskId)) { $this->listParameters['legacyFilter']['PARENT_ID'] = $taskId; $getListParameters = array( 'order' => $this->getOrder(), 'select' => $this->getSelect(), 'legacyFilter' => $this->listParameters['legacyFilter'], ); $mgrResult = Manager\Task::getList($this->userId, $getListParameters); $level ++; if($mgrResult['DATA']) { foreach ($mgrResult['DATA'] as $item) { $item['__LEVEL'] = $level; $list[] = $item; if ($sub = $this->getSubTasks($item['ID'], $level)) { $list = array_merge($list, $sub); } } } } return $list; }