Friday, December 19, 2008

Blackbaud NetCommunity 5.6 relases soon

Latest blog post and some twitter activity indicates NetCommunity 5.6 might release later today. It's a control release so you'll need to call support to get the download. The download will be available online next week...

From Steve's blog...
Here are just some of the changes you'll see in the release;
  • Ability to enter metadata descriptions and keywords at the Template and Page level
  • Ability to copy Layouts and Stylesheets to quickly reuse or modify site designs
  • Ability to style menus using unordered lists and custom classes
  • Ability to put the Donation, Event Registration, and Payment parts into a "test" mode
  • Ability to print and export Survey part results
  • Ability to compare content performance for testing purposes
And there are some good tweaks and adjustments including:
  • Adding tooltips for every merge field in the product
  • Adding default text for several of the email types and helplets
  • Adding custom tabs within Wave Social Networking
  • Adding group photos and other user contributed photo improvements
Read the full post here from @SMaclaughlin

Friday, December 12, 2008

NetCommunity Developer Challenge Entries Released

Shaun has posted a few of the top entries from the NetCommunity Developer Challenge. They are all open source. They don't come with support but if you have a problem with any of them post something on the Bus and someone will probably help you out.

You can download my entry here or view them all here.

Thursday, November 20, 2008

re-cap of the 2008 Conference for Non-Profits

So this year's Conference for Non-Profits is over. As usual Blackbaud put on a great show. Props to all the folks that made everything happen! I had a lot of fun seeing attendees from past conferences as well as meeting lots of new ones. I thought I'd do a quick post recapping some of the highlights, at least from a developer's perspective.

During Monday's keynote, Shaun Sullivan unveiled a pretty killer Facebook Toolkit for NetCommunity. I haven't had a chance to do anything but download it but you can be sure to see some posts in the future about it. It looks like it's got a pretty comprehensive integration layer between Faceook and NetCommunity. In a later sessions Michael Andrews dove a bit deeper into the Toolkit and gave us a good overview of what's possible. You'll be able to basically build your own Facebook application that will allow you to post news and events, acquire new constituents, collect gifts or donations and of course leverage existing relationships in Facebook to help spread our mission. It's important to point out that this is a developer's toolkit and you'll probably need someone technical in nature to help you implement it.

Shaun also showed off Nimbus, Blackbaud's dive into the world of "cloud computing". I'm pretty impressed with it. It's going to help alleviate much of the problems that could occur in an RE7 to RE8 migration by syncing your RE7 data to the "cloud" and converting it over to an RE8 format. When you are ready to migrate over to RE8 all your data will be up-to-date in the "cloud" for RE8 to access.

Tuesday was Infinity SDK day with Ben Lambert. Some great stuff in those sessions. I think that topic could have been discussed for 4 days alone and I probably would have still had questions. The Infinity platform is just awesome and as a developer I'm extremely excited about how simple and easy it's going to be to customize Blackbaud applications in the future.

Lastly I wanted to mention the Developer's Contest. My entry, Events To Google, was selected by the Blackbaud as the winner. Thanks to everyone who congratulated me on the win. All the entries will be available on Labs soon and will include the source code to those projects. That's huge and I think it represents a major milestone in Blackbaud's continuing efforts to broaden the developer community for their products. If I stop look at what was available a year ago in terms of developer resource for Blackbaud products it's amazing how far they have come.

So it was a great conference and I left energized, partly due to all the Red Bull in the Internet Strong Lounge, and with lots of new ideas for the next year.

Thanks again to Blackbaud and the events team that helped make this another great conference!

Monday, November 10, 2008

RePost: Rock Your NetCommunity with jQuery

This was posted by Michal Andrews on Labs earlier today.

I'm shamelessly re-posting it in an effort to generate blog traffic off of his work.

Seriously though, it's a good post and jQuery is something that I'm excited to see being used in NetCommunity.

Have a read

Monday, November 3, 2008

Using the PageLink custom server control

This is the second in a series of posts on the new custom server controls that were released in v5.5 of NetCommunity. As I stated in the previous post, custom server controls allow us to take canned pieces of functionality and include them in our own custom parts. In this post I'm going to touch on using the PageLink control. This control allows the user to select a link. It shows the link currently selected and offers the standard modal dialog for selecting a link either from the site, to a document, or a manually entered URL. You'll be able to download the Visual Studio project at the end of this post.

I'm going to assume that you are familiar with the concept of how to build and implement custom parts in NetCommunity. If you aren't, don't worry, just take a few minutes to check out the developer resources before getting started.

PageLinkControlEditor.ascx (Design View)

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="PageLinkControlEditor.ascx.vb" Inherits="PageLinkControl.PageLinkControlEditor" %>
<%@ Register TagPrefix="bbnc" Namespace="BBNCExtensions.ServerControls" Assembly="BBNCExtensions" %>

Please select a page: <bbnc:pagelink runat="server" id="PageLink1"></bbnc:pagelink>
Please enter the name for the link: <asp:textbox runat="server" id="txtPageLinkName"></asp:textbox>
Here we are registering the BBNCExtensions.ServerControls with the tag "bbnc".
Then we include the control <bbnc:pagelink runat="server" id="PageLink1">
Also we are allowing the name of link on the front end to be specified in txtPageLinkName.

PageLinkControlEditor.vb (Code Behind)

Imports BBNCExtensions

Partial Public Class PageLinkControlEditor
Inherits BBNCExtensions.Parts.CustomPartEditorBase

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'not really used for editors, the OnLoadContent() handles this...
End Sub

#Region " Editor Specific Sub "
Public Overrides Sub OnLoadContent()
If Not Page.IsPostBack Then
Dim oProperties As Properties
oProperties = CType(Me.Content.GetContent(GetType(Properties)), Properties)
If Not oProperties Is Nothing Then
PageLink1.PageID = oProperties.PageLinkID
txtPageLinkName.Text = oProperties.PageLinkText
End If
End If
End Sub
Public Overrides Function OnSaveContent(Optional ByVal bDialogIsClosing As Boolean = True) As Boolean
Dim oProperties As New Properties
With oProperties
.PageLinkText = txtPageLinkName.Text
.PageLinkID = PageLink1.PageID
End With
Me.Content.SaveContent(oProperties)
Return True
End Function
#End Region

