ISBLScan.Compare (Прототип)

30 24

Информация для тех, кто не подписан на эту статью, не пользуется RSS или просто пропустил: завершена доработка утилиты ISBLScan.ViewCode. Что теперь умеет утилита:
1) загружается и парсится абсолютно вся разработка, в том числе мастера действий, типовые маршруты, пользовательские расчеты, диалоги;
2) дерево разработки можно фильтровать по дате изменения элемента;
3) можно открыть текущий элемент разработки в Directum;
4) работать с утилитой стало удобнее: добавлены shortcuts, автопрокрутка редактора до первого найденного вхождения, возможность указать реквизиты подключения к базе в командной строке и т.д.

ISBLScan.Compare
Сравнение разработки в двух базах

На основе доработанной утилиты решил попробовать сделать утилиту для сравнения разработки в двух базах.
Для чего можно использовать эту утилиту:
1) периодический поиск различий в двух базах (для выявления, что на "горячую" руку изменили на "бою", но не перенесли в базу разработки);
2) рецензирование изменений;
3) это единственный способ сравнить код мастеров действий и, пожалуй, самый удобный способ сравнить ТМ.

По сути, утилита заменяет экспорт разработки из одной базы (назовем ее DEV) и сравнение разработки при импорте в другую базу (пусть будет TEST). Утилита отслеживает только изменения в элементах, содержащих вычисления. Придется сделать загрузку всего и вся, чтобы отслеживать добавление/удаление реквизитов, изменение параметров справочников/ТКД и т.д. А там и недалеко до выгрузки всего в текстовые файлы для системы контроля версий. Лично у меня очень часто возникают вопросы типа: "Кто, когда и зачем вот этот кусок кода сюда добавил?". 


Пока что реквизиты подключения к базе можно указать только в параметрах командной строки.

ISBLScan.Compare.exe -S=directum -D=directum_dev -N=sa -W=12345 -S2=directum -D2=directum_test

-S,-D,-N,-W - параметры подключения к DEV (парольная аутентификация)
-S2,-D2 - параметры подключения к TEST (windows аутентификация, -N2,-W2)

Пример результата сравнения

Дерево - это объединение деревьев DEV и TEST. Сюда попадают только измененные элементы. Синим - есть в DEV, нет в TEST. Зеленым - есть в TEST, нет в DEV. Красным - элемент есть и там, и там, но содержимое отличается. Дерево можно фильтровать по заголовку элемента и по дате изменения элемента (дата берется из DEV, если в DEV элемента нет - из TEST).
Верхний редактор - TEST. Красным (синий выглядит не очень вместе с подсветкой синтаксиса) - есть в TEST, удалено в DEV.
Нижний редактор - DEV. Зеленым - есть в DEV, пока еще нет в TEST.
Так же, как и в ISBLScan.ViewCode, по Ctrl+O можно открыть элемент дерева. Открывается в DEV.

20170703 ISBLScan.Compare.exe (поместить в ту же папку, что и ISBLScan.ViewCode)

Напрямую синхронизацию всех изменений в разработке делать очень сложно, поэтому можно будет сделать автоэкспорт всех или только выбранных измененных элементов дерева в стандартный пакет Directum (ISX для разработки, xml + img для ТМ, мастеров и записей справочников) и потом автоматом запускать импорт. Я уже делал такое на Directum (был справочник пакетов, в котором выбирались элементы разработки и действия по выгрузке/запуске импорта), ничего сложного в этом нет.
Но над быстрым переносом только изменений в вычислениях нужно подумать...

Но нужен ли такой инструмент?
Чего не хватает в инструменте/что можно сделать лучше?

Update 20170707
По пожеланию Андрея Дозорова реализовал загрузку разработки из файлов. Для DEV вместо -S,-D,-N,-W можно указать пути к файлам -ISX= , -SR=, -WIZ=.

Update 20171116
Поправил загрузку данных и сравнение CustomCalculations. Теперь можно указать какое поле использовать как код (по какому сравнивать).

Андрей Дозоров

Я правильно понимаю что утилита работает только с БД?
Лично у меня регулярно появляется задача разобраться что изменится в базе после импорта крупного пакета разработки. Это конечно можно сделать с компонентой импорт разработки, но визуально не очень удобно (много лишних кликов что бы посмотреть разницу в коде) и не все типы компонент можно посмотреть (блоки ТМ, ТМ, МД).

Андрей Манаков

Оптимистичный взгляд на использование Directum'а аж до 9998 года :)

P.S.: пустыми эти поля, я так понимаю, оставлять нельзя?

Александр Чугунов

