Как стать автором
Обновить

История разработки одного очень удобного расширения

Время на прочтение5 мин
Количество просмотров2.8K

Недавно поменял работу, на новом месте столкнулся с нечитабельной структурой базы данных MSSQL, в которой таблицы и поля не имеют понятных названий (префикс + число). Например: таблицы называются Data1078, Data2022, а колонки называются f210, f1521. Подобные структуры часто встречаются в коробочных продуктах.

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

SELECT
   d.f1229,
   d.f1230
FROM
   dbo.Data1220 d -- show_tab 1220
WHERE
	 d.f1235 in (1,2) -- Описание магических констант не развито в команде.
	 

Чтобы посмотреть структуру и описание таблицы, разработчики обычно добавляют вспомогательные команды прямо в код и описывают колонки комментариями. Для просмотра описания и структуры таблицы, надо выделить хранимую процедуру show_tab 1220 и выполнить ее, описание таблиц, колонок и тексты джойнов будут выведены в таблице результатов. Помучавшись немного с чтением кода (особенно с колонками), появилась идея написать расширение, которое просто выводит описание по выделенному тексту.

Поскольку в основном код редактировался в SQL Server Managment Studio, а небольшой опыт по написанию расширений для продуктов Microsoft у меня имелся, решил написать небольшое полезное расширение. Покапавшись в GitHub, набрел на расширение для Managment Studio, найденное расширение уже содержало часть нужного кода и инструкцию по установке, первоначально удалил лишний код специфичный для расширения и добавил нужный мне. В базе данных написал хранимую процедуру, которая принимает в качестве параметра выделенный участок текста и выводит одной колонкой полезную информацию.

Расширение по таймеру вызывает хранимую процедуру и передает туда выделенный текст, результат из хранимой процедуры выводится в консоль вывода. После демонстрации расширения, часть программистов сразу поставила себе расширение. Дальше разработчики стали генерировать идеи, в первую очередь попросили добавить отдельное окно для просмотра структуры таблиц. Например выделяешь таблицу dbo.Data2078 нажимаешь Alt+S, расширение показывает отдельное окно, в верхней части окна отображается описание таблицы (хранимая сущность) и структура таблицы, в нижней окно с последними записями в таблице и SQL запрос, например такой SELECT TOP 10 * FROM dbo.Data2078 (nolock) ORDER BY id DESC.

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

Из наиболее интересных функций, пожалуй подсказка по магическим значениям.

Выделяешь код d.f1235 IN (1,2) в окне вывода отображается описание.

1 - Новый документ

2 - В обработке

Затем появилась идея добавить быстрые команды, например напечатав WL и выделив команду, в окно вывода отображаются последние изменения в объектах базы данных (название, автор, дата изменения, тип изменения и описание). Описания для хранимых процедур и функций хранятся прямо в коде, поскольку стандартов на комментарии нет, пришлось решить очередную творческую задачу :). Наличие подобной функции сразу мотивировало разработчиков писать комментарии к коду, поскольку все недочеты по документации сразу видны всем.

Приведу небольшой список функций по памяти:

  1. Просмотр файлов, Json и Html (функция доступна в окне просмотра данных) - просто кликаем по ячейки со значением, расширение анализирует ячейку, если это ссылка на хранимые файлы, сразу выводится файл, если ячейка содержит Html текст, текст сохраняется в файл и запускается браузер, Json значение выводится в отформатированном виде в окно вывода.

  2. Drill Down по структуре БД - выделяем SQL запрос нажимаем Alt+S, появляется таблица с данными, кликаем по ссылочной ячейке, отображаются возможные значения, по двойному клику по заголовку строки отображается отдельное окно со связанными объектами и количеством ссылок (функция доступна в окне просмотра данных). Например открываем таблицу с договорами, кликаем дважды по договору, видим 5 платежей, кликаем по платежам, отображаются платежи, дальше кликаем по платежу и т.д.

  3. Быстрый поиск объектов. Например: fc %GetList залог, команда выведет все хранимые процедуры и функции, в которых есть таблица с похожим описанием или комментарий залог, а название хранимки или функции заканчивается на GetList.

  4. Генерирование CRUD. Например: CRUD Data2078 R - сформируется текст процедуры чтения для таблицы, со всеми джойнами и комментариями, код процедуры будет выведен на консоль, откуда его можно скопировать в окно с кодом.

  5. Отображение полноценного UI для выделенного SQL запроса. Например: выделям select * from dbo.Data2078 или хранимую процедуру, нажимаем Alt+S отображается отдельное окно с результатами запроса. Результаты отображаются в таблице, в таблице сразу скрыты служебные колонки (дата создания, создатель и прочие), в заголовках колонок есть описание и типы данных, есть функции экспорта в Excel, подстановка данных из справочных таблиц, есть отключаемое ограничение на количество строк и т.д.

  6. По выделенному названию процедуры или функции, в окне вывода отображается исходный код объекта и история изменений (кто и когда изменял).

  7. Отображение данных из небольших справочников. Например: Выделяем вспомогательный справочник dbo.Data105, в окне вывода будет выведено описание, структура таблицы и список значений (ID и Name).

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

Предусмотрена поддержка любых баз данных MSSQL, подсказки и описания в данном случае считываются из расширенных свойств объектов и системных представлений. Часть функций написаны в виде отдельных хранимых процедур и могут использоваться отдельно от расширения, например генератор CRUD или отображение лога работы разработчиков. У лога работы неожиданно появилась крайне полезная фуркция, быстро найти кто и что поломал :). Например можно набрать wl бронирование, расширение выведет список объектов (хранимые процедуры, функции) и авторов изменений, часто сделавший последние изменения и является автором поломки.

Итог

Пишите, настраивайте и используйте расширения и прочие полезные инструменты, невозможно эффективно и быстро автоматизировать работу пользователей, если не начать с себя и собственного рабочего процесса и процесса коллег.

Теги:
Хабы:
0
Комментарии5

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн