Всем привет, в продолжение моей статьи «Сравнение двух 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), и запускаете команду «Синхронизировать каталоги».
2. В появившемся диалоговом окне ставите опции, выделенные желтым, и запускаете сравнение. На экран выводятся отдельные XML-файлы, в которых были найдены различия. Это ответ на вопрос «где были сделаны изменения«. Четко видно, какие объекты были просто изменены, какие добавлены вновь.
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
Свежие комментарии