Повторное использование существующего приложения | Центр миграции Справка
Перейти к основному содержимому Перейти к дополнительному содержимому

Повторное использование существующего приложения

Последнее обновление: 14.10.2026

QV2QS может использовать существующее приложение Qlik Sense в качестве целевого вместо создания нового приложения при каждом развертывании, что обеспечивает итеративную разработку и сохраняет идентификатор приложения.

По умолчанию QV2QS создает новое приложение при каждом развертывании. Вместо этого выберите существующее приложение, чтобы обновить приложение на месте и сохранить идентификатор приложения. Этот подход позволяет вести итеративную разработку и сохраняет закладки и ссылки, ссылающиеся на конкретный идентификатор приложения.

В пользу повторного использования говорят три аргумента:

  • --appId APP_ID — Укажите идентификатор приложения напрямую.
  • --appIdFile PATH — Считать идентификатор приложения из первой строки текстового файла.
  • --reuseAppId — Считать идентификатор приложения из cloud/cloud_state.json в подпапке проекта. Этот файл записывается автоматически после каждого развертывания.

Файл cloud/cloud_state.json хранится в подпапке проекта (например, <outputDir>/Sales/cloud/cloud_state.json). В файле фиксируются идентификатор приложения, хеш медиафайла, сопоставление идентификаторов листов, путь к исходному файлу и Метка времени. Флаг --reuseAppId считывает этот файл автоматически, поэтому последующие запуски обновляют то же приложение без необходимости ручного ввода ID приложения. В пакетном режиме --reuseAppId работает для каждого проекта отдельно — каждый проект считывает cloud_state.json из собственной выходной подпапки.

Сопоставление идентификаторов листов

Каждый документ QlikView идентифицирует листы по внутренним именам, таким как Document\SH01, Document\SH02 и так далее. Qlik Sense использует UUID для идентификации листов. Когда QV2QS впервые развертывает приложение, каждый преобразованный лист получает новый UUID. QV2QS сохраняет сопоставление между именем листа QlikView и UUID Qlik Sense внутри целевого приложения, чтобы эта связь сохранялась между развертываниями.

При последующих развертываниях в то же приложение QV2QS считывает сохраненное сопоставление и присваивает исходные UUID Qlik Sense соответствующим преобразованным листам. Сопоставление предотвращает появление дубликатов листов в приложении и сохраняет закладки, избранное и прямые ссылки, ссылающиеся на определенный идентификатор листа.

Сопоставление хранится в двух местах:

  • Внутри приложения Qlik Cloud — специальный объект в приложении содержит сопоставление. Сопоставление перемещается вместе с приложением, если приложение перемещено в другое пространство или экспортировано как QVF.
  • В локальной папке проекта — файл cloud/cloud_state.json содержит копию того же сопоставления. Флаг --reuseAppId считывает идентификатор приложения и сопоставление из этого файла.

QV2QS всегда считывает сопоставление из приложения в облаке (а не из локального файла) при подготовке к повторному развертыванию. Локальный файл предназначен для удобства поиска идентификатора приложения с помощью флага --reuseAppId.

Оптимизация хеша медиафайлов

QV2QS вычисляет хеш всех медиафайлов (фоны листов, фоны объектов, изображения кнопок) и сохраняет хеш вместе с сопоставлением листов. При последующих развертываниях QV2QS сравнивает текущий хеш с сохраненным значением. Если медиафайл не изменился, этап загрузки полностью пропускается.

Проверка сопоставления

Перед подготовкой листов к замене QV2QS сверяет сохраненное сопоставление с активным приложением. Если между развертываниями лист был удален вручную из приложения Qlik Cloud, QV2QS обнаруживает, что лист больше не существует, удаляет устаревшую запись из сопоставления и при следующей сборке обрабатывает соответствующий лист QlikView как новый. Обновленное сопоставление записывается обратно в приложение после завершения сборки.

Листы, добавленные или удаленные в источнике QlikView

Когда лист добавляется в источник QlikView после первоначального развертывания, QV2QS присваивает листу новый UUID и добавляет запись в сопоставление. Если лист удаляется из источника QlikView, он больше не присутствует в результатах сборки и удаляется из приложения Qlik Cloud во время сборки. Запись сопоставления для удаленного листа не переносится.

Сопоставление папки проекта

QV2QS записывает файл-маркер .qv2qs_source в каждую выходную папку проекта после первой конвертации. Маркер записывает полный путь к исходному файлу QVW. При последующих запусках QV2QS использует маркер для поиска нужной папки проекта для заданного файла QVW, даже если несколько папок имеют одинаковое базовое имя (например, Sales/, Sales_2/, Sales_3/).

Маркер гарантирует, что каждый файл QVW сопоставляется ровно с одной выходной папкой. При преобразовании файла QVW, который ранее уже был преобразован, QV2QS ищет в корневой папке вывода вложенную папку, маркер которой совпадает с исходным путем. Если найдено совпадение, QV2QS повторно использует эту папку и считывает cloud_state.json внутри нее. Если совпадение не найдено, QV2QS создает новую подпапку с числовым суффиксом.

