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

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

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

$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-2020, «1С-Битрикс», 2020
Наверх