RE-Decoded

A technical look at the Raiser's Edge API from Blackbaud


Feeds:

Crash when Filtering on Missing Constituent Codes

April 30th, 2009 by David Zeidman

I wrote some code for a client a while back and tested it thoroughly and everything worked fine. There was somewhat of a delay before the client was due to implement it and when they ran the application it crashed at the beginning. After some investigation we worked out what was going on. The code gathered together a collection of constituents that had two constituent codes. Only now one of them was no longer in The Raiser’s Edge.

The code was quite straight forward really:

Dim constits As CRecords = Nothing
Dim filter As CRecordsFilter
Dim constits2 As IBBRecords2 = Nothing
Dim constit As CRecord = Nothing
Try
   constits = New CRecords
   constits.Init(REUtil.getSessionContext, topViewFilter_Record.tvf_record_UseFilterObject)
   constits2 = constits
   filter = constits2.FilterObject
   filter.IncludeConstituentCodes.Add("General", "General")
   filter.IncludeConstituentCodes.Add("Donor", "Donor")
   For Each constit In constits
      'Processing continues here

The problem was though when I ran the code I got the following error:

System.Runtime.InteropServices.COMException (0x80042722): General ODBC Error:
 [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ')'.
Native error:102
at Blackbaud.PIA.RE7.BBREAPI.CRecordsClass.Count()

I have cut the stack trace short. This made no sense until we traced the SQL that was going to the database and saw the following:

SELECT  COUNT(*)  FROM DBO.RECORDS WHERE  
( EXISTS (SELECT
CONSTITUENT_CODES.ID  FROM DBO.CONSTITUENT_CODES
WHERE (CONSTITUENT_CODES.CONSTIT_ID = RECORDS.ID)
AND (CONSTITUENT_CODES.CODE IN (4043, ))  ))  

As you can see there is a value missing. After the 4043 (which I assume was for the constituent code “General”) there is no value. Looking in the system it appears that the “Donor” constituent code has been removed.

I am amazed that such a scenario would cause the plugin to crash. You would have thought that RE would check the existance of the values it puts in rather than leaving a blank value.

No related posts.

Posted in Advanced | No Comments »

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.

Switch to our mobile site