По контролу даты: это стандартный WPF datepicker, за полчаса я не нашел как разрешить пустое значение без костылей. Так что там min/max для этого контрола. А больше на это времени тратить не могу, не так уж много его у меня=)
По сравнению с пакетом разработки: загружать разработку из пакета не сложно, пару дней на доработку надо будет. Может и сделаю когда-нибудь в этой утилите. Как устроен пакет разработки я знаю очень хорошо=) Когда-то делал свой экспорт разработки функциями на SQL (кучу времени пришлось потратить только потому что sbdte не умел в не визуальном режиме фильтровать по дате изменения + работа напрямую с SQL позволяла не париться о версии базы, а баз было несколько десятков) и потом утилитой Дениса Мурашова преобразовывал в текстовые файлы и загружал в систему контроля версий (Borland StarTeam, потом в Git). Маршруты преобразовывал в читабельные текстовые файлы вот этим механизмом, а Мастера функцией из этого решения. Получилось вполне сносно, но хочется чего-то более удобного... Работа сейчас ведется по двум направлениям: доработки isblScan и разработка с нуля утилиты по экспорту всего в текстовые файлы, сбор из текстовых файлов в стандартный пакет Directum + extension для VisualStudioCode для удобного редактирования (утилита у коллеги уже почти год в зачаточном состоянии, я тогда еще не умел на C#/.NET =). В ближайшее время я отдам предпочтение второй утилите, мне она кажется более перспективной, так как всем, чем должна была бы заниматься isblScan, будет заниматься IDE и система контроля версий. Зачем делать велосипед для isblScan, если есть другие отличные инструменты=)
 

Василий Ившин

Здорово. По сути это должна одна из основных фич общего решения по управлению прикладной разработкой.

Роман Деменков

Наконец-то нормальный diff! Спасибо!

Не могу не посоветовать посмотреть на реализацию оного у JetBrains в любом их продукте.

Ну и как логичное довершение не сравнение двух баз, а сравнение коммитов разработки в git. Скорее всего как отдельное решение.

Александр Чугунов

Андрей Дозоров, с Вас тестирование корректности загрузки из файловой системы=) 20170707 ISBLScan.Compare.exe Для DEV вместо -S,-D,-N,-W можно указать пути к файлам -ISX= , -SR=, -WIZ=. Но, как я уже писал выше, этой утилитой можно посмотреть только изменения в коде, sbdte дает более полную картину, хоть и не так удобна...
Василий, спасибо, надеюсь из этого всего получится что-то стоящее и делающее разработку на Directum приятнее=)
Роман, думаю, скоро будет более серьезная утилита, которая позволит работать с любимой IDE. Как я уже писал, не хочется делать велосипеды для isblScan, эта утилита для простых, базовых, задач и работать с ней просто, не требуется ничего дополнительного. Но что-то стоящее из ее сделать очень сложно, проще сделать нормальный экспорт-импорт в файлы разработки всего и использовать специализированные инструменты.

Александр Чугунов: обновлено 07.07.2017 в 12:31
Марина Котусева

Очень удобно, ждем возможности сравнения добавления/удаления реквизитов :)

Анатолий Придыбайло

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

Александр Чугунов

Марина, спасибо! Скорее всего эту утилиту я уже дорабатывать не буду. Мы с коллегой уже на 90% реализовали новый экспорт абсолютно всей разработки из SQL в файловую систему (текстовые файлы с кодом и json с метаданными), загрузку из файловой системы в приложение (не на SQL) и выгрузку в стандартный ISX. Застряли на блоках ТМ, ТМ и Мастерах. Пришлось всё заново переписать, но теперь загрузка с SQL работает в разы (при большом RTT в десятки раз) быстрее. Как полностью доделаем, буду делать визуальную часть. Может сделаю так же, может по-другому. Поэтому буду рад выслушать любые предложения=) Так как в Москве наконец-то наступило лето, доработки утилиты откладываются до сентября/октября.
Анатолий, а не решит ли выгрузка в текстовые файлы Вашу задачу? Можно будет использовать систему контроля версий и там документировать все изменения, отправлять на ревью, пул реквесты делать=). Надо будет только как-то выбирать какие изменения коммитить, а какие нет. В принципе, можно отображать такое же дерево, как и в IsblScan с возможностью поставить галочки у нужных элементов дерева. Это нагляднее, чем выбор файлов и можно сразу все файлы компоненты выбрать/исключить.

Анатолий Придыбайло

У меня задача мене масштабнее чем вы предлагаете, мне нужно перед конвертацией на новую версию выявить компоненты, которые были изменены или добавлены в ходе доработок и потом их слить с разработкой новой версии. В стандартном импорте список расхождений видно по разработке, но его никак не выгрузить и даже не скопировать поля, а в вашем решении и ТМ с МД выводятся

Анатолий Придыбайло: обновлено 01.08.2017 в 15:50
Александр Чугунов

