Как загрузить файл из формы в пользовательское поле сделки?

Здравствуйте! Я получаю файл из заполненной формы с помощью следующего кода: <br/> $arAnswer = CFormResult::GetDataByID($RESULT_ID, array(), $arResult, $arAnswer2); <br/> В результате я получаю следующий массив: <br/> <pre><code class="php">'FILES' =&gt; 
    array (
      0 =&gt; 
      array (
        'RESULT_ID' =&gt; '90',
        'FIELD_ID' =&gt; '3',
        'SID' =&gt; 'FILES',
        'VARNAME' =&gt; 'FILES',
        'TITLE' =&gt; 'Добавьте файлы',
        'TITLE_TYPE' =&gt; 'text',
        'FILTER_TITLE' =&gt; '',
        'RESULTS_TABLE_TITLE' =&gt; '',
        'ANSWER_ID' =&gt; '3',
        'ANSWER_TEXT' =&gt; '',
        'MESSAGE' =&gt; ' ',
        'ANSWER_VALUE' =&gt; '',
        'VALUE' =&gt; '',
        'USER_TEXT' =&gt; 'test (5).pdf',
        'USER_DATE' =&gt; NULL,
        'USER_FILE_ID' =&gt; '263',
        'USER_FILE_NAME' =&gt; 'test (5).pdf',
        'USER_FILE_IS_IMAGE' =&gt; 'N',
        'USER_FILE_HASH' =&gt; '38e12260c6ec7780e620c1842ac51a78',
        'USER_FILE_SUFFIX' =&gt; NULL,
        'USER_FILE_SIZE' =&gt; '186205',
        'FIELD_TYPE' =&gt; 'file',
        'FIELD_WIDTH' =&gt; '0',
        'FIELD_HEIGHT' =&gt; '0',
        'FIELD_PARAM' =&gt; '',
      ),
    ),</code></pre> <br/> <br/> Мне нужно передать этот файл в поле типа "файл" в сделке в Битрикс24 с помощью метода <br/> CRest::call( <br/> 'crm.deal.update', <br/> array( <br/> 'ID' => $dealId, <br/> 'fields' => [ <br/> 'UF_CRM_1727071878115'=> ' ', <br/> ] <br/> ) <br/> ); <br/> <br/> Как я могу это сделать? Я полагаю, мне нужен параметр tmp_name, но я не могу его получить.
  • 23 сентября 2024 г. 7:43
Ответы на вопрос 1
Чтобы загрузить файл из формы в пользовательское поле сделки в Битрикс24, вам нужно использовать метод `crm.deal.update`, передавая туда файл как прикрепление. Вот шаги, которые вам нужно сделать:

1. Убедитесь, что файл уже загружен в систему (как это уже происходит в вашем коде, так как вы получаете массив с данными файла).
   
2. Используйте метод `disk.uploadFile`, чтобы загрузить файл на диск Битрикс24. Это позволит вам получить идентификатор файла, который можно будет использовать при обновлении сделки.

3. После загрузки файла получите его ID и обновите вашу сделку, передав этот ID в пользовательское поле.

Пример кода для загрузки файла и обновления сделки может выглядеть следующим образом:

```php
// Получение данных о файле из формы
$arAnswer = CFormResult::GetDataByID($RESULT_ID, array(), $arResult, $arAnswer2);
$fileInfo = $arAnswer['FILES'][0];

// Предполагаем, что у вас есть путь к файлу
$filePath = $_SERVER['DOCUMENT_ROOT'] . '/upload/tmp/' . $fileInfo['USER_FILE_NAME'];

// Загрузка файла на диск Битрикс24
$uploadResult = CRest::call('disk.uploadFile', array(
    'file' => array(
        'name' => $fileInfo['USER_FILE_NAME'],
        'content' => file_get_contents($filePath),
        'size' => $fileInfo['USER_FILE_SIZE'],
    ),
));

// Получаем ID загруженного файла
$uploadedFileId = $uploadResult['id'];

// Обновляем сделку, передавая ID загруженного файла в пользовательское поле
$updateResult = CRest::call('crm.deal.update', array(
    'ID' => $dealId,
    'fields' => array(
        'UF_CRM_1727071878115' => $uploadedFileId,
    ),
));

// Проверяем результат
if ($updateResult['result'] == true) {
    echo 'Сделка успешно обновлена!';
} else {
    echo 'Ошибка обновления сделки: ' . $updateResult['error_description'];
}
```

### Примечания:
- Убедитесь, что вы правильно указали путь к файлу. Обычно файлы, загруженные через формы, находятся во временных директориях, например, `/upload/tmp/`.
- Не забудьте заменить `'UF_CRM_1727071878115'` на ваше реальное значение пользовательского поля, если оно отличается.
- Проверьте, что у вас есть необходимые права на загрузку файлов и обновление сделок в Битрикс24.
- Убедитесь, что вы используете корректные версии API и библиотеки.
Похожие вопросы