End Class
In the OnSaveContent() we take the ID of the selected page using PageLink1.PageID and save it to oProperties.PageLinkID.
We are also going to save the text for the link name using txtPageLinkName.Text to oProperties.PageLinkText.

The OnLoadContent() we load up any previously saved Properties and apply it to the respective controls.

Properties.vb (Editor Properties)

Public Class Properties
Public PageLinkText As String
Public PageLinkID As String
End Class
Here we dim out the Properties the Editor and the Display will be using.

PageLinkControlDisplay.ascx (Design View)

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="PageLinkControlDisplay.ascx.vb" Inherits="PageLinkControl.PageLinkControlDisplay" %>
<:asp:hyperlink runat="server" id="hypPageLink"></asp:hyperlink>
Nothing fancy here, just declaring the HyperLink control we'll be working with in the code behind.

PageLinkControlDisplay.vb (Code Behind)

Imports BBNCExtensions

Partial Public Class PageLinkControlDisplay
Inherits BBNCExtensions.Parts.CustomPartDisplayBase

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
getProperties()
End Sub

#Region " Data Handling "
Private Sub getProperties() 'this loads up the properties from the editor
Dim oProperties As Properties 'class contating the availible properties
oProperties = CType(Me.Content.GetContent(GetType(Properties)), Properties) 'this is a BBNC method
If Not oProperties Is Nothing Then 'don't try to assign the properties to the display controls if there aren't any returned
hypPageLink.NavigateUrl = API.Pages.BuildStandardLink(CType(oProperties.PageLinkID, Integer)) 'this bit here basically takes the PID and then dynamically builds the URL for your specific website.
hypPageLink.Text = oProperties.PageLinkText
End If
End Sub
#End Region

End Class

Again, nothing really fancy. We are retrieving the Properties saved in the Editor using oProperties = CType(Me.Content.GetContent(GetType(Properties)), Properties).
Then we want to apply the Properties to the hypPageLink control. The important piece here is API.Pages.BuildStandardLink(CType(oProperties.PageLinkID, Integer)). It is a native function in the v5.5 API that takes the saved PID (page ID) from the Properties and returns a full URL for that page.
We are also applying the oProperties.PageLinkText to the hypPageLink.Text.

Download this project.

That's it! Pretty simple. If you want me to showcase a specific control please send me an email.
If you haven't already, follow me on Twitter and join our FaceBook group.

Tuesday, October 28, 2008

Code Smart & Fast: Working with custom server controls in v5.5

In NetCommunity v5.5 there is native support for Custom Server Controls. A custom server control for those that aren’t familiar with them simply allows you to modularize bits of functionality so it can be re-used in other applications without having to re-write the same code again.

In NetCommunity v5.5 these custom server controls have been exposed via that API so they can be easily used in any custom part. As a developer this offers two benefits in addition to saving time writing code. Your NetCommunity users are probably familiar with some of these server controls since they are already using them in various parts of NetCommunity. The learning curve will be smaller if you utilize these custom server controls in your custom parts. The second benefit is stability. Since they are part of the core NetCommunity product they are put through the QA process. This means there is less of a chance that an upgrade will break a custom part. Being able to quickly and easily add canned functionality is the real benefit though.

So what are some specific examples of the custom server controls that are available in v5.5? Well, here is a nice list, courtesy of Labs.
  • AddressUI - Offers the form for entering an address, taking into account the selected country and morphing itself appropriately such as changing a field caption from City to Suburb.
  • CFAPicker - Offers a modal UI for selecting a Campaign, Fund, or Appeal from the back office, making the appropriate web service calls to populate a search form, and return the selected item.
  • EmailEditor - Offers the HTML editor in email edit mode, allowing you to specify a field provider for populating the merge fields drop down. Choices include Profile fields, Donation fields, User Registration fields or none. You can also provide a set of custom merge fields that your custom transaction part may provide the data for at runtime. Very useful for designing email acknowledgments for custom transaction forms.
  • HtmlEditor - Offers the HTML Editor including the appropriate dialogs for link picking, and image selection. Handles the processing of the content for safe storage, including the translation of all links from actual to relative.
  • HtmlDisplay - Use this control whenever you want to display HTML that was edited with the HTMLEditor control. It handles the translation of links from relative back to fully qualified, among other things.
  • ImageSelectButton - Renders an ASP Button control that summons the Image select modal dialog. This is the same dialog used by the platform and honors security of the current user to offer the ability upload new images if allowed as well as controlling access to only those images the user has access to.
  • PageLink - This control allows the user to select a link. It shows the link currently selected and offers the standard modal dialog for selecting a link either from the site, to a document, or a manually entered URL.
  • PartEditButton - Renders an ASP Button that summons the modal dialog for editing any part instance.
  • PartSelectButton - Renders the UI for selecting another part, showing the part name currently selected. Can be set to only allow selection of a certain part type.
  • QueryPicker - Renders the UI for selecting a back office Query, showing the one currently selected. Offers the same modal dialog for searching and selecting a Query that is available in the system. Options include limiting the type of Query that can be selected and whether to look at The Raiser's Edge/eCRM or The Education Edge (if applicable).
  • TimeZonePicker - Renders a dynamic drop down that is populated with all of the available world time zones.
Over the next few posts I’m planning on getting into some specifics about how to uses these new custom server controls. I'll try to include some code samples where applicable and possibly even some working projects you can download.

For this post I’m going to touch on the HTMLEditor & Display because it’s probably one of the controls that most people will want to implement. The basic concept will apply to all of the server controls so if I don't get to one of the ones you'd like to play with you should be able to get the hang of it.

Before I get started, I wanted to thank Michael Andrews at Blackbaud for helping me out with this post. Blackbaud has made leaps and bounds in the last year building up the developer's network around NetCommunity. For those of you that have been working with NetCommunity for a while you'll remember the days when the SDK was a 5 page Word Doc. That was less than 2 years ago. As a developer it's nice to have solid resources and an energetic developer community. It's makes working much easier and a lot more fun.

OK, enough with the sentimental stuff.

So start up Visual Studio and setup a project. If you have no clue how to do that you can check out some of the previously mentioned developer resources here.

