Welcome to Coders for Christ Sign in | Join | Help

(Note: With this post I'm going to tag any similar, future rants as "angry coder".  Although they will be few, I'm doing this just in case you want to take a pass on any of these kinds of entries.)

BSOI love Google, but with their recent announcement I thought I was going to cry.  Does the world really need another browser?  Aren't the existing set of mediocre ones enough?  Opera, Safari, IE, Firefox, Konqueror, AOL TBD, Flock, etc., and now Chrome.

Let me pick on Google for a minute.  I'd really like to see them work on support for HTML/CSS in their premiere email client, Gmail.  It's arguably among the worst when it comes to CSS support.  Perhaps their entry into the browser market will help them with this problem...

I was a staunch Netscape supporter back in the day but, as a web developer, it was never fun being the middleman in the browser display/layout war.  When you're just trying to write programs to solve the latest business problem (and do it in a cross-platform, client-lite way), you really don't have the desire or patience to worry about some other vendor's browser.  It's inefficient at best and it's certainly not your job.  Or is it?  Perhaps when we decided to write a web application we also signed on to support any and every web browser that one of our users wants to use?  Perhaps there is no place to draw the line.  There is no hope.

Enter the 3rd party control developers!  Yes, that's right -- it's their job.  Pick from Telerik, ComponentArt, Infragistics, Devexpress, etc.  Let them worry about the war.  They will do it better and more completely than you and I can.  You and I can get back to developing solutions for our domain(s) and leave the browser war behind.

Let me summarize with the point that drove me to finally speak up regarding this topic. I think Jon Edmiston's key #7 captures it well.  Beware of bright shiny objects.  Chrome is definitely shiny.  Seriously.  Will installing it or twittering it (don't get me started on this ;) help us be successful?  Will having it help with the business problems we're getting ready to solve?

LOL - can you do this?[update: only moments after posting this, I happened to visit a link that Scott Miller had sent earlier today.  I had to laugh out loud because I don't think I've ever actually had this happen to me.  Perhaps this (see image) is another way to deal with it.  Hey, where is Chrome in that list?]

1 Comments
Filed under: ,

I dig the latest version of Arena ChMS and the new Document Types feature is great.  In a nutshell it allows you to attach documents (pdf, images, .doc, etc.) to a person, tag or group.  It's the feature that enables you to move to a paperless office and it's super easy to setup.

Last click to watch demoweek a super admin, Kim came to me and said something like, 'I want to throw out this huge book of completed paper forms before I drop it on my foot and break my toe.'  I said "let's do it."  We quickly setup a new Document Type and a Person Attribute to hold the document. Now she just scans the document, attaches it to the person's record and then shreds the original.

In Kim's case she was maintaining the paper copies of our driving insurance form -- some paperwork that our insurance company gives us when someone has permission to drive the church vans.  The document is slightly sensitive so we also locked it down so that only few people have access to edit or view it.

We've lined up several more documents we'll be moving to Arena including our:

  • 4 page application to serve (currently a fillable PDF)click to watch
  • applicant background check (pdf)
  • applicant's reference response documents (typically emailed .doc or paper)
  • and several other paper forms people are physically signing

With Arena you can literally set these up in just a few minutes.  Watch this video to see how it is done.

announcementA couple of months ago I had the pleasure of introducing Dallon's Developer in Beta to the blogosphere, and now I get share the news of Jason Hamrock's new blog.

Jason is the Communications Director at CCCEV and his team is one of my team's biggest Arena "customer". As such they rely on Arena as the CMS for the web site, event announcement and promotion, and soon a semi weekly newsletter.  He's already queued up several posts so If you're involved in commuicating with your church body be sure to subscribe to his blog as he'll be sharing the good, the bad and the ugly we face every week/month at Central.

0 Comments
Filed under:

UAT for ArenaIf you're not familiar with a UAT environment, it's the place where your users can perform either formal testing or just simply kick the tires of the latest version of your system/application (depending on how formal your "testing" really is).  Most corporate environments have a UAT environment for their mission critical systems.

At our church our mission critical system is Arena.  Although it's not ideal that me, our staff, or any Arena customer are the ones to find a bug with the latest version of Arena, it is nice to have a chance of finding one before it goes live.  A UAT environment is also a great way to provide advanced training to your Power Users on features that will be in the upcoming release (like the training Austin Spooner does with his teams after their monthly staff meetings).

