Как записывать в пользовательские поля CRM через фабрику: для поля "Файл" (множественное и не множественное)
В Bitrix CRM пользовательские поля могут быть разных типов, в том числе типа "Файл". В зависимости от того, настроено ли поле как множественное или не множественное, подход к записи данных будет отличаться. В этой статье мы рассмотрим, как работать с полями типа "Файл" для различных типов сущностей CRM, которые можно получить через фабрику, в частности, с полями, которые могут быть как множественными, так и не множественными.
Запись в не множественное поле "Файл"
Если ваше поле настроено как не множественное, оно будет хранить только один файл. В таком случае, при записи нужно передавать одиночный идентификатор файла.
Пример кода для записи в не множественное поле "Файл":
$comparisonFileId = $match ? $comparisonFileRes['GREEN'] : $comparisonFileRes['RED'];
$typeId = CrmHelpers::getIdFromCode('FINAL_SURVEY'); // Получаем ID типа сущности
$factory = Container::getInstance()->getFactory($typeId); // Получаем фабрику для этой сущности
$spItem = $factory->getItem($smartProcessId); // Получаем элемент сущности (например, сделка, контакт и т.д.)
// Устанавливаем значение в пользовательское поле (не множественное)
$spItem->set('UF_CRM_CSS_COMPARISON', $comparisonFileId);
// Получаем коллекцию полей
$fieldsCollection = $factory->getFieldsCollection();
// Получаем нужное поле
$field = $fieldsCollection->getField('UF_CRM_CSS_COMPARISON');
if ($field) {
// Создаем загрузчик файлов
$fileUploader = new \Bitrix\Crm\Service\FileUploader();
// Регистрация одиночного файла (передаем одиночный ID файла)
$fileUploader->registerFileId($field, $comparisonFileId);
}
// Сохраняем элемент
$operationResult = $spItem->save();
Комментарий:
- Здесь мы передаем одиночный ID файла в поле UF_CRM_CSS_COMPARISON, так как это поле не настроено как множественное.
- Мы используем метод set, чтобы записать этот ID в поле.
- После этого создаем загрузчик файлов и регистрируем файл с помощью метода registerFileId.
Почему так делать:
- Поле не множественное, и оно может хранить только одно значение. Именно поэтому мы передаем одиночный ID файла.
- Использование массива в этом случае приведет к ошибке, так как поле ожидает только один файл.
Запись в множественное поле "Файл"
Если поле настроено как множественное, оно будет хранить несколько файлов, и для его записи нужно передавать массив идентификаторов файлов.
Пример кода для записи в множественное поле "Файл":
$comparisonFileId = $match ? $comparisonFileRes['GREEN'] : $comparisonFileRes['RED'];
$typeId = CrmHelpers::getIdFromCode('FINAL_SURVEY'); // Получаем ID типа сущности
$factory = Container::getInstance()->getFactory($typeId); // Получаем фабрику для этой сущности
$spItem = $factory->getItem($smartProcessId); // Получаем элемент сущности
// Устанавливаем значение в пользовательское поле (множественное)
$spItem->set('UF_CRM_CSS_COMPARISON', [$comparisonFileId]);
// Получаем коллекцию полей
$fieldsCollection = $factory->getFieldsCollection();
// Получаем нужное поле
$field = $fieldsCollection->getField('UF_CRM_CSS_COMPARISON');
if ($field) {
// Создаем загрузчик файлов
$fileUploader = new \Bitrix\Crm\Service\FileUploader();
// Регистрация файлов для множественного поля (передаем массив с ID файлов)
$fileUploader->registerFileId($field, $comparisonFileId);
}
// Сохраняем элемент
$operationResult = $spItem->save();
Комментарий:
- В случае множественного поля важно передавать массив идентификаторов файлов. Даже если вы хотите передать только один файл, его все равно нужно обернуть в массив, так как поле ожидает несколько значений.
- Мы передаем массив в метод set для поля UF_CRM_CSS_COMPARISON, даже если в нем только один элемент.
- Затем используется registerFileId для привязки файлов к полю.
Почему так делать:
- Множественное поле может хранить несколько значений, и поэтому данные должны быть переданы в виде массива. Это гарантирует, что поле будет работать корректно и можно будет добавлять или удалять файлы при необходимости.
Заключение
- Не множественное поле "Файл":Для записи в не множественное поле нужно передавать одиночный ID файла.
Поле настроено для хранения только одного файла, и передача массива приведет к ошибке. - Множественное поле "Файл":Для записи в множественное поле нужно передавать массив с ID файлов, даже если это только один файл.
Это необходимо для корректной работы поля, которое предназначено для хранения нескольких файлов.
Не забывайте, что при работе с полями типа "Файл" важно точно соблюдать требования по формату данных, особенно для множественных и не множественных полей.