About David Hodge

Post navigation

Posted on: October 23, 2013

Ever wonder where the selections for All donors, All board members, etc... come from? These are selections are available to you with the base install of CRM. No queries even exist let alone selections (which are derived from ad-hoc queries). You may think they are in the DB as some sort of built-in feature or prepackaged database item. Well they are…they are just SQL function specs. You can create a selection from one with just a simple addition of a tag. To illustrate this, let’s say I want a built-in selection that returns all married men age 30-39. That CreateSelection tag at the end... Read More

Posted on: September 24, 2013

Infinity data forms are designed in a way to be responsive to the end-user when a field is missing or is invalid. The end-user should get focus on that field along with a helpful error message to indicate what is wrong with their form data. In typical SQL based forms, this is driven from the <ExecptedDBExceptions> tag. In this section, you can specify the constraint, the field, the type and a custom message if need be. You can also create custom exceptions that are thrown via the raiserror SQL function. When it comes to CLR data forms, you don’t get this section. This post is inten... Read More

Posted on: June 21, 2013

Recently I was tasked with developing a simple solution to bulk load some application users into an Infinity based system. This tool was to exist outside the product and there was no strong requirements on how it would be developed or how it would look or feel. It just had to be simple to use and straight forward. I knew I had to use the API but wasn’t sure which API option to choose from. I could use the API alone with data form items, use BizOps even or lastly I could use BBMetalWeb. I choose BBMetalWeb as it lent itself perfect to the problem I was trying to solve. I needed access to... Read More

Posted on: April 26, 2012

.NET Reflector was a great tool and probably still is. However, as you may know Red Gate scooped them up and now it cost $70 for the basic version. So I figured I would share a free version I have been using for a bit that is just as good (in my opinion). It is called ILSpy and you can download it here. The 2.0 version recently released and it can decompile into VB, C# or IL where as the old version didn’t have an option for VB. The C# view is actually a bit better since the objects in the view are links that take you to their definitions, the VB version doesn’t have that feature yet. Th... Read More

Posted on: March 15, 2012

Unit testing isn’t the most exciting thing to do, but it is essential in any given application. Unless you have perfect requirements and developers, you are going to have to refactor or add new code to existing code. The purpose of unit testing is to isolate a piece of code and to determine if it is acting exactly as you expect it to. Unit tests should both include positive and negative tests. This article is intended for a developer audience and will illustrate one method of unit testing the Infinity framework. Infinity has no hard-strict method for unit testing. This makes sense and is... Read More

Posted on: March 3, 2012

A big advantage of the Infinity platform is the ability to crank out features rapidly given that the common elements of a CRM are defined as specs. Often times these specs aren’t that complex and we just need to perform some basic CRUD operation with some metadata and adding a few insert, update and select statements. With that in mind, we are relying on SQL Server to do a lot of the heavy lifting and so performance testing is a must when doing complex operations. In this example I am going to walkthrough some performance testing basics and some gotchas with these methods. The first thing t... Read More

Posted on: October 28, 2011

Since Infinity relies heavily on SQL server,, we need a quick way of getting information about objects such as stored procedures, functions, tables, triggers, etc… With that we need a quick way of finding out the information for these objects including field lists and even the inner workings of them. This is nothing new as you can use the object explorer to browse for them, expand the tree and then script out the object. If you are like me,this is too slow of a process! With that here are 2 quick shortcuts that you may not know about in SMSS. NOTE: These shortcuts may or may not be setup b... Read More

Posted on: October 28, 2011

Since Infinity relies heavily on SQL server,, we need a quick way of getting information about objects such as stored procedures, functions, tables, triggers, etc… With that we need a quick way of finding out the information for these objects including field lists and even the inner workings of them. This is nothing new as you can use the object explorer to browse for them, expand the tree and then script out the object. If you are like me,this is too slow of a process! With that here are 2 quick shortcuts that you may not know about in SMSS. NOTE: These shortcuts may or may not be setup b... Read More

Posted on: July 13, 2011

Recently I have been writing a lot code around server-level provisioning. This includes installing IIS, .NET 4 and all kinds of features, components and roles etc. programmatically. Thankfully I have an account with cloud computing provider Rackspace. So this type of work requires a lot of remote desktop connections. Thankfully, I found a handy tool that makes connecting and managing connections easier. It is from Microsoft called Remote Desktop Connection Manager and you can download it here. http://www.microsoft.com/download/en/details.aspx?id=21101 This will gi... Read More

Posted on: March 23, 2011

Debugging isn’t the most fun thing to do as a developer. Especially T-SQL code. Given the nature of Infinity and it’s heavy reliance on T-SQL you may found it troublesome to debug. However, I don’t feel that this is always the case (putting always in italics for insurance purposes ). The best way to illustrate this is with an example case. For this example I am going to debug the batch commit process to figure out why my payments aren’t being added with the right data. To start, I already have my example setup in batch and I am ready to commit it so let’s start from there. First I need t... Read More