HTMLControlEditor.ascx (Design View)
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="HTMLControlEditor.ascx.vb" Inherits="HTMLControl.HTMLControlEditor" %>
<%@ Register TagPrefix="bbnc" Namespace="BBNCExtensions.ServerControls" Assembly="BBNCExtensions" %>

Here you are basically registering the ServerControls and then adding the HTMLEditor custom control to your page. There are some configuration options for the HTMLEditor but I'll handle that in the code behind.

HTMLControlEditor.ascx (Code Behind)
Imports BBNCExtensions
Imports BBNCExtensions.Interfaces.Parts

Partial Public Class HTMLControlEditor
Inherits BBNCExtensions.Parts.CustomPartEditorBase

Public Overrides Function OnSaveContent(Optional ByVal bDialogIsClosing As Boolean = True) As Boolean
Dim oProperties As New Properties
With oProperties
.html = HTMLEditor1.StorageHTML
End With
Me.Content.SaveContent(oProperties)
Return True
End Function
Public Overrides Sub OnLoadContent()
Dim oProperties As Properties
If Not Page.IsPostBack Then
oProperties = CType(Me.Content.GetContent(GetType(Properties)), Properties)
If Not oProperties Is Nothing Then
With oProperties
HTMLEditor1.StorageHTML = .html
HTMLEditor1.FeaturesMode = 1
End With
End If
End If
End Sub
End Class

Properties.vb (Custom part properties class)
Public Class Properties
Public html As String
End Class

So here we are really doing two things. The OnSaveContent() is used to take the HTML that is in HTMLEditor1 and save it to oProperties.html which is just a String. Then it saves all the oProperties for this custom part to be loaded later by the display.

In OnLoadContent() we are simply retrieving the previously saved values for this part and popping HTMLEditor1.StorageHTML. I'm also defining other properties for HTMLEditor1 here, specifically FeaturesMode = 1. This is a canned set of buttons that are available on the editor. Here is how those break out.
  • 1 = basic formatting and styling options
  • 2 = more advanced options like links and photos.
  • 3 = everything available.
Best option is to just play with the features you need for how you are using the HTMLEditor.

One thing to be cautious about though is that if you are planning on using the HTMLEditor on a custom part where non-admin will have access do NOT used FeaturesMode = 2. This will expose them to your NetCommunity images and all your content pages if they try to insert an image or a link. I'd like to see another option exposed in a later release that lets us control that with the API. Might be a good IdeaBank post :D

HTMLControlDisplay.ascx (Design View)

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="HTMLControlDisplay.ascx.vb" Inherits="HTMLControl.HTMLControlDisplay" %>
<%@ Register TagPrefix="bbnc" Namespace="BBNCExtensions.ServerControls" Assembly="BBNCExtensions" %>

Same deal here with the editor but the HTMLDisplay is just used to display the contents saved in the HTMLEditor control.

HTMLControlDisplay.ascx (Code Behind)
Imports BBNCExtensions

Partial Public Class HTMLControlDisplay
Inherits BBNCExtensions.Parts.CustomPartDisplayBase

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
getProperties()
End Sub

Private Sub getProperties()
Dim oProperties As Properties 'class contating the availible properties
oProperties = CType(Me.Content.GetContent(GetType(Properties)), Properties) 'this is a BBNC method
If Not oProperties Is Nothing Then
With oProperties
HtmlDisplay1.StorageHTML = oProperties.html
End With
End If
End Sub
End Class
Here we are just retrieving the stuff that was saved in the Editor and displaying it using HTMLDisplay1.storageHTML. Nothing too fancy.

So that's pretty much it. It's really straight forward and again you can apply this to any of the other controls. If there is a specific control you want me to do a post on just drop me a line. Oh and for those of you that are too lazy to copy and paste this into your project, you can download the project here. :D

Don't forget to follow me on Twitter and to join the FaceBook group.

Monday, October 13, 2008

sorry for the silence...

I know I have been neglecting my duties when it comes to timely blog posts. It's a busy time of year for us and I've been wrapping up a few major projects.

Tomorrow we are slated to go live with our latest customization to NetCommunity, an application that handles our national membership. This has been in the works for several months. It's probably been one of our more challenging customizations but it's been fun at the same time.

I've also finished up my entry for the Blackbaud Developer's Contest. I'm not giving away any info on that one though. The winners will be announced at the Conference in Charleston. I'll do a post on the winner after that.

Hopefully I'll have some time in the near future to do a post with some substance. In the mean time don't forget to follow me on Twitter and join the Facebook group.

Thursday, September 18, 2008

Upgrading to NetCommunity v5.5

Earlier this week we upgraded to NetCommunity v5.5. I wanted to throw together a quick post about that experience for those that haven’t gone down this road yet.

Overall I’d consider the upgrade a success and so far we're really happy with this version. It took us about 2 hours plus a bit of tweaking here and there after the site was back up. Much of that time was spent on one issue we had with Friendly URLs. We had to call support to make those work. That actually ended up being our fault, not a problem in v5.5.

We did manage to get the root URL working in so we no longer have /NetCommunity in all of our web addresses. This was important because it seemed a little silly for our Friendly URLs to be that long. Instead of http://www.usna.com/NetCommunity/Travel we now use http://www.usna.com/Travel. We also used IIS redirection to ensure that any existing links out on the net that had the old URL with /NetCommunity still worked.

The only other thing to watch out for is the new “Site Tracking” support. If you use Google Analytics, as most probably do, you’ll notice that there are some disadvantages to using this new method as opposed to putting the tracking script on the layouts. With the new method much of the data collected in Google Analytics seems ambiguous. Our “Content By Title” section showed all the hits as a title of “not set”. I did notice that there did seem to be much more data on the actual url link so some people might prefer the new system. I’d at the very least suggest setting up a separate Google Analytics account with a different tracking code to test before switching everything over.

Finally, TEST. If you do adequate testing and spend the necessary time preparing yourself, your staff and your constituents for an upgrade it WILL save you major headaches later. Typically we allow for about a month and a half of testing.

Blackbaud lets you setup your own test server at no extra cost. You really don’t need a power house server either. Just take a reasonably good desktop and pump up the ram. We use an old HP with a 2.53 processor and 4GB or ram. It’s slow, but it works. We setup The Raiser’s Edge and NetCommunity all on the same box then just restore the databases from production and fire off the upgrade. If after the upgrade you still aren’t comfortable or botch it you can always wipe it all out and do it again.

