Всем привет, в продолжение моей статьи «Сравнение двух QVD и поиск различающихся строк данных«, решил подготовить краткий How-to на предмет того, как похожую задачу решить для QVW.
Постановка задачи
Итак, постановка задачи: вы вносите изменения в документ QVW и хотите убедиться, что случайно «не зацепили» ничего лишнего. Для этого вам требуется некий экран, на котором будут наглядно показаны точки различий между двумя версиями документа — новой и старой. Вы смотрите на этот экран и проверяете, что каждое найденное различие – это действительно результат ваших осознанных изменений.
НА ЗАМЕТКУ! Если находите среди различий несанкционированное, значит что-то сломали своими неосторожными действиями, а правки нужно откатить.
Область поиска различий будет определена как: Скрипт, Объекты интерфейса, Макет (см. выделение желтым на эталонной структуре файла QVW на скриншоте ниже). Иными словами, на экране вам нужно видеть все новые и изменившиеся измерения/выражения в чартах, все изменившиеся строки кода скрипта, все изменения свойств объектов на листах. А вот искать различия в Модели данных и самих Данных НЕ нужно, ведь модель — это результат работы скрипта (а его изменения вы контролируете), а данные вообще никак не зависят от документа и могут меняться при каждой перезагрузке (их контроль — это как раз задача сверки QVD, ссылку на статью привел выше).

Решение задачи
Для решения задачи будет задействована такая функциональность как «QlikView Project Files». Вкратце ее задача заключается в том, чтобы извлечь из указанного QVW-файла мета-данные относительно его внутреннего состава и сохранить в наборе человеко- и машино-читаемых XML-файлов.
НА ЗАМЕТКУ! Про состав XML файлов можно почитать в QlikView Reference Manual в разделе 9.1, здесь приводить эту информацию смысла особого нет, все достаточно наглядно.
Вообще говоря, функциональность «QlikView Project Files» создавалась для интеграции с Source Control системами, такими как Microsoft Team Foundation Server и Subversion/SVN. Она особенно актуальна для организации работы команд разработчиков.
НА ЗАМЕТКУ! Подробно интеграция освещена в документе QlikView 11 Source Control Walkthrough (гуглится).
Активация этой функциональности выполняется очень просто: в той же папке, где размещен QVW-файл, нужно вручную создать папку с аналогичным именем и суффиксом «-prj». Например, для файла «MyQVFile.qvw» создать папку «MyQVFile-prj», открыть QVW и сразу же сохранить. В папке появятся XML-файлы, описывающие внутреннюю структуру QVW, как на скриншоте ниже.

