Возникла задача — необходимо добавить комментарий из письма комментарием к задаче, то есть владелец задачи может оставить комментарий к своей задачи на прямую из почты.

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

 
$task = \Bitrix\Tasks\Internals\TaskTable::getByPrimary($res['TASK_ID'])->fetch();
$forumID = \CForumTopic::GetByID($task['FORUM_TOPIC_ID']);
$comment = '';
$postFields  = array(
    'TOPIC_ID' => $task['FORUM_TOPIC_ID'], // идентификатор topic'a
    'FORUM_ID' => $forumID['FORUM_ID'], // id форума, приходится делать отдельным запросом
    'SOURCE_ID' => 'WEB',
    'USE_SMILES' => 'Y',
    'NEW_TOPIC' => 'Y',
    'POST_MESSAGE' => $comment,
    'POST_MESSAGE_HTML' => $comment,
    'AUTHOR_ID' => $user['ID'],
    'AUTHOR_NAME' => $user['NAME'].' '.$user['LAST_NAME'], // без этого поля тоже не добавит
    'XML_ID' => 'TASK_'.$task['ID'], // важно соблюдать данный формат
);

$result =  \CForumMessage::Add($postFields);
if (!$result)
{
    GLOBAL $APPLICATION;
    $ex = $APPLICATION->GetException();
    echo $ex->GetString();
}

А вот как хотелось бы на D7, но висит Exception в классе Сообщений (спасибо битрикс)

$result = \Bitrix\Forum\MessageTable::add(array(
    'TOPIC_ID' => $task['FORUM_TOPIC_ID'],
    'FORUM_ID' => $forumID['FORUM_ID'],
    'SOURCE_ID' => 'WEB',
    'USE_SMILES' => 'Y',
    'NEW_TOPIC' => 'Y',
    'POST_MESSAGE' => $comment,
    'POST_MESSAGE_HTML' => $comment,
    'AUTHOR_ID' => $user['ID'],
    'XML_ID' => 'TASK_'.$task['ID']
));
print_r($result->getErrorMessages());

Возникла задача сохранения файла из внешнего источника в задаче КП Битрикса, но оказалось все не совсем просто, в связи с тем что использует он модуль disk, а не только стандартный класс CFile, чтобы решить данную проблему пришлось покопать исходники.

$fileInfo = \CFile::GetFileArray(1);
$folder = \Bitrix\Disk\Folder::getById(1);
$data = array(
    'NAME' => $fileID.'_'.$fileInfo['ORIGINAL_NAME'],
    'STORAGE_ID' => 1,
    'FILE_ID' => $fileInfo['ID'],
    'CREATED_BY' => 1,
    'SIZE' => $fileInfo['FILE_SIZE'],
    'PARENT' => $folder,
    'PARENT_ID' => 1
);
$error = new \Bitrix\Disk\Internals\Error\ErrorCollection;
$res = \Bitrix\Disk\File::add($data, $error);
$fileDiskID = $res->getId();

 

Список всех папок на диске для сохранения можно получить так же —

\Bitrix\Disk\Internals\FolderTable::getList();

здесь есть для PARENT_ID и STORAGE_ID

Добавляем файл к задаче

if ($fileID)
{
    $newFiles[] = \Bitrix\Disk\Uf\FileUserType::NEW_FILE_PREFIX.$fileID;
}

if (count($newFiles))
{
    $USER_FIELD_MANAGER->Update("TASKS_TASK", $taskID, array(
        'UF_TASK_WEBDAV_FILES' => $newFiles,
    ));
}