Update : Albert D. Callal kindly started the discussion, and to get a few more opinions, I add generosity.
This is a non-trivial question about serving an outdated application and two other developers. We are not the original developers, and the code base is 300,000 lines of MFC and business logic, closely related to each other. We do not know every line of code 100%.
We know the code for the main components, and we know that it is poorly written. Our goal is to reorganize the application from 1995 to 2010. Between the three of us, we have (collectively) sufficient experience in the field of software architecture and database design so that we can fix components that are poorly designed in the code or incorrectly modeled into databases, but we do not have much experience working with modern reporting systems . So my question (as soon as you get to the end ...) is about reporting systems.
For everyone who reads this entire post, I appreciate your time. For anyone who reads this post and answers decisions, experiences (or empathy!), I am grateful and grateful.
At work, I inherited the maintenance of an Access 2003 database containing about 250 reports (and thousands of supporting queries) that act as a reporting mechanism for our application.
All reports have VBA summaries in them for specific formatting or pulling additional information into the report. For this reason, we are completely locked on the Access platform, we cannot use tools such as BIDS to import Access report objects without interfering to make the report the same without VBA.
So, to get out of this Access solution, we need to spend some time reviewing each individual report. This means that we strive to choose the best long-term solution, as we will have to process each report regardless of the platform that we choose.
In addition, our customers have the choice of Microsoft Access or SQL Server as the database. This means that all of our SQL must be written with the lowest common denominator - JET SQL. We have room to maneuver to refuse support for Microsoft Access, but we will need to create a case for it. If the best reporting system that we can identify has strong SQL Server support but little or no Microsoft Access support, this will speed up the abandonment of Microsoft Access support as a database.
The overall reporting system implementation is rather mediocre, when we want to display the reports in our application, we start the Microsoft Access process, find its window and re-call it in our application, remove its window styles, and then use Access.Application COM to call some VBA, which creates linked databases in a database (either Microsoft Access MDB or SQL Server database) and then opens the required report. Probably the only supported part of the process is the use of open COM interfaces, the rest is an ugly hack. Other components in the application are no less impressive.
In order to “fix” our application, we have a new development plan, with the development of our application each year is divided into three parts.
- 4 months, updating our application to support the latest state legislation in our industry.
- 4 months providing an important new feature.
- 4 months "consolidation" (correction of what is broken)
We are now at # 3 (this year), and we really want to take advantage of the downtime to fix the application, refactoring the main components. We have three developers, and we want AppName v5.0 to be released in late 2012 (currently AppName v4.12). This gives us 36 months of development efforts for coordination between several components (user interface, basic database structure, reporting, etc.) for the three consolidation periods that we will have before. The sum of the components that we fix will give us v5.0.
We figured out what we would like to do with most of the components besides our reporting mechanism, and I send it to SO hoping to get good ideas or at least get a feel for what is required.
I have two ideas for improving our reporting system. Both of them are associated with a moderate amount of work, and there is one consideration that not a single solution is fully related: in addition to the reports that we develop, our clients also have the opportunity to request individual development of reports. They are customer-oriented, we take their Access database, supplement it with our report and return it to the client. There are hundreds of unique reports - unsuitable if we turned off the old system. (And we finally need to turn off the old system - we don’t know how much more we can work with the Microsoft Access window to look like an integrated report. We already have two different access path codes for Access 2003 and 2007. What to do, if we cannot crack the code for Access 2010, and all our customers should use Access 2007?)
For both ideas, we intend to stop supporting our current reporting system and let it work as long as it is out of service. Perhaps we can hack support for Access 2010 and Access 2014, and the customer reports that have been developed continue to fit into another 5 years. Over time, we moved the most commonly used reports from the old Access database to their new format.
Idea 1: Microsoft.Reporting.WinForms.ReportViewer
The first idea is to write a wrapper around the ReportViewer control as a reporting mechanism.
We need to move the project to C ++ / CLI (already on the cards), and instead of starting the whole process every time we needed to view the report, we could just create an instance of this control. The bonus of this is that the RDLC files containing the reports are much easier to control the version in Subversion than the Access 2003 database we currently have (we use Visual SourceSafe, because the tools for integrating SVN with Access do not work well with the size of our Access Databases). The visual designer for RDLC files RDLC also well integrated into Visual Studio.
This is an evolutionary rather than revolutionary change in the way the report is maintained, the ReportViewer control will accept the RDLC file with the report layout, and our application will take care of the data request. Since our database may be SQL Server or Microsoft Access, we still have to write plain JET SQL. We get better reporting (drilling looks good), stronger development tools and easier version control, but is it worth the effort?
Idea 2: SQL Server and SharePoint 2010 Reporting Services with Access Services
The second idea is to kill Access as a database platform and migrate all of our clients to SQL Server (we placed the instances of our application for those clients who do not have the skill set to install their own instances of SQL Server). As soon as they are ported, we will use the services SQL Server reporting as a reporting mechanism using the ReportViewer control in server rendering mode.
In addition to SQL Server Reporting Services, I’m interested in finding out if SharePoint 2010 can quickly migrate existing Access reports to a more manageable format using Access Services . We will take the Access report that the client uses, convert it into an Access web report, and make it available to them on the SharePoint site. This would be only for our hosting clients, but if we find a way to quickly process VBA from client reports, we can try out several hundred individual reports of our clients.
I am also interested in the possibility of using the access form to the web access interface to act as a portal for all our reports. In our application, we will have a web browser control that will provide customers with access to their own reports and our standard.
We would get all the benefits of Idea # 1 plus the ability to fully write Transact SQL, a reporting portal and (hopefully) a reasonable upgrade path for our own customer reports.
So my question is: am I going to do it right? Are these viable solutions for modern reporting systems or ridiculous? We have a strong preference for using the ReportViewer control either in client rendering mode, where our application processes data, or in server rendering mode in combination with SQL Server, but are there reporting systems like Crystal Reports that offer better reporting and better migration paths for our legacy Access reports?
If you had up to 36 months of developer time, how would you do it?