Эти файлы достаточно наглядны для чтения их человеком, а скрипт загрузки так и вовсе хранится в plain text. Для объектов визуализации создаются отдельные XML с описанием их свойств (именование — через Object ID), для структур всего документа (закладки, переменные и т.п.) — общие XML (именование смысловое).
Соответственно, для поиска различий между двумя QVW-документами можно воспользоваться таким сценарием:
- Создать prj-папки для измененного и исходного QVW-файлов, наполнить их XML-файлами.
- С помощью выбранного инструмента (см. ниже) запустить процедуру сравнения XML-файлов по содержимому.
- Локализовать различающиеся XML-файлы — это будет список тех мест, где были сделаны изменения в новом QVW-документе.
- Для каждой изменившийся пары XML «стало-было» локализовать конкретные различающиеся строки — это будет описание того, какие изменения были сделаны.
А теперь, как реализовать этот сценарий в конкретном инструменте — файловом менеджере Total Commander.
1. Открываете в левой панели папку с XML-файлами нового документа (в моем случае в имени суффикс dev), в правой панели — старого (суффикс prod), и запускаете команду «Синхронизировать каталоги».
![виа1 сн107 снизд сн113 сн114 сн115 CS13 СГ14 СГ15 СГ16 в DocBinay DocInternals LB1aa LB133 LB142 LB179 LB18 LB182 LB183 LB184 LB19 LB191 а байт ив 8 Мб. файлов: а ив 62 Total Commander (хб4) 8.50 - Yasilij Petrenko Тайлы Выделение Команды Сеть Вид Конфигурация Запуск 10 Кб 08.01.2016 18:41 10 Кб 08.01.2016 18:42 5 Мб 04.02.2016 14:36 5 Мб 04.02.2016 14:38 1 Мб 04.02.2016 14:36 1 Мб 08.01.2016 18:42 15 Кб 08.01.2016 18:42 15 Кб 08.01.2016 18:41 В Кб 08.01.2016 18:42 В Кб 08.01.2016 18:41 В Кб 08.01.2016 18:42 В Кб 08.01.2016 18:41 В Кб 08.01.2016 18:42 В Кб 08.01.2016 18:41 11 Кб 08.01.2016 18:42 13 Кб 04.02.2016 14:36 43 Кб 04.02.2016 14:38 43 Кб 04.02.2016 14:36 12 Кб 08.01.2016 18:42 12 Кб 08.01.2016 18:41 33 Кб 08.01.2016 18:42 33 Кб 08.01.2016 18:41 31 Кб 08.01.2016 18:42 31 Кб 08.01.2016 18:41 41 Кб 08.01.2016 18:42 41 Кб 08.01.2016 18:41 14 Кб 08.01.2016 18:42 16 Кб 04.02.2016 14:36 12 Кб 08.01.2016 18:42 15 Кб 04.02.2016 14:36 13 Кб 08.01.2016 18:42 17 Кб 04.02.2016 14:36 12 Кб 08.01.2016 18:42 12 Кб 08.01.2016 18:41 12 Кб 08.01.2016 18:42 13 Кб 08.01.2016 18:41 12 Кб 08.01.2016 18:42 12 Кб 08.01.2016 18:41 12 Кб 08.01.2016 18:42 12 Кб 08.01.2016 18:41 12 Кб 08.01.2016 18:42 12 Кб 08.01.2016 18:41 12 Кб 08.01.2016 18:42 12 Кб 08.01.2016 18:41 12 Кб 08.01.2016 18:42 12 Кб 08.01.2016 18:41 12 Кб 08.01.2016 18:42 12 Кб 08.01.2016 18:41 12 Кб 08.01.2016 18:42 12 Кб 08.01.2016 18:41 12 Кб 08.01.2016 18:42 12 Кб 08.01.2016 18:41 12 Кб 08.01.2016 18:42 666 Справка [iscsi] 820 гб из 2047 гб свободно Синхронизировать каталоги [iscsi] 820 гб из 2047 гб свободно 13. Отчет по СТ М.аеч-ргј Нег"оп Сот рагКоп\Д3. Отчет по СТ тип xml xml xml xml Размер Дата «Папка» 04.02.2016 14:36 342 Кб 04.02.2016 14:36 250 Кб 04.02.2016 14:36 245 Кб 08.01.2016 18:41 267 Кб 04.02.2016 14:36 49 байт 08.01.2016 18:41 13. Отчет по СТ М.'оаа-ргј Нег"оп Сот рагКоп\Д3. Отчет по СТ Тип Размер Дата «Папка» 08.01.2016 18:42 в виа1 сн107 снизд сн113 сн114 CS13 СГ14 СГ15 СГ16 DocBinay DocInternals xml xml xml 317 Кб 08.01.2016 18:42 249 Кб 08.01.2016 18:42 245 Кб 08.01.2016 18:42 49 байт 08.01.2016 18:42 Нег"оп СотрагКоп\Д3. Отчет по СТ М.аеч-ргј> F3 Просмотр F4 Правка Копирование звад LIB1a LB1aa LB133 LB142 LB179 LB18 LB182 LB183 LB184 LB19 LB191 LB193 LB194 LB195 а байт ив 8 Мб. РБ Перемещение файлов: а ив 57 F7 Каталог Alt+ F4 Выход](http://blog.atkcg.ru/wp-content/uploads/2017/02/word-image-18.png)
2. В появившемся диалоговом окне ставите опции, выделенные желтым, и запускаете сравнение. На экран выводятся отдельные XML-файлы, в которых были найдены различия. Это ответ на вопрос «где были сделаны изменения«. Четко видно, какие объекты были просто изменены, какие добавлены вновь.
![Total Commander (хб4) 8.50 - Yasilij Petrenko Тайлы Выделение Команды Сеть Вид Конфигурация Запуск [iscsi] 820 гб из 2047 гб свободно 13. Отчет по СТ М.аеч-ргј Нег"оп Сот рагКоп\Д3. Отчет по СТ Тип Размер Дата 5 214 CH1D7„ml 666 [iscsi] 820 гб из 2047 гб свободно 13. Отчет по СТ М.'оаа-ргј Нег"оп Сот рагКоп\Д3. Отчет по СТ Тип Размер Дата xml «Папка» 04.02.2016 14:36 342 Кб 04.02.2016 14:36 xml «Папка» 08.01.2016 18:42 317 Кб 08.01.2016 18:42 666 Синхронизация каталогов Version Comparison\13 Штчет по СТ Млјеи-рј\ Ш: Version Comparison\1 З Сравнить lB главном окне' асимметрично с подкаталогами по содержимому Показывать: Ш4Ш2ЛБ Ш4Ш2ЛБ Ш4Ш2ЛБ Ш4Ш2ЛБ дубликаты уникальные Размер Имя 325 377 AllProperties xml 255 ЦБ CH1DS„ml 1 434 ВЫ CH113„ml 12 221 Doclntemals xml 44 043 D ocProperties xml 14 Б4Б lB15„ml 43 588 LoadS CTipt 20 953 QlikVieAProiect xml 2 492 SH1S„ml 2 5ББ SH47„ml Штчет по Синхронизироват Закрьть Пустые каталоги игнорировать дату AllProperties xml CH1D7„ml сеч 1 CH113„ml Doclntemals xml D ocProperties xml LB2D3„ml LoadS CTipt QlikVieAProiect xml SH47„ml ТВТ „гг“ Размер Дата 351 Ш4Ш2ЛБ 14:3845 5 2Б2 Ш4Ш2ЛБ 14:3845 25Б Ш4Ш2ЛБ 14:3845 Ш4Ш2ЛБ 14:3845 273 Ш4Ш2ЛБ 14:3845 13 770 Ш4Ш2ЛБ 14:3845 44 043 Ш4Ш2ЛБ 14:3845 1Б 420 Ш4Ш2ЛБ 14:3845 15 539 Ш4Ш2ЛБ 14:3845 18 107 Ш4Ш2ЛБ 14:3845 12 831 Ш4Ш2ЛБ 14:3845 4Б 739 Ш4Ш2ЛБ 14:3845 21 543 Ш4Ш2ЛБ 14:3845 2 Ш4Ш2ЛБ 14:3845 2 БОБ Ш4Ш2ЛБ 14:3845 74 103 Ш4Ш2ЛБ 14:3845 4:38 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 4:38 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 8:42 k”iew Найдено файлов: 1Б/Б2 (Шпинаковьж: 0/4Б. Различных: F3 Просмотр F4 Правка 11. Чникальньж слева: Копирование 5 Чникальньж справа: Ш] РБ Перемещение Каталог Alt+F4 Выход](http://blog.atkcg.ru/wp-content/uploads/2017/02/word-image-19.png)
3. Чтобы увидеть конкретные изменения «стало-было», выделяете курсором нужную пару и дважды щелкаете (или команда контекстного меню «Сравнить по содержимому»). На экран выводится содержимое левого и правого XML-файла, а конкретные отличия подсвечиваются красным. Это ответ на вопрос «какие изменения были сделаны«.

Вот в принципе и все. Этот метод вошел в мой арсенал уже давно, и стал просто рефлекторным — ни одно перемещение QVW в продуктив не обходится без такой проверки. Времени занимает немного — буквально пару минут (для крупных файлов использую способ Open without data через контекстное меню RightQlik), зато сильно добавляет уверенности в своих действиях.
В заключение пара советов.
ВАЖНО!
- Во избежание возможных коллизий, prj-каталоги следует создавать вне продуктивных папок QlikView!
- У метода есть одно замеченное ограничение — почему-то в XML не сохраняются значения переменных. Поэтому будьте внимательны, если меняете переменные, их изменения вы тут не увидите. Также не сохраняются параметры триггеров (объекты/события/действия).
- Помимо Total Commander есть и другие инструменты для решения задачи сравнения по содержимому XML: Notepad++ (с плагином) и утилита WinMerge.
- Не забывайте о создании резервных копий, тестировании любых изменений в скрипте перед переносом в продуктив, и анализе возможных косвенных зависимостей с помощью Lineage-Dependency Analyzer.
P.S. Читал как-то интервью разработчика Total Commander Кристана Гислера, оказалось, что функциональность сравнения по содержимому — одна из самых сложных при реализации. Вот цитата:
«Какие черты и возможности в TC были наиболее сложны в реализации, и какими из них вы гордитесь само сильно?
Могу достаточно уверенно сказать, что наиболее сложной частью TC является редактор «Сравнить по содержанию», где вы можете параллельно редактировать два файла в соседних панелях, и разница в них каждый раз подсвечивается немедленно. При реализации этого редактора учитывалась очень много тонкостей, порой весьма неочевидных и глубокомысленных, отладка этой части программы также заняла очень много времени».
Источник цитаты: http://blogerator.org/page/windows-total-commander-iview

Свежие комментарии