We also like to give support a call about a week before the upgrade and try to find out if they know when the next patch is going to be released. It really sucks if you upgrade Tuesday and the next patch is released Wednesday.

So that’s it, I hope this helps those of you out that haven’t gone down this road yet. Expect some new posts soon that will dive a bit deeper into the weeds of v5.5

Follow me on Twitter

Tuesday, September 16, 2008

Blackbaud Developer Network Challenge Opens Today

For all you developers out there that haven't heard about the Blackbaud Developer Network Challenge yet here is the Press Release.

Blackbaud Developer Network Challenge Opens Today
Contest will encourage peer judging of applications built on the NetCommunity Open Platform

Charleston, S.C. (September 16, 2008) – Blackbaud, Inc. (Nasdaq: BLKB) today announced the opening of its first Developer Network Challenge. The developer that creates the most compelling customization for Blackbaud NetCommunity will be awarded an iPhone, and will also win his or her organization a year’s free NetCommunity maintenance.

Click here for the full press release

Wednesday, August 27, 2008

Searching, a fresh perspective

This post is completely off topic but I hope some find it interesting.

I was recently clued into a new(ish) search engine via Twitter (thanks @starfocus) and wanted to share some thoughts about the refreshing approach being taken when it comes to finding things on the Interwebs.

Let me clarify here, I’m not calling this site a ‘Google Killers’, far from it. Google could do something like these or they could just buy them. What’s exciting, I think is that this search engine brings some very innovative and arguably long overdue approaches to the table. We take searching for granted because Google for the most part has defined or at least re-defined how we think about searching for things on the web. I’m not so sure a little creative competition won’t do everyone some good.

The purpose of a search engine is to find what we are looking for on the web, right? Well Google and all the other search engines do that pretty well already so where can things be improved? I think there are really three areas; presentation, organization and sharing.
So let’s have a look at www.searchme.com

Presentation: Searchme: offers a strangely familiar (iTunes or Vista Aero anyone? ) display of your search results. You can view a thumbnail preview of each website before you click on it. There is a scroll bar at the bottom to advance further into the results and for those of us that still want (or need) our search results to be in text, you can open up a text results window. The feature that I think stands out here is the autoplay option when searching for videos. You can get a quick thumbnail preview of any video results you search yields.

Organization: Enter ‘stacks’! This is my favorite feature of searchme:. If you are anything like me you are hitting lots of pages when researching something on the web. You probably have 15 tabs open in FireFox and it doesn’t take long before you are disorganized. Stacks let you literally ‘toss’ or drag and drop various pages into a working or saved ‘stack’. You can then save that stack for later or delete it when you have finished with it. This is a great feature; sorry bookmarking just doesn’t cut it anymore. Oh, and if you close your browser, the stacks stay.

Sharing: Web 2.0 is this year’s buzzword so I guess we can only expect search engines to jump on that bandwagon too. The sharing tools in searchme: are up to par with what you’d expect these days. You can take a saved ‘stack’ and share it using traditional email or use a variety of social bookmarking services and throw it out on Digg or Facebook, you know the drill. It’s nice to have this feature baked into the search though so you don't need a 3rd party solution.

All and all I’m pretty impressed. I’m not really sure about their business model yet and there isn’t much information in about us. There isn't really any advertising either. I still plan to use Google though: D

That’s it for this one! Send your comments!

Wednesday, August 6, 2008

First Look: NetCommunity v5.5

We upgraded our test environment to v5.5 the other day. It’s still early and I haven’t had a chance to jump into all the new features in any depth but I wanted to highlight some of the new features that I have had a chance to review. These aren’t in any particular order and I have left a few of the major features out, like Social Networking. I'm hoping to put out two more blog posts, one covering Social Networking specfically and another outlining the significant changes to the API.

One thing of note for those of you that have custom parts is that v5.5 uses a new version of the AJAXControlToolkit and BBNCExtensions in NetCommunity. Chances are that your existing custom parts probably use those DLLs so you’ll need to make sure you update your references, rebuild and redeploy your custom parts so they use the new DLLs when you upgrade.

So what will I touch on in this first look?
• Revamped administration pages

• Friendly URLS
• reCaptcha
• Site Tracking Code

Administration Pages

The revamp of the administration page includes a new cleaner look as well as some pretty nice flow changes. You can now edit the stylesheets for a page or template and easily apply those changes right to the page. In previous versions you need to actually save and close before refreshing to view the changes made. They also moved the custom tags to the top which is the most logical place for it I think. Another notable change is FireFox support for the admin pages. I’m an avid FireFox user and only switch over to IE when necessary so this is a nice change for me. Lastly, the “remember me” functionality seems to be working properly now. I logged in last night and choose “remember me” and this morning I was still logged in. That’s a nice feature for administrators that are using the system on a regular basis.

Friendly URLs
A friendly url is a web address that is simplified like www.usna.com/givenow that redirects to any other url specified. In v5.5 native support for friendly or vanity urls has been added. This is great news for us because we have a custom solution we used to accomplish this. It's always good when a custom part can be retired because it's supported in the core product. One less application I need to support.

reCaptcha
For those that are unfamiliar with reCaptcha you can learn more here. A Captcha is a application that helps to ensure that individual filling out a form is in fact a real person and not a scripted bot. That is accomplished by forcing the user to decipher a series of characters and enter them into a text box before the form can be submitted. In v5.5 this feature is supported for most of the sensitive forms within NetCommunity. It can be turned off and on by each client so you aren't forced to enable it if you don't want to. If you choose to you'll need to setup an account and enter in two keys provided by reCaptcha into the NetCommunity admin.

Site Tracking Code
Since we started using NetCommunity we have used Google Analytics for stats tracking. This was typically accomplished by putting the tracking code some place on the layout pages your site used. This was a bit cumbersome if you had multiple layouts and if you created a new layout and forgot to add the code you were no longer getting accurate site traffic data. v5.5 adds native support for any site tracking code. In the admin you can simply enter in the code and it's automatically applied to all the pages on your site.

