Примеры использования
Отправка документа на конвертацию
$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
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.