We have been using Crystal Reports for our Travel CRM with good results for a few years now. We use a completely custom ExtJs based experience for Report viewing which includes a custom user interface for entering report parameters (see screenshot below for an example) and a custom toolbar for managing report navigation and exporting etc (I had blogged about the toolbar earlier here).
I was having considerable problem figuring out a way to specify the connection parameters for my Crystal Reports at runtime that used the Pull model for stuffing data. The problem was that I needed to use a different runtime connection than what was configured for the report at design time. And everytime I did so, the report threw up the form asking the user to fill in the connection parameters (I was using ASP.NET web-based reports but the approach below works on desktop also). Needless to say, this was utterly unprofessional.
I blogged yesterday here, regarding fetching the total Number Of Pages in an ASP.NET web-based Crystal Report in the code-behind. My original motive for doing that was replacing the default Crystal Toolbar with a custom one.
This is the first of a couple of blog entires I am writing for web-based ASP.NET Crystal Reports. Both of these blog entires concentrate on having more control over the actual Report Generation to be able to replace the default Crystal Report toolbar, with a custom one, that integrates better with the overall design of your web application.