Category Archives: Advanced

Blackbaud eCRM and an Unusual Timeout Error

As I mentioned in a previous post I have been working on some sample demonstration material for The Blackbaud Conferences in London and Washington DC. I got a timeout error previously on saving data in a custom form. I was able to fix it entirely by fluke without knowing how I did it. However now I have got it again and it has been driving me crazy.

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)

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

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 

The Raiser’s Edge API: VB.NET versus C#

I am sure that there are a many people out there who still use VB6 when working with The Raiser’s Edge API but it is more and more common that you need to write .NET code and indeed want to write .NET code. There are several reasons for this but for me it is simply that the Visual Studio 2008 is a thousand time better than the VB6 development environment. I cringe every time I have to go back to a piece of old code or to the VBA environment. What really interests me is the choice of VB.NET or C# for development.

Continue reading The Raiser’s Edge API: VB.NET versus C#

Installing a plug-in more manually than previously

I have covered this a couple of time before (hence the more and more obscure title) in various posts; here and here but I have been preparing IDLookup for install on Blackbaud’s OnDemand hosting service. Among several requirements is the fact that you have to install the plug-ins manually and not through an installer.

Continue reading Installing a plug-in more manually than previously

Crash when Filtering on Missing Constituent Codes

I wrote some code for a client a while back and tested it thoroughly and everything worked fine. There was somewhat of a delay before the client was due to implement it and when they ran the application it crashed at the beginning. After some investigation we worked out what was going on. The code gathered together a collection of constituents that had two constituent codes. Only now one of them was no longer in The Raiser’s Edge. Continue reading Crash when Filtering on Missing Constituent Codes

Is the field required?

In Config, Fields it is possible to set your own fields to be required or not. For example if I wanted every organisation record in Raiser’s Edge to have a profession then I would tick the profession tick box as being required. In order to future proof my code it is necessary to check to see which fields are required so that when creating a new organization I can also prompt for the required fields too. This is not such a difficult task really only that the code below does not work as expected.

 Continue reading Is the field required? 

Changing Raiser’s Edge skin part 2

When you are supplied all the dlls that an application uses and these are all COM object it is possible to discover things about the application that you would otherwise not normally be able to do. Some people may call this “hacking” but others like myself would prefer the less confrontational description of “investigating”

Continue reading Changing Raiser’s Edge skin part 2