Есть задача создать компанию на основании сделки. В сделке есть загруженные фото в пользовательское поле типа file, которые надо тоже перетащить в компанию. Никто не пробовал файл из одной сущности перетащить в другую или просто залить как-то файл? через rest или любым другим способом пробую так, файл добавляется но не тот размер и файл не открывается. а если вывести сам файл через print_r то запрашивает авторизацию, если ввести, то файл получаешь. такое ощущение что и тут грузится не файл в поле, а эта авторизация в каком-то виде
//id компании куда пробуем залить картинку из сделки $arFields = array( 'id' => 3, 'fields' => array() );
//добавляем данные в поле типа файл $file = 'https://site.ru'.$dealresult[result][UF_CRM_DEAL_FILE][0][showUrl]; $filename= 'test.jpg'; $fileData = file_get_contents($file); //при таком выводе, скрипт запрашивает авторизацию посередине страницы print_r($fileData); $arFields["fields"]["UF_CRM_COMPANY_TEMPFILE"] = array('fileData'=>array(0=>$filename,1=>base64_encode($fileData))); $companyupdate=callB24Method('crm.company.update',$arFields);
Ватсон написал: В сделке есть загруженные фото в пользовательское поле типа file, которые надо тоже перетащить в компанию. Никто не пробовал файл из одной сущности перетащить в другую или просто залить как-то файл? через rest или любым другим способом
мне кажется, что самый простой способ через БП: 1. получаем файл из сущности 2. заливаем файл в др. сущность
интересное предложение, правда, оно мне не кажется самым простым, но надо посмотреть как это там делается, если другого варианта не найду, то может так придется делать. Но о БП я как-то даже не подумал, спасибо. Мне казалось это достаточно просто должно быть кодом сделать, даже пытался посмотреть как это делается при конвертации лида в сделку, но что-то не нашел пока
Ватсон написал: Мне казалось это достаточно просто должно быть кодом сделать, даже пытался посмотреть как это делается при конвертации лида в сделку, но что-то не нашел пока
Для справки: В сущностях (Сделка, Лид, и т.д.) хранятся не ссылки на файл, а ID зарегистрированного файла (в виде массива, если мн. поле). Поэтому, если нужно через Bx API, то: получаем из сущности поле "как есть", и как есть пишем в др. сущность. Если типы полей одинаковые (тип-файл, множественное/не множественное), то должно сработать.
Спасибо. уже тоже разобрался, я не знал что каждый файл заливаемый на портал имеет свой id уникальный для портала и как раз через Cfile получил прямую ссылку на файл, которая не требует авторизации и ее уже скормил в компанию в 64 битной кодировке и это сработало. А сущности отдают ссылки на файлы через компонент и id файла и эта ссылка требует авторизации и в другую сущность заливается html форма авторизации, но с тем расширением и именем какое укажешь. так что у сущности надо распарсить id файла и по нему получать нормальную ссылку которую другая сущность примет
кстати, перенос через БП тоже неплохая идея, но тогда надо было сразу весь перенос через БП организовывать, правда т к не пробовал не знаю что там с переносом файлов, но видел там механизм создания компании из сделки
Ватсон написал: Спасибо. уже тоже разобрался, я не знал что каждый файл заливаемый на портал имеет свой id уникальный для портала и как раз через Cfile получил прямую ссылку на файл, которая не требует авторизации и ее уже скормил в компанию в 64 битной кодировке и это сработало.
А можно подробнее? что скормили сущности, ссылку на файл или контент? я подозреваю контент... не сталкивался с таким решением, можно кусок кода в студию?
Ватсон написал: кстати, перенос через БП тоже неплохая идея, но тогда надо было сразу весь перенос через БП организовывать, правда т к не пробовал не знаю что там с переносом файлов, но видел там механизм создания компании из сделки
собственно код наверху, но там $fileData получался формой авторизации а вот тут из урла к файлу любого компонента вытаскивается fileId , берется путь по fileId и уже этот файл кормится в сущность по коду выше, только там по моему поле файл принимает массив с массивами описания каждого файла, щас уже не помню. у меня щас код разделен на две части в php готовится массив, а JS его уже записывает по нажатию кнопки и вижу что там каждый файл описывается массивом имя файла и данные кодированные в 64, потом массивы с файлами пушу в массив и потом это в JS кодирую. но наверно если файл один, то можно и без контейнера. $file это путь который выдает компонент с fileId на конце. собственно в сущность кормится массив с описанием файла и данные в 64