Now that we've virtualized our servers, creating a UAT system has become a bit easier and I finally created a more formal Arena UAT environment which even includes a recent copy of the underlying database.  I think I've come up with some faily simple steps that anyone can follow to create their own.

These steps basically create a replica of your production environment and then upgrade it to the latest version of Arena.

  1. Create a new virtual server.  We called ours UAT01.
  2. Install SQL Server 2005 with Reporting Services.
  3. Add a alias (CNAME) record to your DNS that points your test arena site (ArenaTest) to your UAT server (UAT01).
  4. Copy your Arena web folder from your production server to your new UAT server (ex. copy '\\ARENA\C$\Program Files\Arena ChMS\Arena' '\\UAT01\C$\Program Files\Arena ChMS\Arena').  You can do the same with your ArenaCheckIn web folder.
    1. Edit the copied web.config replacing your normal database server name with your UAT server (UAT01).
  5. In IIS on your production Arena server, save your configuration to a file.
    IIS - Save Configuration to a File...
  6. In IIS on your UAT server, create a new site or virtual directory from a file (that was created in previous step).
    1. You may need to verify that the web app is set to ASP.NET 2.0
  7. Backup your production ArenaDB from your SQL server and restore it to your UAT server.
    1. Before restoring your ArenaDB backup, you might also run Arena's SQLInstaller.exe which will can create a new, empty database.  I did it this way for a particular reason but I don't think you should need to do this.
    2. Depending on your situation, you may have an orphaned Arena login which you can fix in SQL Manager using:

      USE ArenaDB

      GO

      sp_change_users_login 'auto_fix', 'Arena'
      GO

    3. Verify that the database's Arena login is dbo for the new ArenaDB.
  8. At this point, in theory, you've made a copy of your production Arena environment.
    1. You might test by visting your UAT url (http://ArenaTest or http://ArenaTest/arena
    2. Disable your Arena->Shelby triggers in SQL Manager using: 

      USE ArenaDB;

      GO

      EXEC sp_MSforeachtable @command1="ALTER TABLE ? DISABLE TRIGGER ALL"

      GO

    3. Edit your Arena Organizations settings (under Administration) changing the value of your "CheckInUrl" and "ReportServerURL" settings to the new appropriate value.
    4. You might also want to take a "snapshot" of your virtual server so you can perform the next steps (the upgrade) over if necessary.
  9. Upgrade your Arena UAT to the latest version...
    1. Download and execute the latest version of ArenaSetup.exe
    2. Follow the steps in the wizard as necessary
    3. After the install disable the Arena Automation Agent and set it to manual startup (in Windows Services) or do whatever you want with it... just be careful what jobs you run since they could potentially be emailing people when you really don't want to.
  10. Almost done... replace your Arena header images with this new set here to avoid user confusion.
  11. Test your site and then let your power users know about it.
0 Comments
Filed under:

Desert Code CampIs the expression "you are what you read" true?  I think it is to some degree.  Not only does it give you knowledge but it also says something about you.  My most innovative friends are heavy blog, book and magazine readers, and I believe there is a correlation.  I frequently ask people what blogs or magazines they are read because I want to know a little more about them.

When it comes to software development, I think it is especially important to keep up with the state of our art and its related technology.  Knowing about something does not mean you have to run out and implement it, but I believe you're in a better position to make future decisions.

It's truly a treat when you can spend a whole day learning from experts (or just people who know more than you) and it doesn't cost you anything but time.  That's why I especially love the Desert Code Camp that the guys at AZGroups (formely AZ .NET User Groups) have been putting on for a while now.  You can spend 8 hours and ramp up very rapidly on several things which you may have only heard very little about  -- whether you want just an overview of a technology or want to go deeper into something you've read only a little about.

At the upcoming DCC on Saturday, May 31 you'll have a chance to learn about things such as:

  • FLEX and Adobe AIR
  • Agile SCRUM
  • iPhone SDK
  • Continuous Integration
  • LINQ
  • Silverlight (I love the presenters description of this class: No "Hello World". No MS Comic Sans. No interminable feature dump of XAML attributes. And most definitely, no multicolor-gradient-filled rotating rectangles "just because they're possible". There is a correct time and place to create a multicolored gradient: when you're five years old and playing with watercolors. "I'm a developer not a designer" is no reason to build an application that looks like one of Bill Cosby's sweaters.)
  • Google AppEngine
  • SOA / Enterprise 2.0 REST
  • ColdFusion 8 (are people still using ColdFusion???)
  • and more!

So clear your schedule on Saturday, May 31 and join me at the Desert Code Camp!

1 Comments
Filed under: , ,

the Arena Community DeveloperIf you were at the Fall 07 Arena Community Developer Rountable you heard me mention Dallon as the youngest Arena Community Developer, but now I'd like to introduce him via his new blog -- Developer in Beta.

Dallon is a remarkable developer who's been quite involved at our church (our IT team) for the past 3-4 years where both his Dad and Mom now work full and part time, respectively.   And he's only 13.

With fantastic teaching and support from his parents, Dallon typically drops by on Monday afternoon's to both code and learn.  It was fun introducing him to some basic OO concepts several years ago, but his skills and ability to learn has easily surpassed my abilities and time available to teach him everything he is capable of learning.  (This past year I was glad to see Dallon start taking formal, pre-college/college level courses online.)

Dallon has written several Arena ChMS modules of varying sizes including one for managing Central's food pantry (where his Mom leads/serves). With time on his side he has become quite familiar with, and begun using, many of the latest .NET technologies including ASP.NET AJAX, LINQ and Silverlight, and on more than one occasion Dallon's asked me 'when can we start using that in our Arena development environment.'  It's been fun trying to explain how sometimes we can't move as fast as we'd like...

If you want a fresh perspective on various developer related topics check out Dallon's blog, Developer in Beta.

My pestering has paid off.  I just got word on Friday that Derek Mangrum, our Network and Systems Administrator, has begun blogging IT specific posts over at Grinding-IT-Out and he's doing it at a furious, daily pace (compared to my 1-2 per month).  Derek's been tremendous addition to our IT team and is always learning and teaching me interesting things.  Because of that I've periodically hinted to him that he should be sharing all those goodies in a blog.

Don't be shy -- stop over there and drop him a "welcome" comment on his Introduction post.

0 Comments
Filed under: ,

With the current release of Arena (2007.2.x) there is no "E-Ticket" feature, which means if you enable it for one of your online registrations it will attempt to link to a page/file that does not exist (~/eticket.aspx).  Luckily, this also means you can easily write your own!

With very little work I created a eticket.aspx page that creates the one (non-styled) shown here: 

eTicket

Everything was trivial. The only interesting part was creating the barcode.  Because you can't expect the user's browser to have a barcode font installed, it's best to create it on the server and then render it as an image.  I used some of the information from Imran's Barcode Image Generation Made Easy article on DotNetSlackers.com to do this.

I ended up making an OutputBarCode method to perform the output rendering so that I could reference the same page with an additional querystring parameter (line 52 of the .cs).  When this barcode image source is retrieved the Page_Load calls the OutputBarCode method (line 12-14).  Also note that the barcode font does not need to be "installed" on your server.  Instead, it is simply referenced from the webroot (line 66 of the .cs).

You can download these two files here.

eticket.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="eticket.aspx.cs" Inherits="eticket" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Your Registration Confirmation</title>
    <link href="CSS/arena.css" rel="stylesheet" type="text/css" />
</head>
<body onload="window.print(); window.close();">
    <form id="form1" runat="server">
    <div class="eticketContainer" style="padding: 10px 10px 10px 10px">
        <asp:Panel ID="pnlViewETicket" Visible=false runat="server">
            <h2>Registration Receipt</h2>
                <table border="0" cellpadding="4" cellspacing="0">
                    <tr>
                        <td style="width: 100px"><span class="formLabel">Name(s):</span>
                        </td>
                        <td><asp:Label ID="lblName" runat="server" CssClass="formItem"></asp:Label>
                        </td>
                    </tr>
                    <tr>
                        <td style="width: 100px"><span class="formLabel">Event:</span>
                        </td>
                        <td ><asp:Label ID="lblEventName" runat="server" CssClass="formItem"></asp:Label>
                        </td>
                    </tr>
                    <tr>
                        <td style="width: 100px"><span class="formLabel">Date(s):</span>
                        </td>
                        <td ><asp:Label ID="lblEventDate" runat="server" CssClass="formItem"></asp:Label>
                        </td>
                    </tr>
                    <tr>
                        <td style="width: 100px">
                        </td>
                        <td><asp:Label ID="lblEventDescription" runat="server" CssClass="formItem"></asp:Label>
                        </td>
                    </tr>
                    <tr>
                        <td style="width: 100px"><span class="formLabel">registration ID:</span>
                        </td>
                        <td><asp:Label ID="lblRegistrationID" runat="server" CssClass="formItem"></asp:Label>
                        </td>
                    </tr>
                </table>
                <asp:Panel runat="server" ID="pnlSpecialNotes">
                    <h3>Special Notes</h3>
                    <asp:Label ID="lblEventConfirmation" runat="server" CssClass="formItem"></asp:Label>
                </asp:Panel>
            <p><asp:Image runat="server" ID="imgBarcode"/></p>
            <p class="smallText" style="text-align: center; text-transform: uppercase">Please present this document when you arrive at the event.</p>
        </asp:Panel>
    </div>
    </form>
</body>
</html>

eticket.aspx.cs

   1: using System;
   2: using System.Drawing;
   3: using System.Drawing.Imaging;
   4: using System.Drawing.Text;
   5: using System.Web;
   6: using Arena.Event;
   7:  
   8: public partial class eticket : System.Web.UI.Page
   9: {
  10:     protected void Page_Load( object sender, EventArgs e )
  11:     {
  12:         if ( ! IsPostBack && Request.QueryString[ "r" ] != null && Request.QueryString[ "b" ] != null )
  13:         {
  14:             OutputBarCode( Request.QueryString[ "r" ] );
  15:         }
  16:         else if ( ! IsPostBack && Request.QueryString[ "r" ] != null )
  17:         {
  18:             PrintEticket( Request.QueryString[ "r" ] );
  19:         }
  20:     }
  21:  
  22:     /// <summary>
  23:     /// Binds the needed registration information to the form's controls.
  24:     /// </summary>
  25:     /// <param name="guid"></param>
  26:     private void PrintEticket( string guid )
  27:     {
  28:         Registration registration = new Registration( new Guid( guid ) );
  29:         if ( registration != null && registration.RegistrationId != -1 )
  30:         {
  31:             this.pnlViewETicket.Visible = true;
  32:             this.lblName.Text = registration.Registrants.ToHtml();
  33:             this.lblEventName.Text = registration.EventProfile.Name;
  34:             this.lblEventDescription.Text = registration.EventProfile.Details; ;
  35:             this.lblEventDate.Text = registration.EventProfile.Start.ToShortDateString() +
  36:                 " " + registration.EventProfile.Start.ToShortTimeString() +
  37:                 " - " + registration.EventProfile.End.ToShortDateString() + " " + registration.EventProfile.End.ToShortTimeString();
  38:             
  39:             if ( !"".Equals( registration.EventProfile.ConfirmationText.Trim() ) )
  40:             {
  41:                 this.lblEventConfirmation.Text = registration.EventProfile.ConfirmationText;
  42:             }
  43:             else
  44:             {
  45:                 this.pnlSpecialNotes.Visible = false;
  46:             }
  47:  
  48:             this.lblRegistrationID.Text = registration.Guid.ToString();
  49:  
  50:             // Set the barcode source to be this page (the b=1) will cause the
  51:             // image output to be rendered on the fly via the OutputBarCode method.
  52:             imgBarcode.ImageUrl = Request.RawUrl + "&b=1";
  53:         }
  54:     }
  55:  
  56:     /// <summary>
  57:     /// This method will create the barcode and stream the image
  58:     /// data to the Response.OutputStream.
  59:     /// </summary>
  60:     /// <param name="text">the text to barcode</param>
  61:     private void OutputBarCode( string text )
  62:     {  
  63:         string TypeFaceName = "barcode font";
  64:  
  65:         PrivateFontCollection fnts = new PrivateFontCollection();   
  66:         fnts.AddFontFile( Server.MapPath( "~/BarcodeFont.ttf" ) );    
  67:         FontFamily fntfam = new FontFamily( TypeFaceName, fnts );    
  68:         Font fnt = new Font( fntfam, 46 );                                       
  69:       
  70:         //Draw the barcode as an image 
  71:         Bitmap bmp = new Bitmap( 500, 60 );           //Canvas size    
  72:         Graphics g = Graphics.FromImage( bmp );
  73:         g.Clear( Color.White );
  74:  
  75:         Brush br = new SolidBrush( Color.Black );
  76:         StringFormat stringFormat = new StringFormat();
  77:         //stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;
  78:  
  79:         g.DrawString( text, fnt, br, 10, 10, stringFormat );
  80:  
  81:         Response.Clear();
  82:         Response.ClearContent();
  83:         Response.ClearHeaders();
  84:         Response.ContentType = "image/jpg";
  85:         Response.AddHeader( "Content-Type", "image/jpg" );
  86:  
  87:         bmp.Save( Response.OutputStream, ImageFormat.Jpeg ); 
  88:         bmp.Dispose();
  89:         Response.End();
  90:     }
  91: }

I yearn for and typically choose only elegant solutions, but in times of desperation it's not beyond me to use a hack to accomplish something.  I'm not proud of it, but I do see it as sign of my practical side.  I also don't enjoy javascript, but I don't know where I'd be without it in my toolbox.

A while back I talked about editing your ChMS application, but today I went a bit further and threw in a little javascript hack to help deal with a process problem (having to do with how people should be added to existing families) that has another corresponding family syncronization issue between Arena and ShelbyV5.

I wanted different custom content to appear above the Family Wizard based on what tab or content might be in a tab. When you're on the "Record/Member Status" you will see our applicable message, but when you're on the Address tab and if there is a duplicate family warning I wanted to have a different message.  When on the other tabs you see no message.

Status tab...
one tab

Address tab...
Address tab, no problem

Address tab with the notice...
Houston, we have a problem

Since the Family Wizard sits on one single page, you have to get creative to make this one happen.

To accomplish this hack I just gave each of my Advanced Html Text div content blocks a unique ID and a style of display:none.  Then I added a new Advanced Html Text block below the Family Wizard module that has some javascript which examines the querystring, and if a particular tab found, it looks for certain content (NOTICE: Multiple...Same Address) in the page.  Based on the condition, it will set the display style to block.

<div id="addressNote" style="display: none; margin-left: 5px; margin-bottom: 5px; background-color: #FFFF99; font-size: 12px; width: 600px; border: black 1px solid; color: red; display: none; padding: 5px 5px 5px 5px"><b>STOP!!!</b><br>If the person you are adding is related to the family shown below <b>DO NOT PROCEED</b> - contact Julie Ballentyne. You may continue only if the family listed below is NOT related and you <b>DO NOT check any checkboxes</b>.</div>

link to this javascript file:

<script type="text/javascript">

// from http://www.netlobo.com/url_query_string_javascript.html

function gup( name )

{

      name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");

      var regexS = "[\\?&]"+name+"=([^&#]*)";

      var regex = new RegExp( regexS );

      var results = regex.exec( window.location.href );

      if( results == null )

            return "";

      else

            return results[1];

}

// Look for the NOTICE text inside a DIV with a class name of "heading2"

function checkForDupNotice()

{

      var pageContent = document.getElementById('pageContent');

      if ( pageContent )

      {

            var allDivs = pageContent.getElementsByTagName('div');

            for(i = 0; i < allDivs.length; i++)

            {

            if (allDivs[i].className == 'heading2' && allDivs[i].innerHTML == 'NOTICE: Multiple Families at Same Address' )

                        return true;

            }

      }

      return false;

}

var tabParam = gup( 'tab' );

if ( tabParam == "Address" && checkForDupNotice() == true )

{

      var addressNote = document.getElementById('addressNote');

      addressNote.style.visibility='visible';

      addressNote.style.display='block';

}

else if ( tabParam == "Status" )

{

      var note = document.getElementById('memberStatusNote');

      note.style.visibility='visible';

      note.style.display='block';

}

</script>

The IE Developer Toolbar is a must have for investigating the DOM on pages where you don't actually have the source.

3 Comments
Filed under: ,

I've been working on an Arena "search connector" control that talks with our Microsoft Search Server 2008 (SS) in order to provide a seamless search integration with our Arena powered website.  Ultimately, I think we're probably going to be bailing on this new product...

It's been a challenge to get the SS webservice to work with anonymous requests.  This may be in part due to the fact that SS is built on Microsoft's SharePoint platform.  Derek said this (see picture) is what happens when you install the free Search Server RC.  Yikes!  That was a new, clean server...  Then there is the matter of trying to manage the application in three layers (IIS, SharePoint, and Search Server) and Bil Simser's blog entry illustrates only the smallest aspects of the madness -- the rest must be seen to in order to believe. After spending a day making various recommended config changes, Derek and I were still getting "HTTP status 401: Unauthorized".
IIS Madness

The other issue has to do with the inability to control what page content is indexed by SS when the site is crawled.  With a Google Mini you can wrap content in your page (such as your navigation bar's content) with these tags:

<!-- googleoff: index --> <!-- googleon: index -->

...in order to exclude that from being indexed to your page.  Microsoft's Search Server does not have such a feature.  Instead they only have a way to exclude pages based on URL path name patterns. This is fairly critical issue for us due to the way our current site's navbar works.  All the page titles are in our navbar but are hidden from view unless the user clicks on the menu-twisty.  Unfortunately they are still 'visible' to SS.  I guess I could AJAXify our navbar, but the top level items would still be indexed on each page.  Or I could Flash or Silverlight it... or find a better search service.

It's been a busy past couple of months.  Besides the typical vacation/holiday time spent on Thanksgiving, Christmas and New Year's, we also did a few other things before the year ended.  We switched our small group ministry off GroupFinder and onto Arena managed Small Groups.  Thanks go to Jeff Gibson and his team for their go-for-it attitude, data entry/management, as well as training the entire team of small group leaders!

Arena integration with one of my Attribute UtilitiesWe also just completed our conversion from ShelbyV5 Contributions to Arena Contributions.  Thanks to Michele, Stacey, and the CCV financial team (for spending time answering our many questions) this project was also a success.  There were a few bits of custom code I had to write since we use something called the "Envelope Number" which Arena currently does not support -- but I'm told by very reliable sources (the developers) will be coming in a future version of Arena.

Being able to get back to developing was nice, but it was not the most glamorous of coding tasks.  Does anyone actually enjoy coding label layout and such?  No, what I'm most excited about are two new things from Arena... the Arena Nightly Build (or beta) and the new MyPortal framework.

Although not currently available to all Arena Community Developers since it is still in a pilot phase, I was recently asked to participate in the Nightly Build program.  [Keep an eye out on the Arena Community Developer's Blog for a future announcement.]  In my humble opinion, this is a HUGE leap forward for the Community.  Developers will be able to prepare their next gen Modules before the official release and will also have what they need to foresee any possible conflicts between their existing custom code and the next release.  Potentially they'll also have some opportunities to help find any bugs that are creeping around in the trunk.  Way to go Mark, Steve, Jeff and team!!

The other piece (now in the Arena beta) is the MyPortal framework change.  This seed was planted long ago and we've been discussing this with the Arena developers since the Fall roundtable while Caleb's been busy cranking out the code.  the dock container systemSoon, Arena will have the functionality that will let us develop truly 'personalizable portal modules for our website.  We, the administrators, get to decide what modules are shown (or available for display) on a portal page, and users get to personalize the page/modules.  At first glance this may not seem like an important change, but without it, it can be quite difficult to write modules that satisfy all users.  I'm not going to spend time making the case here, but certainly iGoogle would not have succeeded if their modules were not personalizable or customizable.

The "Upcoming Birthdays" module [insert blog reference here] that Dallon created will really benefit from personalization. (I forgot to blog this in December but will do so shortly.)

0 Comments
Filed under: ,

SharpForge

One of the things I think we'll need to address within our Arena ChMS Community is the ability to have (manage) multiple developer custom projects.  While its possible to do this without a tool, its terribly inefficient and not recommended.

SharpForge is an open source .NET 2.0 (C#) software project hosting web application that promises to be an easy way for teams within your organization (ie, the Arena Community) to manage and share their projects. (Think SourceForge or CodePlex but you get to install it on your own server for your own private/public organization.)

Features include release repository, source code repository w/Subversion support, forums, work item tracking, wiki, and chat.

I think the system looks promising and has potential, but as it is currently in beta, there are some problems (just viewing the site in IE 6 caused my IE to crash three times).  Go check out their site http://sharpforge.org/ but go there with Firefox or trying IE7.

ArenaLately I've been getting lots of questions about my experience with Arena.  The last set of questions were particularly well thought out so I got permission from the good people (Zana and Win) at Christ Chapel Bible Church to share their questions and my responses with anyone who is interested.  I guess this post will only be of interest to other churches that are also curious about Arena... and I hope this information is helpful to anyone who is looking to upgrade their existing ChMS.

---

Q: Please share with me the dynamics of your church demographically, type of government, size of staff and congregation, etc. 

We have 8 services on two campuses (2 Sat and 6 on Sunday) with about 3200 attending one campus and about 3200 on the other.  Our senior pastor answers to the elders, of which he is one, however the running of the church is basically left up to the pastor’s staff.  I think it is correct to say that the elders direct the vision of the church.  I believe we have about 120 full and part time staff (including the maintenance staff for the two campuses).

Q: What database, etc. were you using prior to Arena?  Shelby?

We were using ShelbyV5 – for both Membership and Shelby Financials.  The Shelby Financials was (and still is) on an entirely different server and database, and is fully disconnected from our ShelbyV5 Membership system. We’re planning on turning the ShelbyV5 Membership system off in January.  Our entire staff has now been using Arena since April and only a small contingent is still using ShelbyV5 Membership to manage weekly contributions.  With the recent release of Arena 2.0, we’re working toward moving to Arena Contributions before the start of the year.

Q: What prompted your initial interest in Arena?  Which features interested you the most? 

We’ve known about Arena (previously called Solomon) through Jon Edmiston and David Turner of Christ’s Church of the Valley (CCV), the original developers, for several years now and have even based some of our own systems (Web Prayer and Involvement Tracking) on code that later evolved into Arena.  I like to think we (Phil James, our IT Director and me) were one of the groups that kept pushing Jon Edmiston and David Turner to share Arena in some fashion.  Prior to the official news of Shelby obtaining Arena, we had investigated and eventually ruled out several options for moving forward with a new, more modern Church Management System (ChMS) including:

  • The possibility of partnering with a large church in Illinois using their system – their system was not as sophisticated as Arena (then called Solomon) and I believe they were essentially unable to partner at that time.
  • We investigated using Fellowship One – we were not quite satisfied with having our data beyond our control, relying on the internet, the hard costs, and having to be constrained to do ministry one way.  I think mostly we still wanted to be able to develop modules for what ever ChMS platform we would select.
  • We beta tested using Microsoft CRM 3.0 as a platform for a custom ChMS – this is a very costly and difficult challenge at this point in CRM’s lifecycle.
  • We also considered developing our own custom ChMS built on top of DotNetNuke, a very popular and decent ASP.NET web application framework.  This option can be risky unless you’re planning on becoming a software shop (not something we really want to do).

Ultimately what we like the most about Arena is:

A) It is an extremely functional, beautifully designed, beautiful looking, web based, intuitive, easy to use core ChMS system that was written by a church for a church and is now supported by a company that has a proven track record.

B) It is fully extensible and modular allowing us to write custom add-on modules that seamlessly integrate with the core product.

C) The vision of a community of developers from many churches all working toward one purpose (His kingdom on earth) and sharing modules they write with each other.  And this is not just a vision – it is now a reality!

Q: Can you share with me some of the process you went through to decide to go with Arena?  (Research, presentation to church leadership, etc.)

We kept our leadership informed during our investigation in each of the four bullet items mentioned above.  We were nearing the end of the last item’s investigation cycle (custom ChMS on DNN) and were about to go down this path when we received the news that Arena (CCV’s Solomon) was becoming a Shelby product.  We shared our ABC beliefs (above) with our leadership and they gave us the green light. 

Q: When did you implement Arena?  Please explain the process, procedure, personnel needed and feedback on how it went initially.

I did some minor testing in January and then me and a part time data analyst implemented Arena in February and spent about a month cleaning data (mostly Shelby profiles) and learning how we would roll it out to the staff.  We unveiled Arena to several key departments in March and shortly afterwards brought in the Arena trainer to train our key administration staff.  We then created a one hour “class/presentation” and had our part time analyst and another gifted administrator train all staff over the course of two weeks.  After another month or two of using Arena, answering questions, and implementing several additional features, we decided to tackle rebuilding our website inside Arena so that later implementation of other functionality (Promotions, Event Registration, Newsletters, Small Group management, Web Prayer, Involvement Tracking, etc) would integrate easily and seamlessly.  We completed the website project in August and then began rolling out web content editing (or CMS; another really nice feature of Arena) so that each ministry/department now updates their own web pages.

Q: Please share with me your feedback on Arena’s support system and training, etc.

Arena’s support center has done a pretty decent job considering they’re a new division and they’re working with a new “product”.  From what I hear, their training and even