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.
You create an IBBRecordInterface object by calling the CreateServiceObject on the REServices object and selecting bbsoRecordFinder as the input parameter. This gives you access to what is, essentially, the quick find interface. You supply the data as you would into the Quick Find box on the home page and the IBBRecordFinder object attempts to look up the data. If the user preference is set to accept a constituent id then IBBRecordFinder will try to find a record with that constituent id. If it is set to find a “surname, first name” or a “first name surname” combination it will try to look that up too. If it does not find anything or if it finds duplicates then the search screen will appear. You can specify that you don’t want there to be a GUI element to the search in which case it will not appear.
One caveat that I found with this is that if my settings are looking for “surname, first name” and I only use “Zeidman” as my input, even if there is only one Zeidman in the system it will still bring up the search screen. If I use “Zeidman, David” then it will find it without the search screen. What is more if I simply use “Zeidman, D” no search screen will be used (as long as the exact match tick box is not selected). For whatever reason it seems to require a first name or initial to find the result exactly.
How do you look up records programmatically? Do you have a better method? Let us know in the comments.