Документация для разработчиков
Темная тема

update

Описание и параметры

bool
CTaskItem::Update(
	array arFields
);

Нестатический метод изменяет параметры задачи с идентификатором ID.

Параметры метода

Параметр Описание С версии
arFields Массив Array("поле"=>"значение", ...). Содержит значения всех полей задачи. Обязательные поля должны быть заполнены. 16.0.0

Возвращаемое значение

При возникновении ошибки в исключениях будет содержаться текст ошибки.

Примеры использования

// смена ответственного в задаче

CModule::IncludeModule('tasks');

global $USER;

$userId = $USER->GetID();
$taskId = 85;

$oTaskItem = new CTaskItem($taskId, $userId);

try
{
	$rs = $oTaskItem->Update(array("RESPONSIBLE_ID" => 480));
}
catch(Exception $e)
{
	print('Error');
}



// прикрепление файла к задаче

CModule::IncludeModule('tasks');

$storage = Bitrix\Disk\Driver::getInstance()->getStorageByUserId($USER_ID);
$folder = $storage->getFolderForUploadedFiles();
$arFile = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/upload/wlog.txt");
$file = $folder->uploadFile($arFile, array(
	'NAME' => $arFile["name"],
	'CREATED_BY' => $USER_ID
), array(), true);
$FILE_ID = $file->getId();

$oTaskItem = new CTaskItem($taskId, $userId);
$rs = $oTaskItem->Update(array("UF_TASK_WEBDAV_FILES" => Array("n$FILE_ID")));

Добавление файла к задаче, где уже есть добавленные файлы. В примере выше добавляемый файл перезаписывается.

$taskId = 183; //Id задачи
$userId = 1; // Id пользователя, от которого изменяем задачу
$newFileId = 324; //Id нового файла из таблицы b_disk_object
$task = new CTaskItem($taskId, $userId);
$taskData = $task->getData(false);

$task->update(['UF_TASK_WEBDAV_FILES' => array_merge($taskData['UF_TASK_WEBDAV_FILES'], ["n{$newFileId}"])]); 


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Константин Савин
Сообщение не промодерировано, возможны ошибки и неточности.
Рабочий код прикрепления файла из задачи к сделке```
<?php  
use Bitrix\Tasks\Control;  
use Bitrix\Main\Diag\Debug;  
use Bitrix\Tasks\Control\Task;  
use \Bitrix\Tasks\Internals\TaskTable;  
 
use \Bitrix\Crm\DealTable;  
CModule::IncludeModule('tasks');  
CModule::IncludeModule('crm');  
$eventManager = \Bitrix\Main\EventManager::getInstance();  
 
$eventManager->addEventHandler('crm', 'OnAfterCrmDealUpdate', 'onAfterUpdate');  
 
$eventManager->addEventHandler('tasks', 'OnTaskUpdate', 'onAfterUpdate');  
   function onAfterUpdate($taskID, array $fields): array  
   {  
       global $USER;  
       $userId = $USER->GetID();  
       $idTask = $fields['ID'];  
       $insTask = new \Bitrix\Tasks\Item\Task(intval($idTask ), $userId);  
       $arrTask = $insTask->getData();  
       $arrAttachmentIDs = $arrTask['UF_TASK_WEBDAV_FILES']->toArray(); // это не обязательно но я перестраховщик  
       $arTaskAttachments = [];  
 
       if (!empty($arrAttachmentIDs)) {  
           foreach ($arrAttachmentIDs as $attachmentID) {  
               $diskDriver = \Bitrix\Disk\Driver::getInstance();  
               $objAttachment = $diskDriver->getUserFieldManager()->getAttachedObjectById(intval($attachmentID));  
               // Так мы получили объект типа Вложение (Attachment). До самого файла нужно еще добраться.  
               $objFile = $objAttachment->getObject();  
               // И вот только теперь у нас - файл. Получим его имя и ИД.  
               $fileID = $objFile->getFileId();  
               $fileName = $objFile->getName();  
               $filePath = \CFile::GetPath($fileID);  
               $fileB64Contents = base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . $filePath));  
               $arTaskAttachments[] = [  
                   'filename' => $fileName,  
                   'b64contents' => $fileB64Contents  
               ];  
           }  
       }  
 
       Debug::dumpToFile($fileID, $varName =  date('Y-m-d H:i:s'),);  
 
       $tag = $fields['TAGS'];  
       DealTable::update($tag[0], [  
           'TITLE' => 'Обновлено после обновлдения из абработчика из обработчика',  
           "UF_CRM_1698757601681" => CFile::MakeFileArray($fileID),  
 
       ]);  
       return $fields;  
   }  


```
0
Константин Савин
Сообщение не промодерировано, возможны ошибки и неточности.
//title: Получить все вложения из задачи
try {
   CModule::IncludeModule("tasks");
   CModule::IncludeModule("disk");
} catch (\Bitrix\Main\SystemException $e) {
   die($e);
}