В мастере применяется та же логика сопоставления. Когда включен параметр Повторно использовать существующее приложение, мастер проверяет выходную папку на наличие подходящего проекта и автоматически заполняет поле AppId из предыдущего развертывания. Если предыдущее развертывание не найдено, поле остается пустым и принимает ручной ввод или выбор с помощью средства обзора.

Примечание к информации

Файл-маркер .qv2qs_source создается автоматически. Не редактируйте и не удаляйте файл. Удаление маркера приводит к тому, что при следующем запуске QV2QS создает новую подпапку проекта вместо повторного использования существующей.

Поведение при повторном развертывании

QV2QS использует qlik app build, чтобы развернуть в целевом приложении. Команда сборки выполняет полную замену объектной модели приложения. Все объекты, определенные в выходных данных сборки, записываются в приложение. Объекты, отсутствующие в выходных данных сборки, удаляются.

Перед запуском сборки QV2QS подготавливает существующие листы к замене. QV2QS проверяет сопоставление листов с активным приложением (см. Сопоставление идентификаторов листов), фиксирует состояние публикации и ранг каждого листа и удаляет старые листы из приложения в облаке. Результат локальной сборки пропатчивается исходными идентификаторами листов Qlik Sense, чтобы закладки и ссылки, ссылающиеся на эти идентификаторы, продолжали работать после сборки.

После завершения сборки QV2QS восстанавливает исходное состояние листа. Ранее опубликованные листы повторно публикуются как базовые листы, а их исходный ранг (порядок отображения) восстанавливается. Новые листы, которых не было в предыдущем развертывании, публикуются как базовые листы, если включен параметр Опубликовать листы. Отключите этот параметр, чтобы новые листы оставались неопубликованными.

Примечание к предупреждению

Созданный пользователем контент в целевом приложении (добавленные вручную листы, закладки, истории или настраиваемые объекты, созданные после предыдущего развертывания) не сохраняется при повторном развертывании. Команда qlik app build заменяет содержимое приложения результатом сборки. Создайте резервную копию или опубликуйте приложение перед повторным развертыванием, если были внесены изменения вручную.

Резервная копия перед развертыванием

При повторном использовании существующего приложения QV2QS автоматически экспортирует резервную копию QVF без данных перед изменением приложения. Резервная копия сохраняет структуру приложения (листы, объекты, Скрипт загрузки и метаданные) без данных, поэтому экспорт выполняется быстро, а файл имеет небольшой размер.

Резервные копии сохраняются в cloud/backups/ внутри выходной папки проекта. Каждый файл резервной копии называется <AppName>_<shortId>_<timestamp>_nodata.qvf. Например, Sales_a1b2c3d4_20260226-143025_nodata.qvf.

Если экспорт резервной копии завершается ошибкой (например, из-за прерывания сетевого соединения или недостаточных прав доступа), QV2QS записывает предупреждение в журнал и продолжает развертывание. Сбой не блокирует конвертацию.

Чтобы пропустить автоматическое резервное копирование, передайте --noBackup в командной строке или включите параметр Пропустить резервное копирование перед развертыванием в мастере. Пропуск резервного копирования полезен в конвейерах CI/CD, где резервные копии управляются извне.

Сохранение Скрипта загрузки целевого приложения

По умолчанию QV2QS заменяет Скрипт загрузки в целевом приложении на преобразованный Скрипт загрузки из источника QlikView. Используйте --preserveTargetAppScript, чтобы сохранить существующий Скрипт загрузки в целевом приложении без изменений. Преобразованный Скрипт загрузки записывается в локальный файл build/script.qvs, но не применяется к облачному приложению.

Для этого параметра требуется --appId или --reuseAppId, поскольку он применяется только при выборе существующего приложения в качестве целевого. Его можно комбинировать с --reload для выполнения существующего скрипта после обновления пользовательского интерфейса, что полезно, когда целевое приложение уже имеет работающие подключения к данным Qlik Cloud. Его также можно комбинировать с --autoBinary для временной загрузки данных из исходного файла QVW, сохраняя целевой скрипт без изменений.

Сохранение переменных целевого приложения

По умолчанию QV2QS заменяет переменные в целевом приложении преобразованными переменными из источника QlikView. Используйте --preserveTargetAppVariables, чтобы сохранить существующие переменные в целевом приложении без изменений. Преобразованные переменные записываются в локальный файл variables.json, но не применяются к облачному приложению.

Для этого параметра требуется --appId или --reuseAppId, поскольку он применяется только при выборе существующего приложения в качестве целевого. Его можно сочетать с --preserveTargetAppScript, чтобы сохранить в неизменном виде как Скрипт загрузки, так и переменные целевого приложения.

Подробнее

Visit the discussion forum at community.qlik.com

Помогла ли вам эта страница?

Если вы обнаружили какую-либо проблему на этой странице или с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом!