RE8, Blackbaud Enterprise CRM and the case for Crystal

There has been much discussion on various forums and between different organisation about the rumour that Crystal Reports is not going to be supported on the Infinity platform. While I don’t have any inside information from Blackbaud about this I can dispel a couple of myths.

Currently in Raiser’s Edge 7, Crystal Reports is used as the reporting engine for all canned reports. Blackbaud use components that feed their data into various Crystal Reports so that you need merely click on a button and the report appears. These reports have a predefined format and although the user can change some aspects of this it is very limited.

In RE8, BBEC and the Infinity platform the canned reports do not use Crystal Reports as the reporting engine but rather SQL Server Reporting Services (SSRS). This is server based and comes with SQL Server. Blackbaud currently bundles Crystal Reports with their software but this version is client based. To bundle the server version would clearly mean a greater expense for them (and ultimately their customers).

When it comes to custom reports there is some uncertainty. I am not sure how the Infinity platform handles custom reporting. I am sure that there will be some kind of function to integrate custom reports with RE8 but most probably via SSRS.

There is a lot of investment in Crystal in the community so it is obviously of concern to think that Crystal will no longer be used. This, though is not strictly the case. It should be quite possible to use Crystal against the BBEC and RE8 database. After all Crystal can run against any kind of database. Many RE7 users develop reports that run directly off of the database rather than using the custom mechanism inside of RE. This offers much more flexibility.

One other possibility that I am currently looking into is developing a Crystal Report engine to integrate with the Infinity platform. That way data can be exported from RE8 and BBEC and linked to a Crystal Report in the same way as is currently the case in RE7. It does seem a shame to waste all the Crystal knowledge out there. Watch this space…

What are your thoughts on the shift to SSRS? Do you currently use SSRS with RE7 or other products and how does it compare to Crystal Reports. Let us know your thoughts in the comments below.

Looking up a constituent

Whenever I write a bespoke customisation for a client that needs to look up a constituent based on some biographical information I normally use the functionality available behind the scenes in IDLookup. If you are unfamiliar with IDLookup, it allows users to feed in an Excel or CSV file of names, addresses, aliases, attributes and all sorts of biographical information. Then based on criteria that you define, it will look to see if one or more constituents already exist in The Raiser’s Edge. I use much of the look-up functionality in other projects simply because Blackbaud chose not to make this functionality easily available. There is no back-end interface to their regular constituent look-up screen which is a real shame. The nearest feature is the IBBRecordFinder interface.

Continue reading Looking up a constituent

Crystal Reports in need of padding

I don’t write that many Crystal Reports but when I do it is a refreshing change. They integrate nicely with Raiser’s Edge and as I showed with my previous post you can write code that will open up a Crystal Report and run it without having to run an export first. You can use any data source instead of a Raiser’s Edge export. The formula language is quite intuitive if you have worked with VBA, VB6 or VB.NET (and simple enough for those with any other mainstream language experience). However, the other day I need to pad a number with some leading zero. In VB.NET there is the String.LeftPad method which works really well. No such luck with Crystal.

Continue reading Crystal Reports in need of padding

Off Topic – Praise for Evohosting

This is completely off topic but I want to shower my web hosting provider with praise. Why now? Well no particular reason other than I have been thinking about doing it for a while. When I lived in the States I had my website on one of the big providers. It was OK but when I ran into problems they could not fix it, they left me waiting and my site was down. It left a bit of a bad feeling.

I now have my website with Evohosting and have done for the past several years. The contrast could not be different. I am not quite sure how large they are but they give the impression of being very personal. In my previous hosting their emails would be signed off as “support staff” or something equally generic and impersonal. With Evohosting I know the names of those that contact me. Their response times to queries are always very fast and I have yet had a problem that they could not help solve. I am not sure about how much these things should cost but they have always struck me as being very competitively priced for the packages that they provide and certainly for the service that they offer.

In a world where people rant and have a go at bad service Evohosting is a refreshing change. Thanks

Opening a Crystal Report from code (revisited)

In an earlier post I looked at the way in which it is possible to open up a Crystal Report from VB or VBA code in The Raiser’s Edge. That was with version 8.5 of Crystal Reports. I tried to do the same thing recently with a report created in Crystal Reports 11 and the code broke. I rewrote the code using a newer object and technique.

Continue reading Opening a Crystal Report from code (revisited)

How many unique IDs should a Raiser’s Edge Consituent have?

Normally when we look up at a Raiser’s Edge constituent we use a variety of identifiers to find the specific record we are looking for. It may be that we are using biographical data such as surname, first name and parts of their address. To find a one unique record we need to search by unique identifier. The most obvious that we think of is the constituent Id. This is the most common unique Id available to us on the constituent search screen. Of course there is the national insurance number (also known as social security number in the US), and the membership Id (for those with the optional Membership module).

Continue reading How many unique IDs should a Raiser’s Edge Consituent have?

Accessing other parallel VBA DLLs in The Raiser’s Edge

One of the methods for writing VBA code that fires when, say a constituent is saved, is to write a VBA DLL. I have covered this previously so I won’t go into details in this post. However what do you do if you need one VBA DLL to talk to another one? For example if I make a change to a record in one VBA DLL and have installed Zeidman Development’s Audit Trail application (excuse me for the gratuitous plug there) how do I tell the audit trail to make a note of this change? The VBA events are only fired when the Raiser’s Edge GUI opens up or saves a record and not when the code does so.

Continue reading Accessing other parallel VBA DLLs in The Raiser’s Edge

Raiser’s Edge Book

I have just seen a new book about to be released called:

Fundraising with the Raiser’s Edge: A Non-Technical Guide by Bill Connors. Bill was my first inspiration to go into business with The Raiser’s Edge when he was a consultant at Blackbaud and visited the Jewish Community Federation of San Francisco where I worked at the time. He really inspired me to take my development work further. I have never met anyone with a better knowledge of The Raiser’s Edge and fundraising combined and no doubt this will be reflected in his book.

From Amazon.com

or

From Amazon.co.uk

Most definitely a recommended read.

Custom where clause with Relationships

Custom where clauses are  a great way of filtering the results of all the top object collections (where the method exists). However there are some pitfalls. One such pitfall can be found when you try to write sub selects to link to other tables. For example, say you want to find all the individual relation records that have the surname “Zeidman” and are spouses. You would write a sub select in the custom where clause as shown below:

 Continue reading Custom where clause with Relationships