Бизнес-процессы: получить ссылку на загруженный файл (картинку) в любой момент выполнения
 
Бизнес-процессы: получить ссылку на загруженный файл (картинку) в любой момент выполнения
28.01.2014 14:36:58
Битрикс
481
Дано:
Некий бизнес-процесс (далее по тексту - БП), одним из параметров которого служит картинка (скан счета, больничного листа, фото сотрудника - и т п) 
Бизнес-процесс организован на инфоблоке (далее по тексту - ИБ) типа "Список", файл хранится в одном из свойств.

Требуется:

на определенном шаге выполнения выводить пользователю сообщение (письмо), в котором была бы ссылка на просмотр и скачивание данного вложения.

Решение:

1. Присвоим свойству, в котором хранится файл, код PHOTO

2. Создадим в БП переменную photo_link, куда на первом шаге запишем нашу ссылку.

3. PHP - код получения ссылки:

				CModule::IncludeModule('iblock'); $IBLOCK_ID ={=Document:IBLOCK_ID}; $REC_ID ={=Document:ID}; $db_props = CIBlockElement::GetProperty($IBLOCK_ID, $REC_ID, array("sort" => "asc"), Array("CODE"=>"PHOTO")); if($ar_props = $db_props->Fetch())    {$str =$ar_props["VALUE"]; $link = "https://".$_SERVER["HTTP_HOST"]."/services/lists/".$IBLOCK_ID."/file/0/".$REC_ID."/PROPERTY_196/".$str."/"; $rootActivity = $this->GetRootActivity(); $rootActivity->SetVariable("photo_link",$link); } else    $str = "";
			

Пояснения:

				CModule::IncludeModule('iblock');
			
- подключаем модуль для работы с инфоблоком (понадобится чтобы вытащить из ИБ информацию о вложении)
				$IBLOCK_ID ={=Document:IBLOCK_ID}; $REC_ID ={=Document:ID};
			
Получаем код ИБ, с которым работает данный БП, а также текущий экземпляр документа - он же
				$REC_ID
			
				 $db_props = CIBlockElement::GetProperty($IBLOCK_ID, $REC_ID, array("sort" => "asc"), Array("CODE"=>"PHOTO"));
			
- Получаем значение свойства PHOTO по его коду, ID инфоблока и текущей записи. (Тут следует заметить, что объект результата вернет нам целое число, т к при загрузке файла в БП система помещает загруженный файл в одну из подпапок папки upload, регистрирует файл в базе и присваивает ему уникальный ID - он и хранится в свойстве инфоблока.
				if($ar_props = $db_props->Fetch())    {$str =$ar_props["VALUE"];
			
- здесь: для данного REC_ID присутствует запись со свойством PHOTO, получим его значение (число) в переменную $str

Далее - собственно, формирование ссылки:

				$link = "https://".$_SERVER["HTTP_HOST"]."/services/lists/".$IBLOCK_ID."/file/0/".$REC_ID."/PROPERTY_196/".$str."/";
			
Здесь:

протокол HTTPS - актуален для данного конкретного случая, возможно, у Вас в ссылке будет HTTP. .$_SERVER["HTTP_HOST"] - корневой директорий

Переменные $IBLOCK_ID, $REC_ID и $str - получены выше по коду, остальные части текста - одинаковы для всех случаев, кроме PROPERTY_196

Здесь в каждом конкретном случае выражение будет формироваться по принципу PROPERTY_#ID свойства#.

ID свойства для Вашего списка можно узнать, если открыть соответствующий инфоблок в админке в режиме редактирования свойств.

Далее - записываем полученное значение в переменную photo_link

				$rootActivity = $this->GetRootActivity(); $rootActivity->SetVariable("photo_link",$link);
			
Загрузка...