Archive for January, 2017
There are many ways to deploy Crystal Reports to users. I normally lean toward the simpler and less expensive options, like locally installed viewers, or scheduled delivery of PDF output. But there are environments where a web based option is necessary. The “official” options from SAP are Crystal (Reports) Server and BO Enterprise. But there are other, less expensive products out there that also web delivery of Crystal Reports. These third party products allow your users to run and view reports from a browser. You can also centrally manage your report deployment from a browser.
I have created a page on my blog that lists and compares these products, and I update it every January. This year the list features 10 products, three of which are being listed for the first time:
Crystal Reports Server – a traditional Web portal
Report Runner Web Portal – a traditional Web portal
IntelliFront BI – a traditional Web portal
Ripplestone – a traditional Web portal
RVweb – a traditional Web portal
rePORTAL CR – a traditional Web portal
ReCrystallize Pro – a launch page generator for the web
ReCrystallize Server – a server-based web viewer
Report Launch – a bridge between BO server products and server based applications
RapidStack – Web Portal service built around Business Objects Enterprise
The blog page mentioned above contains a brief rundown on what each product does and provides links to all of the product web sites. I have also posted a feature matrix (xls) that shows some of the specifics for comparison, including prices. This year there are several new lines in the matrix. They show which tools provide workflow/BPA support, Web APIs, password management and menu localization. If you have any feedback to share on these tools I would be happy to hear from you.
This was the first time I found a practical use for renaming a report object, a feature that has been available since 2002.
Every object placed on a report is given a unique “object name”. These names appear in the Report Explorer (View > Report Explorer) which lists all of the objects and where they are placed. The default object name for fields is the name of the field with a number after it. The number makes each object name unique, since the same field can be placed on the report multiple times. Graphic objects are also given object names. For instance, a series of lines would have the default names of Line1, Line2, etc.
In a report I did last week I needed to show the status of each transaction by displaying a small image that represented each status. This required stacking several images in the same place and suppressing most of them so that only one was visible at a time. The challenge was that once the images were stacked it was very difficult to determine if the correct one was selected. All the object names were Picture1, Picture2, etc.
Fortunately, you are allowed to modify the object name, as long as it is unique. To rename an object you right-click on the object, select “Format Object” and go to the common tab. The object name is at the top. I renamed each image with the status it represented. Now when I select an object in the Report Explorer I know which one it is and can apply the correct suppress condition.
Notes:
1) Lines and boxes do not have a common tab, so there is no way to change the object names.
2) The Report Explorer was introduced with version 9 and that is the first version that allowed us to view and edit object names. If you open a report from CRv8 or older the object names will be more generic (Field1, Field2, etc). However if you copy and paste one of these objects while in a later version the newly created object will be named like current objects.
Group-specific subreports are always a last resort for me, because they hit the database multiple times and usually that slows things down. Sometimes, though, they are necessary.
I recently had to create a report with about 100 groups, and each group needed a subreport that ran a separate query returning a very large dataset. I was concerned about the time it would take to hit the database 100 extra times. I was trying to find a way to read the data just once for all the groups and yet still have each subreport provide group-specific data.
I knew that when you move an un-linked subreport from the report header to the group header it only refreshes in the first group and is simply repeated for every other group. If I could fool Crystal into thinking that my subreport was the same query for all groups, then it should only run once. So I changed the SQL in the subreport to return the data for all groups, and then added a parameter to select one group value at a time. I found that when I placed the parameter in the Record Selection Formula Crystal would refresh the subreport with every group. But if I put the same parameter in the “Saved Data” selection formula, which forces it to be evaluated locally, the subreport would not refresh for each group. I still get group-specific data for each group, but only one hit to the database.
Note – the “Saved-Data” record selection formula was introduced in Crystal Reports 2008 (v12). If you are using Crystal Reports XI (v11) or an older version you will have to use an alternative method that is a bit more complicated. For instance you could pass the group parameter to a conditional formula and use that to ensure that your totals are group specific. Then use group selection to eliminate all the zero groups. Not nearly as elegant but workable. Call to schedule a session if you would like more details on this option.
Starting this month, the prices for the “Expert” series of educational PDFs have all been cut in half. So if you were hesitant, maybe the new prices will make it easier to try them out.
Check out the full list of titles here along with the new prices.