TechSpoken

"Any ideas?" is the most frequently-asked question in technical forums. My answer is: yes.

Reporting Convergences: Part One in Many

The October 2006 VFP Sedna/SP2 Preview included the first Reporting System enhancements that folks could play with.  While our spec was reasonably clear and complete and had been available for some time, there were no docs. (As of this writing, there still isn't very much.)  C and I had demo'd some stuff at the Advisor Devcon a few months earlier, and had arranged with Martin Haluza and Igor Vit to provide a Flash demonstration for the Prague conference, highlighting the new features. 

Based on Igor's advice and feedback, our Flash presentation incorporated C's Devcon demonstration of how you create a custom reporting control, which used the example of a colored bar rendered directly to the report, as well as my Devcon demo of using dynamic sizing with a rectangle to display a visual progress bar metric element. Both examples were relatively trivial, but C's in particular gave a good walkthrough of how you perform some critical reporting-extension tasks:

  • how to render directly to the report surface at runtime;
  • how you use that control at design-time (give it instructions, store to the FRX); and
  • how you incorporate the control into the extensible ReportBuilder interface so other users can do it with ease and grace.

We posted the Flash file to coincide with the October 2006 CTP (you can see it here: http://spacefold.com/lisa/sp2demo).  Having worked out the primacy of these three principles, I set about incorporating them into my Frankfurt Devcon  presentation that year. 

While working on what to say and how to say it... I think I just Google'd a GDI+ command or something when I came across an MSDN article by Teo Lachev titled Jazz Up Your Data Using Custom Report Items In SQL Server Reporting Services, which was posted that same month.

As you'll easily see, Teo's article covers pretty much the same ground, except that the example for the custom control is also a metric indicator (a progress bar). It makes a heck of a lot of sense to demonstrate both techniques in one example, in both reporting environments -- even though VFP had another facility for changing the size of a rectangle to create a rectangle, and that Reporting Services almost certainly does too (see the In-Line Table Chart example in this other MSDN article).  

Teo's example and his walkthrough drove home  the essential report-extension tasks I've listed above, and used remarkably similar techniques to accomplish them -- including pretty much the same exact lines of GDI+ rendering code, a similar method of describing the extension in XML within the report definition, and so on.

Wow! 

So I pointed VFP folks at Teo's article, both at Frankfurt and later at OzFox.  It was a great way of emphasizing just how standard our in-VFP approach to reporting extensions was, how these were the problems you needed to solve and a likely way of solving them no matter where and how you worked, as a way of winding up that section of the presentation.  And I thought it ended there, just one in a long string of interesting development convergences between Reporting Services and VFP Reporting that I expect to discuss from time to time in this blog.

But it didn't.  About a month after OzFox, Kaisa M. Lindahl Lervik posted a question about how one might fulfill a certain requirement in SQL Server Reporting Services, and I thought "you could write a custom control to do that!". So I picked up Teo's article again... and I wrote one.  I figured I ought to prove the point of the standard nature of the task between the two environments by example and, in most ways, I accomplished that goal about one day into the effort.  And I thought it ended there.

But it didn't. I ended up writing a more full-fledged SQL Server Reporting Services developer's tool, in which the custom control plays a more-or-less supporting role.  I'm still polishing my proto-docs, but will post them and some of the stuff I learned in writing this thing pretty soon.