BBCon 2015 Sessions to Watch out for

For the past quite a few years we have attended the Blackbaud Conference for Non-profits otherwise known as BBCon. This year we will be there again exhibiting and speaking. Each year we look through the sessions and recommend those that we think will be among the highlights. So in no particular order (other than my session is first in the list because it is the one everybody has to see)…

Performance Management Using Audit Trail

David Zeidman, Zeidman Development and Mohammed Dasser, University of Central Florida Foundation.

This session will show how Audit Trail can be used to manage an organization’s workflow.  David will give a brief overview of life with and without Audit Trail as well as some of the latest innovations to track performance in RE. Mohammed describes how they have aggregated Audit Trail data in order to determine how best to prioritize resources at UCF and convince others of the need using Tableau.


Bill and Ed’s Excellent Adventure…in Raiser’s Edge™

Bill Connors and Ed Hohlbein

How could you not want to attend a session with a name like this. However there is much more to it than just the name. Bill and Ed have had sessions for several years now and each time I hear them both speak, their knowledge and expertise outstand me time and time again. Well worth a visit.

Meet the Early Raiser’s Edge NXT™ Adopters

Meghan Gauen, Children’s Home & Aid and Kelsi Griffith, Grace College

We have heard a lot from Blackbaud about how NXT will improve our fundraising world but it really is interesting to see and hear exactly how it is being used in a real world scenario form real non-profits.

Looking beyond Raiser’s Edge™ 7 for Large Organizations

Linton Myers, Allison Van Diest, Kurt Barnes and Jim Ballou, Blackbaud

I have heard many larger organizations say that they are struggling with RE7. Some have been contemplating moving away from Blackbaud because they do not believe NXT will solve their problems. I have high hopes for BBCRM solving many issues of volume but am uncertain as to how large an organization needs to be to warrant the investment. Hoping this session will answer the questions.

Introduction to NXT API & Integrations

Dan Bowman, Ben Lambert and Jim Ballou, Blackbaud

What would a coding blog be without reference to a coding session. I have been involved in some of the NXT API discovery sessions and am very impressed with what I have so far seen. I hope you will be too.

Nonprofit Tech in 2025

Steve MacLaughlin, Blackbaud and Donna Wilkins, Charity Dynamics

I am always fascinated by futurology. 2025, while sounding very much in the future, is only ten years away and it will be interesting to hear what our speakers think will be the technology of choice for non-profits, for those who give to non-profits and those that consume non-profit services.

Raiser’s Edge and Raiser’s Edge NXT Integration: Getting the Most from Data Across Your Organization

Emily Dalton and Kevin Kreamer, Omatic Software

I have known Emily for almost ten years and heard her speak on numerous occasions. Her knowledge and grasp of the non-profit world from having worked at Blackbaud and been so involved with Raiser’s Edge make me believe that, despite working for, and no doubt pushing competing products, this will be an insightful session. (I am sure Kevin is also great)

How to Maximize Engagement Using Graduway and The Raiser’s Edge Together

Daniel Cohen, Graduway

Having worked with Graduway for this past year I have been impressed by their product and how it can transform the quality of data being brought into Raiser’s Edge and enhance their offering to school’s alumni.

Adding an Education Record to a Non-Constituent Individual

I have been struggling to find a way to a an education record to a non-constituent individual relationship. There is a Blackbaud knowledgebase article here that outlines how you add an education relationship but it takes a lot for granted. Here is the gist of it:

Dim oEdu As CEducation2
Set oEdu = New CEducation2
oEdu.Init REApplication.SessionContext
With oEdu
   .Fields(EDUCATION2_fld_RECORD_ID) = 678   'Selects the record to add the Education record to
   .Fields(EDUCATION2_fld_SCHOOL_ID) = "Berry College"
End With

However where does the 678 come from? For a constituent this is simple. It would be the constituent system id found under the Records_fld_Id field.

However what would it be for a non-constituent individual relationship. After all they can also have education relationship records.

I tried the field Individual2_fld_Id but the error I got back told me that I could not add an education to an organization record! Not very helpful.

In the end, with a bit of trial and error I worked out that you need to put the field Individual2_fld_Relation_id.

This is the id for the corresponding entry in the Records table which consists of both constituents and non-constituents.

Hope this helps somebody.


We have always had a product that imports data into The Raiser’s Edge. We would regularly customise it for non-profits so that it would adhere to their business rules and bring in their data in a format that they wanted it to. Then came along the somewhat more well known import tool for the Raiser’s Edge (do I really have to mention names?) and our quiet workhorse was, not quite put down, but put to rest.

In recent years however we have had some requests to bring it back. The reason stems mainly from our Audit Trail and Validatrix clients who regularly use the other well known product but would also like to save all the changes that are made in Audit Trail and prevent data from entering Raiser’s Edge making use of their Validatrix business rules.

We also had a number of third party suppliers of data ask us the best way to get data into RE and could we help them.

So a plan was formed to resurrect our long forgotten import tool, integrate Audit Trail and Validatrix and update it with the best bits from IDLookup and The Mergician. We also did what only we do best. We integrated it directly with other third party data sources.  And so was born Importacular!

We built, for want of a better word, a plug-in architecture so that adding new third party data sources does not mean a release of the new version of the application. Instead we could add new data sources remotely to the application with the end user deciding to activate them and install the client assemblies. Once you were used to the main application, selecting a new data source component would be a breeze. It would follow the same pattern as all the other data sources that you had used previously.

We are really excited about the future for Importacular and being able to help non-profits of all sizes to get their data into Raiser’s Edge without pulling their hair out over Excel and CSV files.

Working with Phones/Email without addresses in Raiser’s Edge 7.94

Prior to the release of The Raiser’s Edge version 7.94 I was working with all of our products to ensure compatibility with this latest version. If you have not heard (and if you have not heard where have you been hiding), this release of RE removes phones and emails from physical addresses.

When the concept of emails was new, it was possible that you would have an email address tied to your telephone provider or an email address specific to your place of work.  Your phone would either be at home or at work. Having these connnected to your physical address made sense. However it quickly became aparent that with the arrival of mobile phones and of email addresses that were accessible no matter where you were located, phones and emails (and for that matter all types of communication links) should be tied directly to the constituent record and not to a physical address. This is what has happened with the release of RE7.94.

This is a big shift and in terms of developing applications, we have had to allow for both possibilities so that our programs are compatible with users still on 7.93 and below and those that have made the leap over to 7.94.

The good news is that the old way of doing things still works in 7.94. You can still access phones via the CConstitAddress.Phones collection for an address. However you will probably want to access them how they are intended… Free from addresses.

This is done using the new interface IBBPhonesParent. This is implemented by CRecord, CIndividual2 and COrganization2. The collection of phones is a CConstitPhones object which contains the usual methods. You can iterate the collection to give you one CConstitPhone object but here is the problem.

For reasons that I don’t fully understand (I was told due to binary compatibility reasons) there are no properties or methods on the CConstitPhone object. Instead you have to convert this object to an IBBDataObject in order to access the Fields property. This is a real pain but to save myself some trouble I put together two extension methods for the CConstitPhone object which does this for me. (Unfortunately extension properties do not exist so that is why I cannot simply create an exact corresponding Fields properties. Those working with C# will be familiar with this as there is not a Fields property but rather  get_Fields and set_Fields methods)

<System.Runtime.CompilerServices.Extension()> _
Public Function Fields(ByVal phone As CConstitPhone, fieldConstant As ECONSTITPHONEFIELDS) As Object
   Dim dataobject As IBBDataObject = CType(phone, IBBDataObject)
   Return dataobject.Fields(fieldConstant)
End Function
<System.Runtime.CompilerServices.Extension()> _
Public Sub Fields(ByVal phone As CConstitPhone, fieldConstant As ECONSTITPHONEFIELDS, value As Object)
    Dim dataobject As IBBDataObject = CType(phone, IBBDataObject)
    dataobject.Fields(fieldConstant) = value
End Sub

With these extension method you can simply access the Fields methods on a CConstitPhone object in almost the same way as you would with other objects.

So here is an example of creating a new phone on a constituent record using the above extension code.

Dim constit As CRecord = GetConstituent()
Dim phonesParent As IBBPhonesParent
Dim phones As CConstitPhones
Dim phone As CConstitPhone

phonesParent = CType(constit, IBBPhonesParent)
phones = phonesParent.Phones
phone = phones.Add()

constit = Nothing

What would I like to see from The Raiser’s Edge NXT API?

Everybody always says how rubbish the RE7 API is. I would have to disagree with them thoroughly. There are some serious drawbacks such as not being able to access it directly via the cloud but in terms of coverage it is probably one of the best APIs I have come across. Not only does it cover the data model (which is enormous in itself), it also covers very many areas of the GUI too. Sure there are issues with stability and with lack of documentation but thankfully I have managed to overcome both of these and have been very happy with the API.

So what are my expectations for The Raiser’s Edge NXT API? I don’t have any inside knowledge about this other than what I know is technically possible and what is feasible to do within a reasonable timeframe. I cannot foresee the possibility of asking the API for a constituent form in order to enter data into as you can with RE7. The API will be a REST based data model so that I can ask for a constituent and I will be returned a JSON (or possibly XML) based object to work with. Now if this were RE7 that constituent object would consist of layer upon layer of nested arrays of data. That is how the current CRecord object is but in the REST model this is unwieldy. It may be like that. But hopefully I will also be able to request, for example,  all notes for a given constituent or all attributes. Equally I would like to be able to simply update one note or one attribute rather than the whole object.

One area which is severely lacking in RE7 is the ability to search for data in an easy manner. My workaround has always been to create a SQL query and interrogate the database directly. This is unlikely to be possible with RE NXT. However there are mechanisms for doing this via REST. With other systems (including the CRM system that we use internally) we make use of OData.  This protocol gives me access to individual properties within a REST webservice. For example if I wanted to find a constituent with the last name of Zeidman I would do something like this:$filter=LastName eq ‘Zeidman’

Of course you would have to URLEncode it so that it would look something more like this:$filter%3DLastName+eq+%27Zeidman%27

OData is extremely powerful as I am able to search child objects too and not just the root. This is extremely difficult to do with RE7 as it requires complex SQL to do so. OData is not just for searching but also for pulling out individual properties too rather than whole objects. This is especially useful of the payload is large (as the constituent object is).

One area that is very power with the RE7 API is the ability to determine an instance of RE7’s meta data which varies between organizations. For example we can ask the API what attributes are available to us to use or what are the entries in the notepad type code table. As a third party developer this is essential. If I am writing software for one organisation I could simply hard code the use of one attribute as I know it is going to be there. However unless I can offer the end user the ability to map fields from a third party application back to RE, the application that I am developing can never be sufficiently generic.

Blackbaud’s model of bringing RE NXT online gradually in phases based on roles is a good one. It means that organizations can retain their third party integrations and customizations (assuming the previous restrictions within the hosting environment are lifted). I can envisage the API as being simply a phase in the rollout of NXT and I for one am very excited about that!

EDIT: Read more about RE NXT in general here:

Global Merge More Accurately with The Mergician

We have just released an update to our successful global merge utility The Mergician. We have always had a way of searching for records in The Raiser’s Edge using complex and flexible criteria. IDLookup was one of the first plug-ins that we ever wrote and since it was first developed it has grown to contain some of the most powerful look up criteria around. A year or two ago we created IDLookup Dedupe, making use of IDLookup to search your database for duplicates. Well now we have gone one step further and brought all of this flexible, customization and downright lovely criteria lookup into The Mergician giving everybody the power to choose exactly how they dedupe their data.

There are 20 fields to choose from, many of which you can decide whether or not to search by the whole word or a specific number of characters. You can search using soundex (where names like Johnson and Jonson would be matched), you can search using first name and address line equivalents so that names like Bill match on William and Bvd match on Boulevard. If you are feeling very adventurous you can change the collation so that accented names would match with or without the accents e.g. Édouard would match Edouard.

Not only can you set up one criteria set, but you can set up multiples. You can decide that you want to narrow down the matches made from one to the next or you can decide that you want to select the criteria set with the fewest matches.

The Mergician still supports The Raiser’s Edge own dedupe algorithm so you can continue to create your merge report using that. You can also use our simple email matching tool too or you can use a third party agency to do the matching for you. However using our latest matching engine will give you real flexibility to match based on your own data without having to rely on mysterious algorithms or scoring charts.

Find out more about The Mergician or download the trial version today.

What Blackbaud needs to to do to convince the world of its enterprise software

I was in discussion with Ivan Wainwright recently about Blackbaud CRM and its competitors in the enterprise sized non-profit sector. It would seem that despite being around for a long time Blackbaud CRM has not made as much ground as those of us watching thought it would do. At least that is the case in the UK. It appears to have achieved more in the US.

The obvious competition comes from and from Microsoft Dynamics. (There are plenty of smaller applications that suit many non-profits but this article is only considering the largest).
This is not a comparative blog. I am not going to analyse the differences down to the last detail. There are others that are much better qualified than I. At the time of writing I am too wedded to Blackbaud to be sufficiently objective. However there are some very good reasons why the competitors will be chosen over Blackbaud CRM.

Both Salesforce and Dynamics have very large for-profit user bases. This means that if there is a problem with the product due to a missing feature it will likely be developed by a third party in response. These users stem mainly from the commercial world meaning that there is less of a non-profit focus and the products evolve less in that direction. That being said there are more and more companies that skin Salesforce and Dynamics for non-profits giving them the missing functionality. Are they any good? In my mind the jury is still out.

These smaller companies that adapt, implement and add extra layers onto Salesforce and Dynamics lack the years and years of non-profit experience that Blackbaud have accumulated. They also lack the sheer volume of clients and client experience. This is where Blackbaud shines. BBCRM is not a skin. It doesn’t paper over the cracks of a for-profit sales system. It was built from the ground up with fundraising at its core.

So why hasn’t BBCRM conquered all? Well despite its obvious experience in the sector, one area Blackbaud has invested less time in is integration. While they naturally integrate or concentrate on integrating their own range of applications, they are beginning to realise that not all organisations want everything Blackbaud. This is even more so with enterprise level organisations. Larger organisations are much less likely to be pure non-profits. Many have commercial arms selling products that feed back into funding their causes. They have helplines, medical record systems, advanced communications tools. They have their alternative systems and don’t necessarily want to change them. They do, however, want to integrate them.

This is where those that implement Salesforce and Dynamics often excel. These platforms have been doing this for a while and are very accustomed to this requirement. The commercial sector is so broad that the source of data being fed into these systems is much more varied and the numbers of users far larger. This is why there is not only a MailChimp integration for Salesforce and Dynamics, there are dozens of other email marketing integrations too. Not to mention integrations with accounting packages, online shopping facilities, websites and blogs, ticketing sites and a whole host of other generic and specialist systems  that fundraisers might want to use.

For Blackbaud to sell its CRM product, their prospects not only have to be convinced that BBCRM can integrate with other applications (which without a doubt it can), but that Blackbaud will be their partner in reaching that goal, by facilitating, encouraging and incentivising others to create these integrations.

We are told that they want us, as customers, to be ‘loyal not trapped’, which is a great mantra. Now they need to embrace integration to show that they are serious about their new motto.

Without this extra dimension to their prospecting and sales process they will surely miss out on the number of sales that BBCRM could achieve.

Overcoming the password update policy for custom Raiser’s Edge applications

A recent question on the Blackbaud forums got me thinking about this problem. The issue is this. If an organisation has a password policy in RE in place that ensures that users have to update their password every X days, what happens to a custom application that runs every day in order to perform some maintenance / export / import etc.? It is also required to update its password. This is somewhat problematic because most scheduled tasks are just meant to be run and more or less forgotten about.

The obvious solution is to turn off this functionality. However you are only able to do this for the whole organisation which is problematic.  Another solution is to use Windows authentication to log into RE. That way it is Windows that decides the password policy. This is also not always possible.

Here is a third, programmatic way of doing this. You need to make use of the “other” API. I have mentioned this previously in Checking Security. You need to make use of the  Blackbaud.PIA.RE7.SecData7 assembly. This gives you access to the security objects that are not present in BBREAPI.

You set up a database table with three columns; a primary key id, a password and an expiration date. You then fill the password column with a list of passwords that could be used.

On starting the application you select from the table the password with the most recent expiration date (which may be in the future). You use this to log into RE using the usual code. Once that is done you determine whether or not you need to change the password. If the expiration date is in the past then you should change the password using the code below. The new password should be the next password in the table that has a blank expiration date and lowest id.

Dim user As New CUser

You then set a new expiration date on this password. This expiration date should be a good few days before the actual date you are required to change the password that way the existing password will still be good.

If there are no passwords left in the table you can remove all the expiration dates and start from the first value in the table i.e the password with the lowest id. I assume that RE allows you to use the same password as at some point in the past if not the most recent values.

One variation to this is to just create a random passwords and not have a list of passwords. That way you would only have a table with one row and an expiration date.

Any improvements? let me know in the comments.

Performance Management using Audit Trail – slides available

For those of you who were at BBCon 2013 (and for those of you who were not) Mohammed Dasser and I presented a session on performance management using the Audit Trail. The slides are available here:

If you have any questions about what Mohammed has done then I would love to be able to answer them but to be honest he overwhelmed me with the sophisticated use of Audit Trail and you would be better of asking him! That being said feel free to post your comments about the session or ask directly and I will try and get an answer.