Working with RE7.95 and phone configuration rules

In v7.95 of RE7, there were some new config business rules introduced which prevent duplicate phone or emails being added to a record.

phone config

I have not really found this to be consistent though. When I use this inside of a constituent record it does not seem to make the slightest difference which setting. I can have to “Email” phone types but no matter which setting is selected above it saves fine. This does seem to work better with phones (as opposed to emails). Although even when I have the setting as “Do not allow record to be saved” it still prompts to if I want to save it.

When I run this through code however I do get an error… sometimes.

If I have a matching phone type but different phone number it seems to work fine most of the time (although once I got an error message). If I have a matching phone type and phone number I will always get the error as shown below. This does not seem to be affected by the options above though.

duplicate phone error

I am wondering wondering if there is a way of controlling the error. If this were working as expected then it should be possible to permit the record to be saved if the options is “Display warning”.

Here is my test code:

 Public Sub TestSavingDuplicatePhones()
 
        Dim constit As New CRecord
        constit.Init SessionContext             

        constit.LoadByField uf_Record_CONSTITUENT_ID, "3"
        
        Dim parent As IBBPhonesParent
        Set parent = constit        

        Dim phone As CConstitPhone
        Dim phones As CConstitPhones
        Dim dataObj As IBBDataObject
        Dim phone2 As CConstitPhone
        Dim dataObj2 As IBBDataObject
       
        For Each phone In parent.phones
            Set dataObj = phone
            If dataObj.Fields(ECONSTITPHONEFIELDS.CONSTIT_PHONES_fld_PHONETYPE) = "Email" Then
                Set phones = parent.phones
                Set phone = phones.Add
                Set dataObj2 = phone
                dataObj2.Fields(ECONSTITPHONEFIELDS.CONSTIT_PHONES_fld_NUM) = "1234"
                dataObj2.Fields(ECONSTITPHONEFIELDS.CONSTIT_PHONES_fld_PHONETYPE) = "Email"                             

                Exit For
            End If
        Next       

        constit.Save        
        constit.Closedown
        Set constit = Nothing   
   End Sub

What is the difference between Chimpegration and Online Express?

What is the difference between Chimpegration and Online Express?

We are big Blackbaud fans and love much of what Blackbaud produces. Online Express is no exception. The fact that there is one application that can ask for donations, handle event registrations, manage memberships as well as allowing you to send out targeted and personalised emails is amazing. What is even better is that it does so with a complete integration into The Raiser’s Edge. – WOW!

Continue reading What is the difference between Chimpegration and Online Express?

Just When You Thought Validatrix Could Not Get More Complicated…

One of the problems of offering a tool that can create custom business rules for almost any scenario is that it has to have a lot of functionality. As we developed Validatrix we realised that some of that functionality was missing so we added it on. The problem with that of course is that the more you add on the more complicated the application becomes.

We have attempted to remedy this by offering the Validatrix Query Converter which does a good job of converting queries into rules and is often a good starting point for expanding a rule further.

We realised that we had missed out on a piece of functionality that was preventing us from creating a rule with a specific scenario. It is possible to all sorts of logic within one rule. We can check if a field value is exactly the same as another, if it is not the same as if it is greater than or less than etc. Continue reading Just When You Thought Validatrix Could Not Get More Complicated…

Chimpegration on Blackbaud Hosted Raiser’s Edge (and NXT)

I cannot think how many times I have had to write back to a prospective client with the stock phrase “Unfortunately our products are not available on the Blackbaud hosted environment at the current time”.  The ground-breaking news is that after at least 7 years waiting in the wings, we are able to release one of our products on the Blackbaud hosted environment. (Finally I can updated my stock phrase)

When it was first released Chimpegration revolutionised the meaning of integration within The Raiser’s Edge world. It was the first app to fully embrace the potential of two separate platforms to transfer data between Raiser’s Edge and MailChimp. Unlike some integration applications it takes data directly from the source. Data flows from MailChimp via Chimpegration into The Raiser’ s Edge and back again. There is no need for any manual manipulation along the way. Chimpegration gives you a multitude of options to help smooth the different data points and ease the transition of information from MailChimp, an email marketing suite, to The Raiser’s Edge and donor management CRM system.