Анатолий, понятно. В новой утилите будет экспорт в ISX, думаю можно будет выгрузить только измененные/добавленные компоненты. Думаю, можно выгружать не только ISX, а и вспомогательный txt-файл со списком компонент в пакете, как стандартный экспорт. Эти два файла должны решать Вашу задачу. Можно будет даже сделать выгрузку компоненты частично, например только вычисления, без изменений формы. Формы, кстати, для начала можно как текстовые файлы просто сравнивать...

Дамир Губаев

К сожалению не работает на 64 битной Windows 7

Александр Чугунов

Дамир, у меня на WIN10 x64 запускается. Собираю я всегда для Any CPU. Вы из этого каталога скачивали ISBLScan.ViewCode и дополнение к нему ISBLScan.Compare? ISBLScan.ViewCode запускается?

Дамир Губаев

По ссылкам из статьи скачивал, то что Вы указали работает. Спасибо за опертивность

Дамир Губаев

Теперь вопрос с подключением,  обязательно указывать одно подключение с Windows авторизацией, а второе по паролю и требуется ли указывать указать экземпляр системы? Без него на находит сервер. В нашем случае как верно указать? Запускать можно на любой машине или только сервер? 

-S=directumsrv1\directumsql -D=directum -S2=directumsrv1\directumsql -D2=directumtest1

 

Александр Чугунов

Дамир, какую авторизацию используете, такую и указываете (любые комбинации парольной или виндовой). SQL-Instance надо указывать если он именованный. Запускать можно на любой машине, где есть доступ к обоим sql-серверам.
Если обе виндовые и sql-instance именованный, то Вы правильно написали.

Александр Чугунов

Update 20171116
Поправил загрузку данных и сравнение CustomCalculations. Теперь можно указать какое поле использовать как код (по какому сравнивать). Для этого в CustomCalculationConfig.json надо добавить параметр "FieldForUseAsCode": "Kod". Можно использовать любые колонки таблицы TableName.

Александр Чугунов

Утилита не получит дальнейшего развития. Я отказался от создания своих велосипедов, проще и удобнее выгружать всю разработку на диск и работать с ней специализированными решениями, в моем случае Visual Studio Code.

Алексей Сковородников

Александр, привет!

Скачиваю утилиты отсюда и отсюда 

Обе утилиты лежат в одной директории. Запускаю с параметрами:

ISBLScan.Compare.exe -ISX="<путь до первого файла>\dir511.isx" -ISX2="<путь до второго файла>\dir551.isx"

Открывается окно ISBL.ViewCode, но кода нет ни в верхнем, ни в нижнем редакторе, дерева слева тоже нет.

Если пробовать указать *.ISX только в одном из параметров подключения (в другом использовать подключение к БД):
ISBLScan.Compare.exe -S=<сервер> -D=<БД> -N=<имя пользователя БД> -W=<пароль> -ISX2="<путь до файла>\dir551.isx"

 то подключение проходит по тем параметрам, которые цепляются к БД, и код, и дерево отображаются, но кода из файла все равно не видно.

Вообще, можно ли сравнивать два файла ISX? Какими параметрами воспользоваться в таком случае? 

Ну, или если есть возможность сравнить код из базы и из файла *.isx: подскажи, как правильно воспользоваться параметрами подключения? Подключение к текстам разработок из базы, повторюсь, проходит нормально. 

Спасибо! 

 
Алексей Сковородников: обновлено 12.04.2018 в 11:57
Александр Чугунов

Алексей, -ISX можно указать только в параметрах первой базы. -ISX2 не поддерживается. Я этой утилитой сам уже не пользуюсь, есть более удобные варианты, например, Development Transfer Utility (я использую самописный аналог). DTU позволяет работать с любимой IDE и GIT. Довольно часто лезу в репозиторий чтобы посмотреть историю изменений, сделать пакет и ничего не забыть или провести ревью.

Алексей Сковородников

То есть вот такое вот должно сработать:

ISBLScan.Compare.exe -ISX="<путь к файлу>\dir551.isx" -S=<сервер> -D=<БД> -N=<имя> -W=<пароль> 

Или сравнить разработки из БД и из файла не получится? 

Александр Чугунов

Алексей, да, только -S2,-D2,-N2,-W2.

Алексей Сковородников

Пробовал с -S, -D, -N, -W и с двойкой, и без двойки. Без "2" ViewCode просто не отображает тексты разработок из файла, если с "2" - вылетает мгновенно с ошибкой: 

Ну ладно, спасибо) Буду пробовать с DTU

Алексей Сковородников

Александр, привет)

Я не знаю что это было, но я просто переименовал (добавил в конце "1") скачанный exe-шник ISBLScan.Compare, заменил им старый - и всё заработало

Новый exe-шник я даже заново не скачивал 

Может кому поможет ¯\_(ツ)_/¯

Авторизуйтесь, чтобы написать комментарий