// Положим, наша заявка с номером 422
$taskID = 422;

// Берем инстанс таска по его ИД с правами Администратора
// (второй аргумент - ид пользователя от имени которого производятся манипуляции)
$insTask = new \Bitrix\Tasks\Item\Task(intval($taskID), 0);
$arrTask = $insTask->getData();
$arrAttachmentIDs = $arrTask['UF_TASK_WEBDAV_FILES']->toArray(); // это не обязательно но я перестраховщик

// Теперь попробуем собрать массив, каждый член которого будет иметь имя файла и его содержимое в Base64
// Это так, для примера
$arTaskAttachments = [];

if (!empty($arrAttachmentIDs)) {
   foreach ($arrAttachmentIDs as $attachmentID) {
       $diskDriver = \Bitrix\Disk\Driver::getInstance();
       $objAttachment = $diskDriver->getUserFieldManager()->getAttachedObjectById(intval($attachmentID));
       // Так мы получили объект типа Вложение (Attachment). До самого файла нужно еще добраться.
       $objFile = $objAttachment->getObject();
       // И вот только теперь у нас - файл. Получим его имя и ИД.
       $fileID = $objFile->getFileId();
       $fileName = $objFile->getName();
       $filePath = \CFile::GetPath($fileID);
       $fileB64Contents = base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . $filePath));
       $arTaskAttachments[] = [
           'filename' => $fileName,
           'b64contents' => $fileB64Contents
       ];
   }
}
var_dump($arTaskAttachments);
0
Константин Савин
Сообщение не промодерировано, возможны ошибки и неточности.
CModule::IncludeModule('tasks');

$storage = Bitrix\Disk\Driver::getInstance()->getStorageByUserId($USER_ID);
$folder = $storage->getFolderForUploadedFiles();
$arFile = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/upload/wlog.txt");
$file = $folder->uploadFile($arFile, array(
  'NAME' => $arFile["name"],
  'CREATED_BY' => $USER_ID
), array(), true);
$FILE_ID = $file->getId();

$oTaskItem = new CTaskItem($taskId, $userId);
$rs = $oTaskItem->Update(array("UF_TASK_WEBDAV_FILES" => Array("n$FILE_ID")));
3
Рушан Зарипов
Если стоит задача прикрепления не одного, а нескольких файлов, то подойдет такой пример:
$oTask = CTaskItem::add($arNewTaskData, $responsible);
                           
Код
    //Текущая задача
                $cur_task = $oTask->getData(); 
                
                //Определеяем класс для работы с Bitrix диском
                $USER_ID = $USER->GetID(); 
                $storage = Bitrix\Disk\Driver::getInstance()->getStorageByUserId($USER_ID);
                $folder = $storage->getFolderForUploadedFiles();
                
                //Массив с файлами
                $newFiles = array();
                
                //копируем файлы в Bitrix диск
                foreach($linked_files_array as $k=>$val){
                    $arFile = CFile::MakeFileArray($val);
                    $file = $folder->uploadFile($arFile, array(
                       'NAME' => $arFile["name"],
                       'CREATED_BY' => $USER_ID
                    ), array(), true);
                    
                    //Добавляем id файлов в массив с префиксом n
                    $newFiles[] = "n".$file->getId();
                     
                }
                //Прикрепляем файлы к задаче
                if(!empty($newFiles)){
                    $oTaskItem = new CTaskItem($cur_task["ID"], $responsible);
                    try
                    {
                       $rs = $oTaskItem->Update(array("UF_TASK_WEBDAV_FILES" => $newFiles));
                    }
                    catch(Exception $e)
                    {
                       print(GetMessage("TASK_FILES_LINKED_ERROR"));
                    }
                     
                }
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх