Документация для разработчиков
Темная тема

Примеры использования

Отправка документа на конвертацию

$transformer = new \Bitrix\Transformer\DocumentTransformer();
// $file - абсолютный путь к файлу, ссылка на файл, ИД из b_file. ИД из b_file надо передавать как integer
// Если такой файл есть - он найдётся.
// $formats - массив того, что надо сделать с файлом. Для документов это, как правило, pdf и jgp
// $module - название или массив названий модулей, которые необходимо будет подключить перед вызовом колбека
// $callback - полное имя класса (или массив классов), которые воспроизводят интерфейс \Bitrix\Transformer\InterfaceCallback
// $params - произвольный набор параметров, который пойдёт на вход колбекам. 
// Может содержать название очереди по ключу queue. Если его не будет, на сервере будет выбрана очередь по умолчанию
$result = $transformer->transform($file, $formats, $module, $callback, $params);
if($result->isSuccess())
{
	// everything is fine
}
else
{
	$errors = $result->getErrors();
}

Получение статуса последней команды по файлу

Если у вас есть файл (в том же формате, что ушел на вход \Bitrix\Transformer\FileTransformer::transform()) и вы хотите получить статус выполнения последней команды, то надо сделать следующее:

// $file - абсолютный путь к файлу, ссылка на файл, ИД из b_file. ИД из b_file надо передавать как integer
$transformInfo = FileTransformer::getTransformationInfoByFile($file);

В результате вернется либо false, если такой файл не отправлялся на конвертацию, либо массив вида:

array(
	'status' => $command->getStatus(), // статус команды
	'time' => $command->getTime(), // время отправки на конвертацию
	'id' => $command->getId(), // ид команды из таблицы b_transformer_command
	'params' => $command->getParams(), // параметры команды
);

Пример реализации колбека

Полный пример лучше смотреть в исходниках. Это \Bitrix\DocumentGenerator\Integration\TransformerManager и \Bitrix\Disk\Integration\TransformerManager.

В интерфейсе \Bitrix\Transformer\InterfaceCallback только один метод - call На вход метод идут параметры:

  • $status (int) - статус команды
  • $command - название команды
  • $params - параметры, которые шли на вход команды
  • $result - массив результатов выполнения команды, где ключ - формат, а значение - результат. Если в результате есть файлы, то они будут в отдельном массиве files, где ключ - формат, а значение - путь к файлу

Метод должен возвращать true в случае нормального выполнения и строку с текстом ошибки в случае ошибки (эта ошибка запишется на сервер конвертации).

Ниже простой пример:

class TransformerCallback implements \Bitrix\Transformer\InterfaceCallback
{
	public static function call($status, $command, $params, $result = array())
	{
		// На вход команды в $params указываем fileId - идентификатор файла.
		// Теперь надо сбросить по нему кеш с информацией о команде
		if(isset($params['fileId']) && $params['fileId'] > 0)
		{
			FileTransformer::clearInfoCache($params['fileId']);
		}
        
		if($status === 1000)
		{
			// do something with error
			return true;
		}
        
		$pdfFileResult = $result['files']['pdf'];
		if($pdfFileResult)
		{
			$file = \CFile::MakeFileArray($pdfFileResult, 'application/pdf');
			$bFileId = \CFile::SaveFile($file);
			// save $bFileId
		}
        
		// send some php event
        
		return true;
	}
}

Получение подробной ошибки конвертации файла

С версии модуля transformer 18.1.0 добавлено сохранение кодов ошибок с сервера и описания этих ошибок. Пример получения подробного описания ошибки конвертации файла:

// $file - абсолютный путь к файлу, ссылка на файл, ИД из b_file. ИД из b_file надо передавать как integer.
$foundFile = new \Bitrix\Transformer\File($file);
$publicPath = $foundFile->getPublicPath();
$command = Command::getByFile($publicPath); 
// метод getByFile вернет объект \Bitrix\Transformer\Command или false, если файл не отправлялся на конвертацию
$error = $command->getError()

// в результате вернет объект \Bitrix\Main\Error


© «Битрикс», 2001-2024, «1С-Битрикс», 2024