As of April 17, 2018, this site is now in read-only mode. To start new Blackbaud Developer’s discussions, you will find Developer Discussions in the Blackbaud CRM Community.

To post or respond to Blackbaud Community discussions, you will have to login using a login. Learn how to login here. If you have questions or need assistance, please email

Blog Archives

Blackbaud CRM Developers’ Conference

By: John Lyons

Posted on: March 22, 2018

SAVE THE DATE: Join us in Charleston on June 27–28 for the sixth annual Blackbaud CRM Developers’ Conference! We’re excited to bring together software development kit (SDK) users to share best practices, exchange great ideas, build relationships with peers, and learn from and collaborate with Blackbaud CRM SDK experts. We’ll also take time to focus on configuration, customizations, SDK, coding, and testing. Don’t miss this opportunity created especially for developers working on Blackbaud CRM to expand their capabilities. You’ll leave this event inspired and full of ideas and insight to take b... Read More

Ad Hoc Query Performance Best Practices

By: Enterprise Singularity Team

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

Switching domains for all app users

By: Chris Whisenhunt

Posted on: July 18, 2017

Our central IT is currently in the process of migrating all of our users from one domain to another. Below is a handy script that I've used to do just that. set nocount on; begin try begin tran; declare @CURRENTDATE datetime = getdate(), @CHANGEAGENTID uniqueidentifier; if @CHANGEAGENTID is null exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output; declare @CURRENTDOMAIN nvarchar(10) = 'scuad\', @NEWDOMAIN nvarchar(10) = 'scu\', @CURRENTDOMAINLIKE nvarchar(11), @NEWDOMAINLIKE nvarchar(11); set @CURRENTDOMAINLIKE = @CURRENTDOMAIN + '%'; set @NEWDOMAINLIKE = @NEWDOMAIN + '%'; se... Read More

Presentation Materials Now Available for 2017 Developers Conference

By: John Lyons

Posted on: July 10, 2017

Presentation slides, examples, and code samples from the 2017 Blackbaud CRM Developers Conference are now available in the Blackbaud-CRM-Conferences repo. This repo provides access to presentation materials from Blackbaud CRM developers conferences. The developers conferences bring together SDK users to share best practices, exchange ideas, build relationships, and learn from the experts at Blackbaud. This year's conference covered a wide variety of subjects, including: Best practices around technical development in customizing the Blackbaud Data Warehouse. An overview of the Advanced Donation... Read More

Running BBDW USPs in BBCRM using the Global Change Spec

By: Alan Eager

Posted on: July 3, 2017

We can use the feature of a CLR Global Change Spec to connect to BBDW and run a SQL Stored Procedure.  This will appear in the Global Change screen in the Admin Functional Area.  One such example is to use a USP to call the BBDW.RESET_ETL USP. The two Global Change tasks listed deal with Running the ETL Reset USP and running a custom SQL Agent Job both in the BBDW SQL instance and database. The Spec Code will call a VB CLR and is as follows: <GlobalChangeSpec     xmlns="bb_appfx_globalchange"     xmlns:c="bb_appfx_commontypes"     ID="63462369-B1C7-4778-8957-AA325A1FAC44"     Name="BBDW Loa... Read More

Restore an accidentally deleted image in BBIS

By: Chris Whisenhunt

Posted on: February 9, 2017

Ever had an image accidentally deleted in BBIS? Read on to find out how to restore it! Images in BBIS are handled via an image handler and are stored in the database. Before restoring the database give this a try. declare @IMAGEID int = 3558; declare @IMAGEKEY nvarchar(50) = 'Image_' + cast(@IMAGEID as nvarchar(10)) + '_0', @CURRENTDATE datetime = getdate(); update SITEIMAGES set DELETED = 0, INTRASHBIN = 0 where ID = @IMAGEID; exec spAddUpdate_CacheItem @IMAGEKEY, @CURRENTDATE, 0; :) Happy coding! * this has only been tested in BBIS (CRM 4)... Read More

Creating a BBIS part so that the ADF doesn’t need hard coded values (GUIDs and URLs)

By: Chris Whisenhunt

Posted on: December 12, 2016

We got our ADF developed by Blackbaud and had issues with the need to hard code GUIDs and URLs. The hard coded values looked something similar to this. var BBI = BBI || {     // update these values when updating changelog     Config: {         version: 1.5,         updated: '01/15/2016',         isEditView: !!window.location.href.match('pagedesign'),         responsive: true     },     Defaults: {         rootpath: BLACKBAUD.api.pageInformation.rootPath,         pageId: BLACKBAUD.api.pageInformation.pageId,         designationQueryId: 'DADA4C7E-DFA7-4E83-A440-988DBAE3F16A',         MerchantAcc... Read More

Download a file to the user’s browser via CRM

By: Chris Whisenhunt

Posted on: December 1, 2016

To download a custom file in CRM using VB you need to create a class that inherits Blackbaud.AppFx.Server.AppCatalog.AppCustomFileDownloadProcess like so. Imports Blackbaud.AppFx.Server Imports System.IO Public Class TestFileDownloadHandler     Inherits AppCatalog.AppCustomFileDownLoadProcessor     Public Overrides Function CheckSecurity() As SecurityCheckResult         Return SecurityCheckResult.SecurityCheckPassed     End Function     Public Overrides Sub ValidateArgs()         If String.IsNullOrEmpty(Me.RequestArgs.Parameters("Text")) Then             Throw New Exception("Text parameter not... Read More

Custom name formats

By: Chris Whisenhunt

Posted on: November 8, 2016

I recently had to create custom name formats and while it isn't a very hard thing, it can be quite confusing. Thankfully we have a name format function in the SDK that can be utilized for this. Below is the sample code of one that I had to create, (excluding the spec xml). create function dbo.USR_UFN_NAMEFORMAT_INDIVIDUALINFORMALSALUTATION ( @CONSTITUENTID uniqueidentifier, @LASTNAME nvarchar(100), @FIRSTNAME nvarchar(50), @MIDDLENAME nvarchar(50), @TITLE nvarchar(100), @SUFFIX nvarchar(100), @SPOUSELASTNAME nvarchar(100), @SPOUSEFIRSTNAME nvarchar(50), @SPOUSEMIDDLENAME nvarchar(50), @SPOUSET... Read More

Cleaning up a database for local use

By: Chris Whisenhunt

Posted on: October 17, 2016

The below is a script that I've built that helps with cleaning up sensitive information and frees up space. This script should never be ran on a production database as it shrinks it at the end. Read the comments in it and then look through the script before blindly running it. Let me know if I missed something! Happy coding :) --set the parameters below and then search this file for '--MODIFY' --that will dictate other areas that need to be changed for your specific environment --MODIFY declare @CRMPATH nvarchar(100) = 'https://localhost/bbappfx_staging/', @PREVIOUSBBISPATH nvarchar(100) = 'ht... Read More

Privacy Policy | Sitemap | © 2011 Blackbaud, Inc. All Rights Reserved

Digital Ocean