Blackbaud CRM

Posted on: October 12, 2017

Optimizing performance in Ad Hoc Query can be challenging. The optimizer does well with simple queries, but struggles with larger datasets pulled from multiple tables. This is because the optimizer does not have time to examine every option and must use a simplified approach. Essentially, it looks for a few good first steps, then a few good second steps, and keeps working until it has a good plan or it runs out of time. With complex queries, it might run out of time before it can find the best approach. Given that we cannot always avoid complex queries, how do we ensure good performance? Queri... Read More

Posted on: March 29, 2016

NOTE: You need to have Address Validation turned on before beginning. To see if Address Validation is enabled, open the Address Add Form 2, set the country to a country with Address Validation enabled, and ensure that the Validate button shows. At a minimum, your data form must have the following fields (though they can be named differently and can be hidden, they do need to exist in your form): COUNTRYID, ADDRESSBLOCK, CITY, STATEID, POSTCODE. In your form, add the UIAction that will trigger the validation: <UIAction ActionID="VALIDATEADDRESSACTION" Caption="Validate" Description="Perform... Read More

Posted on: October 17, 2013

For the benefit of my session attendees as well as folks who were unable to attend #bbcon this year, here are the slides, source code, and deployables from my session! Here are the slides: bbcon2013.InfinitySDK Gamification.zip contains the source code (VB.NET) for the Gamification demo, which uses gaming techniques to drive user behavior in the application (for example, to incentivize fundraisers to file contact reports or complete prospect plan steps). This zip contains the Catalog, UIModel, Workflow, and Mobile projects: Gamification.zip GamificationDeployment.zip contains the files to depl... Read More

Posted on: September 4, 2013

When you create a search list with the Infinity SDK, it is important to write an efficient SQL stored procedure so that the search list returns results as quickly as possible. To do so, you must adhere to a set of performance principles: Choose highly selective filters Use covering indexes to retrieve results Return only the columns that you absolutely need Limit the number of tables referenced by a query Additionally, consider the following advice when writing search lists: Avoid “or” statements – If you use an OR statement to link filters from different tables, the optimizer cannot use index... Read More

Posted on: September 5, 2012

I recently overheard the question at Blackbaud the other day, “What is the “Numbers” table used for?. We’ll let me try to relay an answer to you good people. The numbers table can be a pretty powerful thing to use. Often times in SQL, you find yourself needing to generate numbers or finding gaps in numbered sequences. You can use it to order things sequentially when querying for data. For example, you can use them to help generate date/time in your queries: DECLARE @STARTDATE as DATETIME = '1/1/2012' DECLARE @ENDDATE as DATETIME = '12/31/2012' select DATEADD(d,NUM,@STARTDATE) from NUMBER... Read More

Posted on: September 5, 2012

This macro will allow you generate and insert a new guid value with a single keystroke or button press. This is an extremely useful macro because you will be creating a lot of new guid values when you begin writing your xml specs. In Visual Studio, go to “Tools > Macros > Macro Explorer”. Right-click on the “Macros” node and choose “Load Macro Project…” Assuming you have installed the Blackbaud CRM SDK, browse to “<Your local install location>\SDK\Macros” and open the “BlackbaudEnterprise.vsmacros” file. In the Visual Studio keyboard options you can map the macro to your favorite... Read More