Как лучше добавить новые файлы в б24, сохранив при этом старые?

Ссылка скопирована
1 ответ

, битрикс24 коробка.

По вводным: есть сделка с пользовательским полем с типом файл, множественный.
По вводным: в этом поле уже имеются файлы.

Что нужно:
По вводным: отправить новые файлы через сайт в это пользовательское поле, при этом сохранив старые файлы.

По вводным: максимум что у меня получается - это то, что пользовательское поле просто перезаписывается, сохраняя НОВЫЕ файлы, стерев старые.

Каким способом добавить новые файлы, при этом сохранив старые?
Спасибо

require_once(__DIR__.'/crest.php'); // файлы, которые нужно добавить $filePaths = [ __DIR__ . '/filesForTest/test.docx', __DIR__ . '/filesForTest/test2.docx', ]; $deal = CRest::call('crm.deal.get', [ 'id' => 159 ]); $existingFiles = $deal['result']['UF_CRM_1766393619832'] ?? []; $filesForUpdate = []; // старые файлы (ID) foreach ($existingFiles as $fileId) { $filesForUpdate[] = $fileId; } // новые файлы foreach ($filePaths as $path) { if (!file_exists($path)) { continue; } $filesForUpdate[] = [ 'fileData' => [ basename($path), base64_encode(file_get_contents($path)) ] ]; } $result = CRest::call('crm.deal.update', [ 'id' => 159, 'fields' => [ 'UF_CRM_1766393619832' => $filesForUpdate ] ]); echo '<pre>'; print_r($filesForUpdate); echo '</pre>';
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Юрий Linux Ответ

В Битрикс24 “добавить новые файлы, сохранив старые” можно по-разному, и правильный способ зависит от того, где именно хранятся файлы: в поле CRM, в Диске, в пользовательском поле, в задаче, в комментарии или в сущности смарт-процесса. Главная ошибка — отправлять новое значение поля как полную замену, из-за чего старые файлы отвязываются.

Если это множественное файловое поле CRM, сначала получите текущие значения, затем добавьте новые и отправьте обратно полный массив: старые ID + новые файлы. Не передавайте только новый файл, если API ожидает полный список.

Общая логика:

  1. получить текущую сущность через REST;
  2. прочитать поле с файлами;
  3. загрузить новые файлы или получить их ID;
  4. собрать объединённый список;
  5. обновить поле полным списком;
  6. проверить, что старые элементы остались.

Если файлы находятся на Диске Битрикс24, часто лучше не перезаписывать поле, а добавлять файл в нужную папку/хранилище и уже затем привязывать его к сущности. Для комментариев или таймлайна можно просто создать новый комментарий с вложением — тогда старые файлы останутся в истории.

Важно: разные REST-методы Битрикс24 по-разному принимают файлы: где-то нужен base64, где-то ID файла Диска, где-то массив вида fileData. Поэтому сначала уточните конкретную сущность и поле.

Итог: не обновляйте файловое поле “вслепую” только новым файлом. Сначала считайте старые значения, объедините их с новыми и отправляйте полный набор. Если нужно сохранить историю, лучше добавлять вложения новым комментарием/записью в таймлайн, а не изменять существующее поле.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно