Обновление : Альберт Д. Каллал любезно начал обсуждение, и чтобы получить еще несколько мнений, я добавляю награду.
Это нетривиальный вопрос о поддержке устаревшего приложения для меня и двух других разработчиков. Мы не являемся первоначальными разработчиками, и кодовая база состоит из 300 000 строк MFC и бизнес-логики, тесно связанных друг с другом. Мы не знаем каждую строку кода на 100%.
Мы знаем код основных компонентов и знаем, что он плохо написан. Наша цель состоит в том, чтобы провести рефакторинг приложения с 1995 года и до 2010 года. Между нами тремя (в совокупности) достаточно опыта в области архитектуры программного обеспечения и проектирования баз данных, чтобы мы могли исправить компоненты, которые плохо спроектированы в коде или неправильно смоделированы в базы данных, но у нас нет большого опыта работы с современными системами отчетности. Таким образом, мой вопрос (как только вы дойдете до конца ...) касается систем отчетности.
Для всех, кто читает весь этот пост, я благодарен за ваше время. Для любого, кто читает этот пост и отвечает с решениями, опытом (или сочувствием!), Я и благодарен и благодарен.
На работе я унаследовал поддержку базы данных Access 2003, которая содержит приблизительно 250 отчетов (и тысячи вспомогательных запросов), которая служит механизмом отчетности для нашего приложения.
Во всех отчетах есть наборы VBA для конкретного форматирования или добавления дополнительной информации в отчет. По этой причине мы полностью привязаны к платформе Access, поэтому мы не можем использовать такие инструменты, как BIDS, для импорта объектов отчета Access без возни с тем, чтобы отчет отображался одинаково без VBA.
Таким образом, чтобы вырваться из этого решения Access, нам нужно уделить некоторое время рассмотрению каждого отдельного отчета. Это означает, что мы стремимся выбрать лучшее долгосрочное решение, поскольку нам придется пересматривать каждый отчет независимо от выбранной платформы.
Кроме того, в качестве базы данных наши клиенты выбирают Microsoft Access или SQL Server. Это означает, что весь наш SQL должен быть написан с наименьшим общим знаменателем - JET SQL. У нас есть пространство для маневра, чтобы отказаться от поддержки Microsoft Access, но нам нужно было бы подготовить кейс для этого. Если лучшая система отчетности, которую мы можем определить, имеет сильную поддержку SQL Server, но практически не поддерживает Microsoft Access, это ускорит отказ от поддержки Microsoft Access в качестве базы данных.
Общая реализация системы отчетов довольно посредственная: когда мы хотим отобразить отчеты в нашем приложении, мы запускаем процесс Microsoft Access, находим его окно и переопределяем его для нашего приложения, удаляем его стили окна и затем используем Access.Application
COM-интерфейс для вызова некоторого VBA, который создает связанные таблицы с базой данных (либо Microsoft Access MDB, либо базы данных SQL Server), а затем открывает нужный нам отчет. Вероятно, единственная поддерживаемая часть процесса - использование общедоступных COM-интерфейсов, остальное - отвратительный взлом. Другие компоненты в приложении одинаково разочаровывают.
Чтобы «исправить» наше приложение, у нас есть новый план разработки, при котором разработка нашего приложения разбивается (приблизительно) на три части каждый год.
- 4 месяца обновления нашего приложения для поддержки новейшего государственного законодательства в нашей отрасли
- 4 месяца с доставкой новой важной функции
- 4 месяца "консолидации" (исправление того, что сломано)
В настоящее время мы находимся на # 3 (в этом году), и мы действительно хотим использовать время простоя, чтобы исправить приложение, реорганизовав основные компоненты. У нас есть три разработчика, и мы хотим, чтобы AppName v5.0 был выпущен в конце 2012 года (сейчас это AppName v4.12). Это дает нам 36 месяцев на разработку, чтобы согласовать несколько компонентов (пользовательский интерфейс, базовую структуру базы данных, отчетность и т. Д.) В течение трех периодов консолидации, которые у нас будут до этого. Сумма компонентов, которые мы исправим, даст нам v5.0.
Мы определили, что мы хотели бы сделать с большинством компонентов, за исключением нашего механизма отчетов, и я публикую на SO в надежде получить какие-то хорошие идеи или хотя бы почувствовать работу это требуется.
У меня есть две идеи по улучшению нашей системы отчетности. Оба из них требуют умеренного объема работы, и есть одно соображение, которое ни одно из решений не решает полностью: в дополнение к разрабатываемым нами отчетам наши клиенты также имеют возможность запрашивать индивидуальную разработку отчетов. Они ориентированы на клиента, мы берем их базу данных Access, дополняем ее своим отчетом и возвращаем его клиенту. Там есть сотни уникальных отчетов - непригодных для использования, если мы выключим старую систему. (И мы должны в конечном итоге отключить старую систему - мы не знаем, как долго мы сможем возиться с окном Microsoft Access, чтобы оно выглядело как встроенный отчет. У нас уже есть два отдельных кода пути для Access 2003 и 2007. Что делать, если мы не можем взломать путь к коду для Access 2010, и все наши клиенты должны использовать Access 2007?)
Для обеих идей намерение состоит в том, чтобы прекратить поддержку нашей нынешней системы отчетности и позволить ей работать столько, сколько будет работать без обслуживания. Может быть, мы сможем взломать поддержку Access 2010 и Access 2014, а разработанные отчеты клиентов продолжатся еще 5 лет. Со временем мы перенесем наиболее часто используемые отчеты из старой базы данных Access в их новый формат.
Идея 1: Microsoft.Reporting.WinForms.ReportViewer
Первая идея - написать оболочку для элемента управления ReportViewer
в качестве механизма отчетов о замене.
Нам нужно было бы переместить проект на C ++ / CLI (уже на платах), и вместо того, чтобы запускать весь процесс каждый раз, когда нам нужно было просмотреть отчет, мы могли бы просто создать экземпляр этого элемента управления. Преимуществом этого является то, что файлы RDLC
, содержащие отчеты, намного легче контролировать версии в Subversion, чем база данных Access 2003, которую мы в настоящее время имеем (мы используем Visual SourceSafe, потому что инструменты для интеграции SVN с Access не работают хорошо размер нашей базы данных Access). Визуальный дизайнер для файлов RDLC
также хорошо интегрирован в Visual Studio.
Это скорее эволюционное, нежели революционное изменение в том, как мы создаем отчеты, элемент управления ReportViewer
примет файл RDLC
с макетом отчета, а наше приложение позаботится о запросе данных. Поскольку нашей базой данных может быть SQL Server или Microsoft Access, нам все равно придется писать простой JET SQL. Мы получаем более качественные отчеты (детализация выглядит лучше), более мощные средства разработки и более простой контроль версий, но стоит ли это усилий?
Идея 2. Службы отчетов SQL Server и SharePoint 2010 со службами доступа
Вторая идея состоит в том, чтобы убить Access как платформу базы данных и перенести всех наших клиентов на SQL Server (мы разместили экземпляры нашего приложения для тех клиентов, у которых нет навыков настройки собственных экземпляров SQL Server). , После их миграции мы будем использовать службы отчетов SQL Server в качестве механизма отчетов с элементом управления ReportViewer
в режиме рендеринга сервера.
В дополнение к службам отчетов SQL Server мне интересно узнать, можно ли использовать SharePoint 2010 со службами доступа для быстрой миграции существующих отчетов Access в более управляемый формат. Мы возьмем отчет Access, который использует клиент, преобразуем его в веб-отчет Access, а затем сделаем его доступным для него на сайте SharePoint. Это будет только для наших размещенных клиентов, но если мы найдем способ быстро разобраться с VBA из отчетов клиентов, мы сможем перелистать несколько сотен пользовательских отчетов, которые есть у наших клиентов.
Меня также интересует возможность использовать форму веб-навигации Access для использования в качестве портала для всех наших отчетов. Внутри нашего приложения мы разместим веб-браузер, который предоставит клиентам доступ к их собственным отчетам и нашему стандартному набору.
Мы бы получили все преимущества Idea # 1, а также возможность писать на полном Transact SQL, портале отчетов и (надеюсь) разумном пути обновления для собственных отчетов клиентов.
Итак, мой вопрос: правильно ли я поступаю? Являются ли эти жизнеспособные решения для современных систем отчетности или смехотворными? Мы настоятельно рекомендуем использовать элемент управления ReportViewer
либо в режиме рендеринга клиента, где наше приложение обрабатывает данные, либо в режиме рендеринга сервера вместе с SQL Server, но существуют ли такие системы отчетности, как Crystal Reports, которые предлагают более качественные отчеты и более эффективную миграцию пути к нашим устаревшим отчетам Access?
Если бы у вас было до 36 месяцев времени на разработку, как бы вы это сделали?