Mark Patten

Microsoft Certified Partner Yet Again

Apr
28
2010
by Mark Patten

Philadelphia Microsoft Certified PartnerWe recently received notification that we have been accepted once again as a Microsoft Certified Partner. This level of relationship brings the formal recognition from Microsoft of our skill in architecting, developing and managing Microsoft .NET web sites and web applications. So, we heartily thank the folks on our team with the nerdy tendencies for being so awesome as to continue this relationship.     

Being recognized as a Philadelphia Microsoft Certified Partner allows us access to exclusive software and tools prior to public release, as well as the vast support network maintained by Microsoft and its active, vibrant developer community. 

Just last week, I discovered a long known, highly irritating limitation of ASP.NET with regard to the way it handles pathinfo. Worst of all, the problem is impossible to reproduce locally using the Cassini web server that is build into VisualStudio. After banging my head against the wall, I think I came up with a pretty good solution that worked in my particular example, which I will refer to as "Check Box Hell".

A Little Bit of Background

So, you're all proud of yourself because you managed to build a filtering control in .NET that is easy to use anywhere and can create path info URLs so you can pass along the results of a filter to anyone easily (rather than POSTed). Let's assume the part of your filter tool that does path info stuff looks like this:

	// pseudo-ish
	string id, value;
	string pathInfo = "";
	foreach (Control control in wrapperControl.Controls){
		id = control.ID;
		if (control is TextBox && !string.IsNullOrEmpty(((TextBox)control).Text)){
			value = ((TextBox)control).Text;
		}
		else if (control is DropDownList && ((DropDownList).SelectedIndex > 0){
			value = ((DropDownList)control).SelectedValue
		}
		... // other controls

		if (!string.IsNullOrEmpty(value)){
			pathInfo += "/" + id + "=" + Server.UrlPathEncode(value); 
		}
	}

It's fairly simple, and it'll create your path segments that look like this: /txtZipCode=19127/drpState=PA. You test the code locally using the VisualStudio Cassini web server and it works like a champ. Then, you deploy it to your staging server and it is broke like a joke. How could this be? Read on for the solution.

Have you ever seen ?? in c# code? The first time you saw it, was your initial reaction "??"? The ??-operator was added in c# 2.0 and as the documentation says, "The ?? operator returns the left-hand operand if it is not null, or else it returns the right operand." If you're like me, you don't like there to be too much syntax (and especially characters) in your language that is esoteric in its meaning (personally, I still prefer java's "implement" and "extends" keywords over the c++/c# syntax of ":" for inheritence and implementation of interfaces).

Though I must include the disclaimer, there are degrees of how much I'm of the opinion. Maybe it's just years of familiarity, but having some type of character, such as a semi-colon, terminating a line does not seem impractical. And the lambda expression syntax introduced in c# 3.x does provide a lightweight syntax for creating simple anonymous delegates that is really convenient.

The ??-operator, however, does not really yield any new functionality and it can be mimiced relatively easily with a method/function. In T-SQL/Sql Server, there is one already called ISNULL. The usage of such an implementation would not be too much. Admittedly, this entire (belated) complaint is a small quibble on my part, like preferring people to use the Nullable struct instead of int?, but still.

 

At Delphic Sage, we love using Basecamp as our central communications hub between our staff and our clients. It's simple and easy to use, and has a permissions model that makes it well suited as a client portal. However, Basecamp lacks the granularity to be used for actual project/task management which is why we use a different system internally. One of the pain points for our project management team is that they often have to take messages or to-do items from clients out of Basecamp and copy them to our internal solution manually. After reading a bit about the Basecamp REST API, we devised a fairly clever way to make this happen more easily without subjecting/exposing our clients to the minutia of our internal task system.

Some Requirements

1. It needs to be quick and easy to selectively create a new intranet task based on a client entered To-Do item or message in Basecamp.
2. It needs to be easy to jump back and forth between the Internal Task and the Basecamp To-Do
3. The Client should not be exposed to the internal workflow / comments

The Solution

1. We used the BaseCamp API to allow project managers to simply create a new task based on the basecamp URL of an existing To-Do Item. Once the task was created, we prepended the To-Do in back camp with the intranet Task #.
2. We used a GreaseMonkey Script with JQuery to Link all task #s on BaseCamp To-Dos to the corresponding Intranet Task.
3. Since our clients will not have the Greasmonkey script, they will only see that there is a task number, indicating that the Basecamp To-Do has been escalated to an internal Task.

Read on for the step by step analysis...

Delphic Sage Recognized as Top Software DeveloperWell, we are quite thrilled to be recognized yet again by the Philadelphia Business Journal for our software development expertise. Though we are based in Philadelphia, a lot of our clients come from New Jersey, New York City, Baltimore and far beyond - like one of our latest F500 client's from Minneapolis. With all that said, we love our home town and are thrilled to be recognized as a leading interactive agency making a contribution to Philadelphia's software development community.

The Philadelphia Business Journal's list of top software developers includes 25 of the largest software development firms in the Philadelphia area. Delphic Sage solutions primarily consist of web development projects delivered to web sites, microsites and mobile devices for middle market organizations in healthcare, financial services, manufacturing and retail industries.    

Results Per Page 
Page: 1 2 3 4 5