Bitrix: Как получить файлы через апи?

Была задача — Получить все файлы, которые были в комментариях к задачам. Делаем!

Не забываем подключать модуль диска

if (!\Bitrix\Main\Loader::includeModule('disk'))
{
   return array();
}

Получаем список всех аттачментов по следующим параметрам:

'=ENTITY_TYPE' => 'Bitrix\Disk\Uf\ForumMessageConnector', // для каждого модуля свой коннектор
'=MODULE_ID' => 'forum', // ID модуля
'=VERSION_ID' => null, // версия файла
'=ENTITY_ID' => $arData['ID'] // ID комментария
$attachedObjects = \Bitrix\Disk\Internals\AttachedObjectTable::getList(
   array(
      'select' => array('ID'),
      'filter' => array(
         '=ENTITY_TYPE' => 'Bitrix\Disk\Uf\ForumMessageConnector',
         '=MODULE_ID' => 'forum',
         '=VERSION_ID' => null,
         '=ENTITY_ID' => $arData['ID']
      )
   )
);

Создаем массив со ссылками на файлы

foreach ($attachedObjects as $attachedObject)
{
   $arData['ATTACHED_OBJECTS'][] = '/bitrix/tools/disk/uf.php?' . http_build_query(
      array(
         'action' => 'download',
         'ncc' => 1, // отключаем работу композера
         'attachedId' => $attachedObject['ID']
      )
   );
}

UPDATE: Нашел более короткую запись

$driver = \Bitrix\Disk\Driver::getInstance();
$userFieldManager = $driver->getUserFieldManager();
$urlManager = $driver->getUrlManager();

while ($arData = $rsData->fetch())
{
   if($arData['POST_MESSAGE'] == 'TASK_'.$taskData['ID']) // typically the first one is a non-interesting system message, so skip it
      continue;

   foreach ($userFieldManager->getAttachedObjectByEntity('FORUM_MESSAGE', $arData['ID'], 'UF_FORUM_MESSAGE_DOC') as $attachedObject)
      $arData['ATTACHED_OBJECTS'][] = $urlManager::getUrlUfController('download', array('attachedId' => $attachedObject->getId()));

   $arItemsData[] = $arData;
}

Bitrix: Как получить файлы через апи?: 2 комментария

Оставьте комментарий