If you are not a constituent Do Not Call

I always thought that CConstitAddress and IBBConstitAddress and CConstitAddressPhone and IBBPhone were more or less interchangeable. Or at least from the perspective of the constituent. If I have just jumped over too many steps in one sentence then let me start again.

There are two routes you can go down to get address and phone information. The first, using CConstitAddress and CConstitAddressPhone objects applies only to constituent. The second, using IBBConstitAddress and IBBPhone apply in general to non-constituent objects such as CIndividual2, COrganization2, CParticipant and CFinancial2 objects.

Now what is not so obvious is that in general it appeared that you could use the “IBB” model to also retrieve the constituent’s address and phone details. This implied that CConstitAddress implemented the IBBConstitAddress interface and CConstitAddressPhone implemented the IBBPhone interface. This seemed to work for most fields until I tried the following code:

Dim oAddress As IBBConstitAddress 

        Dim oPhone As IBBPhone        For Each oAddress In oConstituent.Addresses 

            For Each oPhone In oAddress.Phones 

                If oPhone.Fields(CONSTIT_ADDRESS_PHONES_fld_DO_NOT_CALL) = True Then 

'Do something here 

End If 

            Next oPhone 

        Next oAddress

However for constituents the do not call field contains neither a true nor a false (a -1 or a 0 value) but rather is “Empty” for both scenarios. When I change the code to the following:

Dim oAddress As CConstitAddress 

        Dim oPhone As CConstitAddressPhone

For Each oAddress In oConstituent.Addresses 
            For Each oPhone In oAddress.Phones 

                If oPhone.Fields(CONSTIT_ADDRESS_PHONES_fld_DO_NOT_CALL) = True Then 

                    oPhone.Fields(CONSTIT_ADDRESS_PHONES_fld_DO_NOT_CALL) = False 
                    bWarning = True 

                End If 

            Next oPhone 
        Next oAddress

I get the expected results.

When I first started writing this article I thought that Blackbaud had decided to split these two methods irrevocably and indeed the above example does appear to be the start of that. That is of course until you try the “IBB” code on a non-constituent top level object. I tried it on an individual and it gives the same empty result. I fear that this is just a bug. Blackbaud tech support any thoughts?

As an aside The CFinancial2 object breaks the mould with top level objects that have phones. It appears to be one of the few that do not have an address collection with phones tied to each address. In fact it does not have any addresses at all. It only has a collection of phones. The CFinancial2 object is a specific constituent’s bank. That bank has an address but clearly the powers that be decided that a specific constituent’s bank could have their own phone numbers but not their own addresses. The mind boggles.