Примеры использования
Отправка документа на конвертацию
$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