So that's it for this one. As I said before I'm hoping to put out another post shortly covering the Social Networking piece added in v5.5 followed by one covering the API changes.

As always if you have any questions please feel free to contact me on twitter
here

Friday, August 1, 2008

RELEASE: Blackbaud NetCommunity v5.5

Well Blackbaud has released NetCommunity 5.5 late yesterday. It's not on the download page yet but I'm sure that's coming today.

Steve's latest post has a features overview and a link to the press release.

Once I have a chance to download and test I'll be writing a brief review.

Tuesday, July 29, 2008

Feature Review of NetCommunity v5.5

There isn't an established release date for NetCommunity v5.5 but I think we're getting close! It's an exciting upgrade and probably one of the bigger ones the NetCommunity product has seen. I'm personlly pretty excited about the API changes but this release is going to have lots of other non-API features in it.

Steve MacLaughlin just did a blog post on some of the new items we can expect to see in v5.5. It's a pretty big list and includes some notables like eCards (Michael Sola is happy!), Social Networking, Friendly URLs, Floating CSS Window and many more.

Read Steve's blog for the full list.

Friday, July 11, 2008

New Blog URL: customizingNetCommunity.com

Well I have taken the blog to the big leagues. I shelled out the $10 required by Blogger to give the blog it's own url!
The new url is customizingNetCommunity.com
hopefully everything has propagated,
The old url should redirect you to the new one
.

Thursday, July 10, 2008

Review: The NetCommunity Open Platform

Yesterday Blackbaud released The NetCommunity Open Platform (NCOP). It’s a comprehensive resource for developers that provides details about the NetCommunity API and other tools needed to get started creating custom parts.

It’s been pointed out in the past but is worth pointing out again that the NetCommunity API has been open although largely unsupported for some time now. As the NetCommunity product has matured so has the capabilities of its API. The NCOP represents a continuing effort by Blackbaud to formalize resources available to developers that want to build custom parts in NetCommunity. Before Labs and the NCOP developers had to rely upon on trial and error, other developers, a few limited tools released by Blackbaud and more recently on Blackbaud User Society in order to learn how to build custom parts.

Thanks to Michael Andrews and his team at Blackbaud for putting this resource together. It’s one of the better API documentations I have seen.

The NCOP also outlined some of the upcoming API changes for v5.5 which is slated for release soon. There is a lot of new stuff in there and as a developer I’m pretty excited about what I’ll be able to do when v5.5 is released.

For the non-technical readers this is where you can stop and send this link to your developer because we’re going to get in the weeds for a bit. Steve MacLaughlin has posted some more info in his blog about NCOP for those interested.

It looks like they have completely re-vamped the way the API is implemented. For those of you that just had visions of re-doing all of your current custom parts to work with this new model, relax! The good folks at Blackbaud still support the old API model so all your current stuff will still work. It also looks like they are going to just tag the old code with an ‘Obsolete’ warning when you build your project in Visual Studio. Backwards compatibility is key!

The new model will provide the foundation for more structured future growth of the API. There are now basically two properties you need to worry about that have everything under them, API and Content. The API property is used to access the platform methods, services and settings. The Content property is used to access the content of your custom part. You can read through the details on the v5.5 changes here.

The last component of the v5.5 changes I want to hit on is the formal addition of Custom Sever Controls. This is basically the ability to re-use some of the components of NetCommunity that already exist. This might include an ImageSelectButton that pops up the ImageLibrary and lets you choose an image to insert. It might also be PageLink selector or even a QueryPicker. As I understand it there were ways (unsupported) to accomplish some of this in the past but now that it’s in the API it’ll be much easier to do. What’s better than writing code that writes code? Writing code that re-uses code!

Those are the highlights I think. I have not had an opportunity to get my hands on the new 5.5 API so once I do I’ll probably be able to provide some better specifics on all the new features.

That’s it for this post. I know I keep promising another screen cast, those take a lot of time to create and I’m swamped right now but hopefully soon!

Wednesday, July 9, 2008

The NetCommunity Open Platform

Labs was just updated by Michael Andrews to include info on The NetCommunity Open Platform.
I'm going to finish reviewing it tonight and hope to put out a review tomorrow. So far it looks interesting and I'm liking what I'm seeing.
Here's the link

Sunday, June 29, 2008

Blackbaud NetCommunity ideabank

I know I haven't been posting as frequently as I usually do. We're heads down on a few projects but don't worry as we head into summer things will open up a bit and I should have some more time on my hands.

Wanted to post this for those that haven't heard about it yet.

