Welcome to RE Decoded. My aim with this blog is to share some techniques used in the Raiser’s Edge API to solve day to day problems that the ordinary user may have. Feel free to add your own comments if you have solved a problem differently. Its the best way to learn.
This first entry is less technical than the other entries. I need to break you in gently.
Firstly a note about nomenclature. Blackbaud sell two modules for customizing Raiser’s Edge; RE:VBA and RE:API. An API in general is a collection of classes linking into a product. VBA in general is Visual Basic for Applications, a development environment. So Blackbaud use two names for similar products that outside of the RE world are do not correspond to each other. This can and does lead to confusion. For that reason I rarely refer to the official module names unless I specifically need to distinguish between them. I talk about the API as a collection of classes that can be used by both RE:VBA and RE:API. I will talk about VBA and VB6 as development environments.
I regularly see postings asking how you go about learning to use the API. For me the only way to learn was to be given a practical task to perform. My first encounter with the API was when I worked for JCF in San Francisco. Each constituent was segmented using three specific attributes. They wanted this information to always appear on the constituent Window title banner. The code customised a specific salutation, concatenating the full name with the three attribute values to give the users the information they needed. In user options, records, individual title bar selected the customised salutation type to be shown in the title bar.
This customisation took me ages to get right at the time. But armed with my API help file, the knowledgebase and of course Blackbaud (very) technical support I managed to complete it.
I tend to use these same tools to get me through a solution. Of course some areas of the API reappear time and time again so I have created my own code toolkit to help me; including methods that return top level objects given an ID or return a “Nothing” if not found (opposed to Blackbaud’s own implementation that raises an error if the top level object is not found). When I start working on a new area of the API that I not so familiar with it is back to help file, check out the API FAQ and forums and then try some code. Or just try some code…