Azadi Sheridan, independent fundraising data expert, RE guru and former Blackbaud senior manager said,

‘Integration’ can mean different things for different products, but Chimpegration is the most complete and automated integration for MailChimp that I’ve seen for any fundraising database.

And now all of this is available to Blackbaud hosted clients too!

What does this mean for the future? One of the issues that many of the prospective clients faced and even our existing clients was whether they should invest in technology that is not available to them on NXT. They would put off a purchase or renewal decision because they wanted to wait and see what NXT would hold. RE7 has so much functionality but NXT looks amazing.  Having the best of both worlds is certainly a selling point for any organisation. With Chimpegration on the NXT hosted platform it is easier than ever to transition across to NXT and keep working with MailChimp.

So now you have heard all about it why not request a demo of Chimpegration.

Ready to take the plunge? Request a trial of Chimpegration on hosted.

If you are not hosted and have questions please get in contact too. Those who are not hosted by Blackbaud can also download and trial the Pro version of Chimpegration now from our Chimpegration page.

Validatrix Query Converter Makes it even easier to protect your data

When we first developed Validatrix we had a lofty ambition that users of Raiser’s Edge would be able to protect their records using any combination of business rules. Out of the box, RE allows you to make some fields required. If the whole organisation wants city to be a required field all you have to do is going to configuration and set that field to be required.

However there are many limitations with that. What if we are only working with email only records. We may not have a physical address for those constituents. Validatrix makes it possible to combine criteria to validate records.

(Do they have an address block: YES
OR
Do they have an a postal code: YES)
SO
DO they have a city:

No? Well show a message.

What we soon realised was that for simple scenarios it was not that difficult to create rules. We also realised that after much practise and taking a look at our Validatrix Recipes area on ZeidZone, it became easier. Those starting out or writing more complicate rules needed a little more help.

That is why we developed the Validatrix Query Converter. Most, if not all DBAs can write a regular RE query. If they can write a query to give all the records where a message would be shown then this tool can convert the query into a Validatrix rule.

I have to say straight up here that not every single scenario is covered. There are some things (not many) that query can do that cannot be done in a rule. (There are so very many more things that Validatrix rules can do that query can do!). However this should get the beginner and those that are working with complex rules onto the right track.

If you have any questions about this product then please do not hesitate to get in touch with us here.

 

Beyond Nines hosting becomes Concourse Hosting

We have been working with Glen at Beyond Nines for years now and just heard about how the hosting part of Beyond Nines is now becoming Concourse Hosting. At Beyond Nines Glen, Lisa and the team were the only dedicated company to host our products for their Raiser’s Edge clients. We have hopefully tried to make installing our products as easy as possible but we also know that sometimes it requires a skilled hand to get them to work in complex IT environments. That is why we know that we can rely on Concourse Hosting who just know how our plug-ins work and how to ensure that they run smoothly in their Raiser’s Edge setup. They currently host clients of ours using Audit Trail, Chimpegration, Importacular and The Mergician to name but a few.

For very many years now we had hoped that Blackbaud would let us into their hosting. With the move to NXT and away from the hosting of RE Classic customizations this is looking ever doubtful. However if you want the best of breed hosting and great products certainly take a look at Concourse:  https://www.concoursehost.com/

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"
   .Save
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.

Importacular

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()
phone.Fields(ECONSTITPHONEFIELDS.CONSTIT_PHONES_fld_PHONETYPE, "Home")
phone.Fields(ECONSTITPHONEFIELDS.CONSTIT_PHONES_fld_NUM, "123-4567")
phone.Fields(ECONSTITPHONEFIELDS.CONSTIT_PHONES_fld_IS_PRIMARY, True)

constit.Save()
constit.CloseDown()
constit = Nothing