The Blackbaud NetCommunity ideabank was featured on the latest version (episode #10) of the Baudcast hosted by Chad Norman.
It's a tool that allows the public to suggest and vote on new features for Blackbaud NetCommunity. It's a pretty neat approach and lets Blackbaud get a feel for what enhacements are the most valuable to their customers.

This is an approach that the Blackbaud User Society Forum has done for a while now.


Expect another screen cast soon! I promise!
In the mean time be sure to:
Join My FaceBook Group
Follow me on Twitter

View my LinkedIn Profile

oh and dont' forget to VOTE on the latest poll --->

Wednesday, June 4, 2008

BBNC Development Environment Revisited

I did a post while back about standing up a development environment for BBNC. Well, I decided to address this subject again because a few things here have changed and I’ve had to take another look at how we approach our own development environment.

When I wrote my earlier post about this I was really the only web developer. We have since hired a second full time developer and a summer intern, both working on projects in BBNC. We also have a database admin that is touching code a bit more than before. I quickly started to notice some flaws in the old development approaches.
  • It was really hard to share projects – zipping up code and emailing them to each other just wasn’t going to fly.
  • It's tough when more than one person develops on the same dev server. Every time you build a project in Visual Studio causes IIS to re-compile. This slows down everyone.
  • Versioning is important because we now have two people that are learning BBNC & touching code. These are smart guys but I needed to make sure we could roll back changes if needed.
  • Backups. When it was just me it was O.K. to have the code on a laptop and back it up daily but managing backups of code that's not centrally located was going to be tough. All the code still needed to be in one place.
While my solution isn’t ground breaking, it’s actually pretty simple, I mention it because there are unique challenges when you add BBNC into the mix. Here is what I came up with.

Now, I'm not that good at graphics and this was really my first attempt at using Powerpoint Shapes for anything other than a square so bare with me while I explain what's happening.

First off all our code files are securely located within SourceSafe in our internal network and they are backed up every night. We don’t have any valuable code sitting on a laptop anymore. SourceSafe also provides the versioning control we now need and it prevents us from accidently overwriting or loosing changes others made.

Each laptop has a web only install of BBNC with a connection back to an internally located BBNC Database server setup for development only. The live database isn’t sitting on a laptop that can get stolen so all of our constituent’s info is safe and secure. It’s also backed up every night. In addition to that since all the developers share the same database and that helps a bit too when you are sharing projects. When one developer sets up a custom part in BBNC it’s available to everyone else all they need to do is just get the updated code from SourceSafe and re-build the project locally.

Another spin off advantage is that this method works really well when developing off-site via VPN. Since most of the heavy lifting is done locally in IIS there isn’t much overhead heading back to the internal network. I actually don't notice much of a difference in speed on VPN compared to when I'm in the office.

So I hope that helps some of you. Expect another screen cast soon once I find a bit of free time to put one together.

Saturday, May 31, 2008

more info on the Blackbaud Kintera deal from Non-Profit Tech Blog

From the Non-Profit Tech Blog

"Those of you looking for more information regarding the purchase of Kintera by Blackbaud may want to check out
the recent EDGAR filing by Blackbaud. It contains FAQs that were sent out to Blackbaud and Kintera employees. Many of these questions are pertinent to nonprofits such as:

A customer is raising issues that are specific to them that are not covered by the generic messaging. Who do I contact for more information?"

more

Link to webcast with Marc Chardon

ScreenCast: Setting up a custom part in Visual Studio 2008

Alright, I've been looking for something new to do with the blog. I have run out of topics to discuss so I decided I'd take a stab at screen casts. Now I'm pretty new at this and I know the audio quality isn't the best but I'm working on it. I'm welcoming any and all suggestions. If anyone has a topic they'd like to see in an upcoming post let me know. Hope you enjoy it!

ScreenCast: Setting up a custom part in Visual Studio 2008

Friday, May 30, 2008

Review: Clemson User Group

I've been at the Clemson User Group put on by Blackbaud and Clemson University for the last two days. Lots of great sessions including two killer presentations by Steve MacLaughlin about Social Networking and NetCommunity 5.5. I am Web 2.0'ed out for the next few days. I say that as I'm blogging which is just ironic. Jim Bush did a presentation on stewardship and another on events. I got to attend the one on stewardship and it was very good. He's an entertaining speaker to say the least. I also got to attend a session by Alan Eager on Scoreboards and reporting. Not normally my area of expertise but I got a lot that I'll be able to bring back to our folks that do that.
I did my own little mini presentation about Google Map Mashups during lunch that I thought was well received. Thanks to Blackbaud and Clemson it was an great event.

Thursday, May 29, 2008

Blackbaud, Inc. Announces Acquisition of Kintera

Charleston, S.C. – May 29, 2008 – Blackbaud, Inc. (NASDAQ: BLKB), the leading provider of software and related services designed specifically for nonprofit organizations, announced today that it is acquiring Kintera, Inc. (NASDAQ: KNTA), a pioneer and leading provider of a Software as a Service (SaaS) solution to the nonprofit and government sectors. Under the terms of the agreement, Blackbaud will pay an all-cash purchase price of approximately $46.0 million. Blackbaud expects to finance the deal with cash and borrowings from its credit facility.

Read the full press release here.

Friday, May 23, 2008

Wednesday, May 7, 2008

Blackbaud Labs powered by NetCommunity

Blackbaud has just re-done Labs and it's now powered using v5.5, the next version of NetCommunity. They have also added in several new RSS Feeds which are worth taking a look at. It's nicely done and looks slick...

Monday, April 21, 2008

FaceBook Group & Page

I just put up a group and a page on FaceBook to start a network of web developers that are customizing NetCommunity. There isn't a whole lot there right now but when I have some time i'll start building it up. If you are interested please join!

Friday, April 4, 2008

Goin' Mobile with Blackbaud NetCommunity

Shaun Sullivan and Steve MacLaughlin have recent posts about Blackbaud NetCommunity for mobile devices. Obviously there are some serious advantages to constituents being able to access your NetCommunity website from their mobile devices and you don't need me to tell you what they are.

What I'm going to touch on is the approach Blackbaud took to rolling this out. In the last few months Blackbaud has started releasing custom parts (with no official support) to the public via Labs. Their Social Bookmarking application is one that we have incorporated with some modifications into our site and yes they give you the source code. The mobile custom part however comes with an in-depth and well written white paper that covers everything. This represents a growing level of self-support resources for some of the new stuff Blackbaud is giving away. I hope they keep that approach up.

Check out Labs and have a look. You can learn more about installing custom parts from the Wiki.

Monday, March 31, 2008

Post VII…using ‘mash ups’ to save time & money

Recently, we launched a Google Maps ‘mashup’. It displays the classmates of the logged in user on a map with a photo and link to their NetCommunity profile. Steve MacLaughlin covered it in his blog so I’ll spare you the details, he’s better at talking about what we do than I am anyway.

This brings up a good topic for my blog though, the power of mashups. So what is a mashup? Usually people think of some custom map when they think of a mashup but basically a mashup is the integration of one or more ‘services’ from various vendor’s via some type of API to deliver a creative and unique product to your end user.

To put it simply, why would you try to create a photo gallery application when you can consume Flickr and Picasa’s API? Those guys are in the business of photo galleries and it would be stupid re-create the wheel they have perfected. Just use the API to integrate their functionality inside NetCommunity.


Google, Microsoft and Yahoo know their maps and they have built some very serious APIs and developer resources around their products. If that wasn’t reason enough it’s important to note that many of these companies have a very non-profit friendly pricing model, usually free, that makes the decision easy.


In the case of our mashup that Steve covered we actually used Google Maps, Microsoft MapPoint & the NetCommunity API to geoCode, build and populate a map of the classmates of the logged in user. This hybrid solution enabled us to deliver a very unique service to our alumni using data that only we have. We used APIs from 3 services and integrated them to promote our mission and we did it for next to no money and less than 20 hours worth of manpower.


Social networking services are another area where mashups are growing. It’s still early but in the future I see a situation where NetCommunity/Facebook/MySpace and other OpenSocial apps will be tightly integrated with each other creating a mega-social network where people can connect via their social networking medium of choice


So before you embark on a project check to see what’s out there. It’s very possible that there is some mashup solution that’ll help.


That’s it for this post…let me know if you have a topic you’d like me to discuss.

Monday, March 24, 2008

Blackbaud's latest step towards a more 'open' API

For those of you that are currently customizing NetCommunity or thinking about it the latest blog by Steve MacLaughlin is going to be of some serious interest.

As Steve states in his blog the NetCommunity API was always free but you were required to pay to use the API of The Raiser's Edge.

That has however changed and this is just another example of how Blackbaud is becoming more 'Open' with their API.

You can read Steve's Post here.


Wednesday, March 19, 2008

usna.com site redesign launch...

We have launched our new website redesign!
This has been a long process between IS, Communications & LMD (Laurel Marketing & Design, our design partners).
The new site has two new features besides an updated look and feel.
  • Social Source - This was an idea we borrowed from Cornell. Allows a user to print, email and share content on Social Networking websites.
  • Classmates Map - This is a home grown mashup between Google Maps, Map Point & BBNC. It is a very sweet feature and allows our alumni to view a Google Map with the markers of all of their classmates and links to their profile. It's our first attempt at real world use of map mash-ups. It will be posted later this afternoon.

Thanks to all of our internal staff that made this possible!

I'm putting together another post here soon so check back!

Wednesday, March 12, 2008

Post VI: A step back…

It’s occurred to me that it might help folks to see some examples of custom parts that we have done to better understand the advantages of developing custom solutions for NetCommunity. I’ll include a screen shot of a few of them and a brief overview of the reason we chose to go the route of a custom solution instead of using an out of the box part.

Military Salutation
This was one of the first custom parts we did. We are a Military Service Academy and as you can imagine using the proper title when addressing an officer is pretty (very) important. The titles themselves are also very conditional. A specific rank like O-3 might not have the same title in one branch as it does in another and your military status also plays a part in how your title and salutations are displayed. On top of all of that there are specific rules about how the tiles are abbreviated. While NetCommunity facilitates the option to add custom titles in our case that would produce a title1 & title2 dropdown list on the profile a mile long after we added all of the possible combinations to the list.


Events
We just rolled out v2 of this custom part last week. This custom part was designed for a few different reasons but the primary one was because BBNC and RE treat event registrations as Gifts and our organization doesn’t want that. As a result of going the route of a custom part we were able to do many other things that the out-of-the-box events part doesn’t support. All of the data flows right back into RE and registrations emails are sent to the registrant and to a few internal folks.







Shop
This is a good example of what you can do once you have a few custom parts under your belt. We probably could have used the Shopping cart module that Blackbaud has separate form BBNC but that costs extra and this didn’t take long to make. All the data of the purchase flows back to the Notes tab on the user’s RE record. All the credit card transactions happen through IATS and the orders are passed to external fulfillment companies. It’s also the first custom part we wrote that uses AJAX. That’s it for this post.


Please subscribe to the blog and let me know if you have any topics you’d like me to discuss.

Friday, February 22, 2008

Post V: your NetCommunity development environment

This post is meant to illustrate some important consideration when you are setting up an environment to develop NetCommunity custom parts. There are many options here and each have their own benefits and drawbacks. I'm not recommending one method over another just pointing out some options and considerations.

What do we mean by a development environment? Well it's a separate instance of NetCommunity & The Raiser's Edge that is probably a snapshot of your production database. The idea being you want to re-create your production environment closely so you can develop against real data.

There are really two options Local development & Server development

Local Development: an instance of RE and NetCommunity installed locally on your computer.
Pros:
  • Deployment is faster
  • Setup is a bit easier
  • De-bugging is a bit easier
  • Remote development is easier
Cons:
  • There can be resource issues especially if you have large databases
  • Not the best representation of a server environment
  • You may need to run a server operating system
Server development: an instance of NetCommunity and RE are setup on a 'server' that is separate from where you develop
Pros:
  • True representation of a production environment
  • Less resources are used
  • More Stable
  • Multiple people can develop on the same server
  • You can physically secure you development database
Cons:
  • Deployment is a bit slower
  • Remote development would require a VPN or Terminal Service connection
A few additional points.

DO NOT setup local development up on a laptop if you are developing against real constituent data! It amazes me that companies are still getting burned because they put sensitive info on laptops that gets stolen.

A development server isn't a test server. I could write a whole post about test environments and I may do that but I don't recommend using your development environment for testing.

It doesn't' take a BEEFY server to run NetCommunity or RE for development purposes since the load is low. We use an old HP desktop with 4GB of RAM and about a 2.0Gig processor. That works fine for 1 developer. It has our entire database for RE and NetCommunity and it is secured in our server room.

Thats it for now, remember to subscribe to this blog with RSS if you enjoy reading.

Tuesday, February 5, 2008

Post IV: developer resources for NetCommuntiy Development

We’ve established some of the prerequisites to begin to develop custom parts within NetCommunity. As I said in the previous post there is a bit of a learning curve when you start to develop. While the APIs is pretty general and the concepts convey from one platform to another they are not all the same. It is going to take any developer without previous experience with the NetCommunity API some time to ramp up and get his/her head wrapped around it.

It’s important to keep in mind that currently Blackbaud Support doesn’t handle custom development. That being said there are several Blackbaud & non-Blackbaud resources out there that can help you help yourself.

The Blackbaud Wiki – This was recently launched by Blackbaud and is the best comprehensive resource for learning the technical ins and outs of NetCommunity development. You are going to need a .net background to understand most of this. There’s an intro along with some basics and full working samples. It’s a good resource and has the obvious benefit of being a Wiki so over time it will do nothing but improve. This should be your starting point.


Blackbus.org – It’s important to point out that this site isn’t affiliated with Blackbaud. It is however the largest community group on the internet for Blackbaud clients. The forum users are responsive, helpful & polite. The forum is well moderated. It's a great place to look for help when you get stuck and you will get stuck.


Blackbaud Support Forums – This is the official support forums for Blackbaud products.


Blackbaud Labs – Great place to see some screen casts of some of the stuff Shaun Sullivan and his team at Blackbaud are working on. Shaun does a great job of narrating these.

API Help Tools:
The Raiser's Edge Object MetaViewer - Sweet little utility file that comes with RE that can help you de-code the API. It's typically located here "C:\Program Files\Blackbaud\The Raisers Edge 7\Help\REMetaView.exe"

The Raiser's Edge API Help Files - There are two pretty good API CHM files that cover the API in some detail. They are located here;
"C:\Program Files\Blackbaud\The Raisers Edge 7\Help\RESolutions.chm"
"C:\Program Files\Blackbaud\The Raisers Edge 7\Help\reapi.chm"

Visual Studio 2005 Tools:
Custom Part Template - This is actually something I put together a while back. It's a pre-defined template for Visual Studio so you can create the basic framework for a custom part quickly. I posted it on the Wiki with instructions.

GhostDoc - Quick an easy way to comment & document your code. Just right click on a Sub or Function name and click 'Insert Comment'.

CodeSnippet Editor - A library of commonly used code snippets. You can also add your own. Very usefully for code you re-use in Visual Studio.

That's it for this post. Remember to subscribe with RSS to this blog. If you have any questions or want to see me cover a specific topic please drop me an email.

Tuesday, January 29, 2008

Post III: prerequisites for customizing NetCommunity

We have established that customizing NetCommunity has many benefits for an organization. Before your organization makes the decision to venture down this path it’s very important to have a clear understanding of what is required to actually accomplish this. Developing custom parts in-house isn’t really that hard but there is a bit of a learning curve and a minimal skill set required.

In order to customize, the person responsible should be a web developer or have comparable experience. You really need someone who has working knowledge creating web applications in some type of web-based programming language, preferably ASP.net or other object oriented language.

One pitfall I have commonly seen is a new client who expects their current ‘webmaster’ to be able to hit the ground running with customization. The title of ‘webmaster’ is a bit vague but unless he/she already has some type of solid development experience that may not be a good option. It’s important to setup the right person with this task so they are in a position where success is possible.

It's also important to point out that there is a learning curve that needs to be met when developing custom parts and even seasoned developers with the latest developers resources from Blackbaud will need some time to get up to speed.

I tossed around the idea of putting up a specific set of technical minimum requirements for a web developer who will be customizing NetCommunity. For the most part any web developer now matter what their experience could probably figure this out if they have at least a few years of experience and ample time. That’s to say it’s not really that hard and once you understand the concepts and the basics of how NetCommunity and RE talk to each other you can use the various resources out there to start to make things happens. That being said, for the non-technical folks out there who just want a list, here are my minimum suggestions.
  • ASP.net 2.0 or comparable object oriented language
  • Visual Studio 2005
  • Working knowledge of APIs
  • Working knowledge of webservices
A skilled developer with these minimal skills sets should have no problems learning to customize NetCommunity.

That’s pretty much it for this post. I’m not really sure what I’ll have in store for you next time so if anyone has any suggestions I’m all ears. Just drop me an email. Don’t forget to subscribe to this Blog with RSS.

Friday, January 18, 2008

Post II: define: customizing NetCommunity

When we talk about customizing NetCommunity what we are really doing is designing a piece of functionality or custom parts that fits into NetCommunity and interacts with The Raiser's Edge via the API or re7service. These custom parts can look and feel almost identical to the core NetCommunity parts that ship with the product.

Custom parts are technically web user control designed in Visual Studio. They have have two main components; the Display and the Editor. The Display is the front end that is web facing. This is what the website user interacts with. The Editor allows a content administrator to set specific options unique to that instance of the custom part. The Editor resides in the back end admin area of NetCommunity.

They can integrate back to The Raiser's Edge via the API or the re7service. This allows you to insert data right back into The Raiser's Edge if you wish or into a plug-in interface first for approval before the transactions is committed to the database. I will probably cover the plug-in in more detail in a later post.

Obviously the most important aspect of a custom part is the fact that it's custom. You can create a piece of functionality that meets your specific, unique business needs. There isn't any need to compromise or modify your internal processes so you can use a core part in NetCommunity. It's a difficult task for Blackbaud to design all of it's core parts to meet the requirements of every single one of their clients, 100% of the time. There will be times when the NetCommunity solution just won't work for your organization and thats OK. NetCommunity does most of the core requirements of a CMS well and the ability to create custom solutions that integrate into everything is the best possible way to cover those requirements that are too specific to your organization for NetCommunity to realistically meet.

So that's the basics of what we mean when we talk about customizing NetCommunity.
The next post will probably cover some of the prerequisites for developing customizations. Expect that to get a bit technical.
If you enjoy this blog please subscribe to it and if you have a topic you'd like me to cover don't hesitate to email me.







Post I: introduction

I originally intended this blog to be a technical one about customizing Blackbaud's NetCommunity. Blackbaud has however officially released their developer's Wiki and they are doing a lot of similar things that I had intended to cover. That's good though, I think that is a better forum for posting the more technical elements of BBNC customization. More on the Wiki later.

About This Blog
So, what can you expect from this blog? We'll right now I expect this it to compliment much of the work that Blackbaud and it's developers are doing on the Blackbaud Wiki. I think initally I'm going to do that by demonstrating some of the business cases for customizing BBNC but who knows where it will go from there.

About Me
I am from the Annapolis MD area and I am a web developer for the U.S. Naval Academy Alumni Association & Foundation. I have been working on BBNC customizations since July of 2006. We have pumped out probably a dozen 'custom parts' for BBNC with varying levels of complexity. We are among the growing number of Blackbaud clients that are customizing NetCommunity to meet their specific and unique needs.

Who is this blog for?
I am a technical person and while I'm not intending this blog to be technical from the stand point that there will be code snippets throughout there will references and discussions about web technologies. So this blog is for a semi-technical person who wants to learn about how customizing BBNC can help your organization's cause. Whatever that may be.

So thats it for the first post. I'm not sure on the frequency of these moving forward but I hope to be able to post something about twice a month. If you are interested in this blog please subscribe to it. If you have any questions or would like me to discuss a particular topic please feel free to contact me.