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

About Chris Whisenhunt

I've developed on the Infinity platform for over 8 years in both CRM and BBIS.

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

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

Moving attributes between environments

By: Chris Whisenhunt

Posted on: August 18, 2016

There are many times when I need to move attributes from one environment to another. Below is what I use, it prints out one big script that you can copy and paste and run. set nocount on; declare @SQL nvarchar(max) = N''; declare @ATTRIBUTES table(ID uniqueidentifier primary key, NAME nvarchar(100), ATTRIBUTERECORDTYPEID uniqueidentifier, DATATYPECODE tinyint, CODETABLECATALOGID uniqueidentifier, ONLYALLOWONEPERRECORD bit, CONSTITUENTSEARCHLISTCATALOGID uniqueidentifier, PROCESSED bit default 0); insert into @ATTRIBUTES(ID, NAME, ATTRIBUTERECORDTYPEID, DATATYPECODE, CODETABLECATALOGID, ONLYALL... Read More

Moving values in code tables

By: Chris Whisenhunt

Posted on: August 17, 2016

There are many times when I need to move data in code tables from one database server to another. Instead of going through the motions of creating a query and an export it's much easier to move the data using scripts. Below is what I use, it prints out one big script that you can copy and paste and run. set nocount on; declare @CODETABLENAME nvarchar(100) = '', @INCLUDEINACTIVE bit = 1; declare @SQL nvarchar(max) = N'', @CODETABLEADDPROC nvarchar(200) = 'USP_' + @CODETABLENAME + '_CREATEENTRY'; if object_id('tempdb..#CODETABLEVALUES') is not null begin drop table #CODETABLEVALUES end create ta... Read More

Calling web services from JavaScript in BBIS

By: Chris Whisenhunt

Posted on: June 3, 2016

Create your web service (asmx) and put it in the NetCommunity\WebServices folder. MyCustomWebService.asmx Imports System.Web.Services Imports System.ComponentModel Imports System.Web.Script.Services <System.Web.Script.Services.ScriptService()> <System.Web.Services.WebService(Namespace:="")> <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> <ToolboxItem(False)> Public Class MyCustomWebService     Inherits System.Web.Services.WebService     <WebMethod()>     Public Function GetText(ByVal name As String)... Read More

Developer functional area

By: Chris Whisenhunt

Posted on: May 2, 2016

At Santa Clara University I've created a developer functional area. In visual studio I have a SCU.CustomFx.Developer.Catalog and have the following packages: Logging.Package.xml This package contains a table with basic CRUD capabilities. This allows me to consume the CRUD capabilities by SpWrap and then comsume those classes with a Helper class in my SCU.CustomFx.Common project. I can then reference the Common project and log anything I want to from within any part of my source. Debug.Package.xml This package contains a table with basic CRUD capabilities. The table holds an application name an... Read More

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

Digital Ocean