Dan Holme teamed up with NBC television as the Microsoft Technologies Consultant to help bring the 2008 Beijing Olympic Games to television and the Internet. Microsoft SharePoint was a major part of the platform used to manage the operations that bring the events to the public. He discusses four real-life tasks that he solved by using Microsoft Office SharePoint Server (MOSS) 2007: a custom document management application, a Help desk application, a forms-based content delivery solution, and a transportation management system.
Custom Document Management
I’m often asked, “How can I hook my existing applications into SharePoint to leverage SharePoint’s collaboration features?” One of our applications is a custom Microsoft .NET application that—put simply—generates specifications about venues so that engineering and production staff know what types of situations they’ll be dealing with. One of the outputs of the application is a PDF file about the venue. In this Games, the application was modified so that instead of storing the PDFs in a traditional file share, the PDFs are saved to a SharePoint document library.
You have several options for saving PDFs to a document library. The most complex and rich method is to use code (or a third-party tool) to generate the PDF on the SharePoint server, then develop custom code using the SharePoint object model to manage document metadata (columns) and manipulate the document library. But there are easier methods. You can email-enable a document library so that email messages with an attached document can be sent to the library, and the library will receive that message and automatically store the document—and, optionally, the message as well. This is one of the easiest ways to extend existing applications: just have the applications email the document to the address of the library. Note that this method effectively populates the document library, but you would need a workflow or other programmatic or manual method to configure document metadata.
You can also use Web Distributed Authoring and Versioning (WebDAV) to interact with SharePoint document libraries. Our custom application saves its PDFs to the document library using the URL of the library. WebDAV lets you use standard Windows methods to retrieve documents from a library—you can even map a drive to a document library. Therefore, we also used WebDAV to implement simple document library replication. The PDFs generated by the custom application need to be available on servers in both Beijing and New York. We needed a lowoverhead way to get documents from Beijing, where the documents are generated, to New York, where they are available in a read-only library. We opted to use a scheduled task to launch Robocopy to mirror the contents of the document library in Beijing to the document library in New York.
When you use WebDAV to interact with a document library, you lose metadata richness. So, for example, we can’t mirror metadata about a document in Beijing to New York. But metadata replication wasn’t a requirement, so by focusing on the core requirement, we found a solution that the team liked and that took less than an hour to implement. If our requirements were any deeper, we would have needed a third-party content replication application.
Help Desk Application
The site templates available out of the box with SharePoint are generic at best. If you need a SharePoint application that supports a specific business task, function, or department, you’re out of luck. Out of luck, that is, unless you turn to the Fabulous Forty application templates that Microsoft has developed. Application templates provide a lot of cool, out-of-the-box functionality through custom lists, libraries, workflows, content types, and Web parts. The Fabulous Forty includes templates for dozens of scenarios, including a Help Desk template that we’ll be customizing to support the Help desk for NBC during the Games. You can download the templates at www.microsoft.com/downloads/info.aspx?na=22&p=1 &SrcDisplayLang=en&SrcCategoryId=& SrcFamilyId=&u=%2fdownloads%2fdetails .aspx%3fFamilyID%3d5807b5ef-57a1-47cb- 8666-78c1363f127d%26DisplayLang%3den.
In Beijing, we need an application to support the Help desk, which exists for about four weeks and is crucial to operations. But the limited lifetime of the application means that we need an inexpensive, easy-to-useand- maintain solution. We used the Windows SharePoint Services (WSS) 2.0 Help Desk application template in Torino, and we’ll be making even more use of the WSS 3.0 version in Beijing.
The template provides a ticketing system that lets our Help desk staff enter tickets, update and track issues, and assign tickets and tasks, which is important because a ticket might cross from one shift to another. The template also lets our Help desk manager monitor progress on tickets and pull reports. I’ll be monitoring the template to look for common concerns that we can address with training or through configuration changes to clients and applications.
Because you can extend these templates, we’ll add a Calendar list to incorporate our Help desk staff scheduling so that we always know who is on duty and which escalation points are on call. We’ll use a Contacts list to store the contact information, and we’ll have a mobile access page for that list so that we can get to contact information using a PDA from anywhere on our network.
If you’ve paid any attention to the preparations for the broadcast of this Olympics, you’ll know that a huge amount of content will be made available over the Web and to your mobile devices. For the first time, you’ll be able to watch events from any device and be able to see events and competitors you’ve never had the chance to see before. In Salt Lake City and then Torino, where NBC expanded its coverage to a broad range of broadcast and cable channels, the sport of curling caught fire. I’m excited to see which sports, countries, and athletes capture our imagination this summer!
To get all that content to the right media outlets, a dedicated video distribution application takes video packages and delivers or streams them. A large amount of metadata accompanies each package—metadata that varies per outlet. For example, the “Title” field can be long on Amazon.com, but must be short for mobile Multimedia Messaging Service (MMS) delivery.
Additionally, editors must be assigned to create the packages. To make it possible for mere mortals to enter all this data, preferably before the Games begin, we need a userfriendly interface that exposes just the right data, performs data validation, ensures that required fields are completed, then transforms all this information into the XML file required by the video distribution application. Once again, SharePoint came to the rescue.
Continue on Page 2
We built the UI—the form—by using InfoPath 2007, which allows us to embed the business logic into the form so that when an editor works on metadata for a specific package, the only fields that appear are those needed by the appropriate outlets. The form also makes sure the data complies with the datatype and content requirements of the video distribution application.
So that we don’t have to deploy the InfoPath client on our systems, we’re using InfoPath Forms Services, a feature of Microsoft Office SharePoint Server (MOSS) 2007 Enterprise Edition, to render the forms in users’ browsers. When a form is saved, the data is stored in a SharePoint list, and a custom application page uses a workflow to publish the data to the XML format that the video distribution application requires. This application is the most heavily coded application of the four SharePoint solutions I’m describing in this article, and even this application took two smart folks from Net- Fusion, a Microsoft Gold Partner, less than two weeks to create. It would have taken months without the functionality that Info- Path and MOSS provided.
I’ll create custom views of the SharePoint list, add alerts, and create Microsoft Excel reports linked to data in the list. These tools will allow editors, producers, and management to perform their responsibilities related to the process. So if you watch any of the Games on a device other than a television, know that SharePoint helped it get to you.
Speaking of applications that could have taken months to create, let’s talk about the transportation management application we developed in just a few days, without ever opening Visual Studio. NBC’s thousands of employees, contractors, and vendors need to travel all over Beijing. And you’ll know when watching the Games what a masterful feat it is to move team members from point A to point B. The transportation group consists of a handful of talented folks who must coordinate hundreds of rides every day for more than three months and oversee as many as 200 vehicles and drivers. We had to provide a way to make it all easier to manage.
The transportation management application needed to allow any transportation team member to enter information about a ride request, assign a vehicle and driver (a “transfer”) to fulfill the request, and enable monitoring and reporting of the transportation group’s activities. In previous Games, all ride requests were submitted by phone. This time, we wanted to let users submit requests online. Because SharePoint can use alerts and workflows to notify users when data changes, I wanted the application to notify a user when his or her ride request had been assigned a transfer, so that the user would know which vehicle to look for, when the ride would depart, and who else was going on the same ride.
The challenge with this application began with the data tables. To properly support the application, we needed tables with vehicle information, ride requests, and locations. The transportation team needed to be able to easily pull up information such as addresses, maps, and even photos of buildings. SharePoint isn’t built to create or support relational databases out of the box. However, with Microsoft Access as a client, you can create an application that provides, through queries, the ability to relate data in various lists and delivers a rich, form-based interaction with that data. Traditional Access applications had data in tables within the database (.mdb) itself. Many IT pros have learned that you can gain a lot by putting the data on SQL Server or, now, a SharePoint server instead, and use Access only as the front-end application.
There are several ways to build Access applications that are front ends to Share- Point lists. You can build an Access database and use the migration wizard in Access 2007 to move tables to a SharePoint site as lists. Or you can create the lists in SharePoint and pull them into an Access database application as linked tables. I chose the latter method.
Access then lets you create queries and rich forms; any additional functionality you need becomes an Access programming task rather than a SharePoint programming task. For example, I wanted to give the transportation team a way to identify which of the 200 vehicles were available at a specific place and time to fulfill a ride request. This required a fairly sophisticated SQL query, which I built in Access with help I found via my favorite Internet search engine. I also wanted fields to autopopulate data to reduce data entry for users and transportation managers. I accomplished this with simple Visual Basic for Applications (VBA) code behind the Access forms. In less than three days, I had a rich application that will support our complex transportation management needs.
But I also wanted to provide some of the “nice to have” functionality for this application. First on my list was a Web form for users to submit ride requests. This was easy thanks to SharePoint Designer. I created a new Web form, dragged my SharePoint list onto the form to create the data connection, then modified the Insert template, which is the form rendered by the server when a user creates a new record. Within an hour, I had the form I wanted.
The next step was to create alerts for users. I created a custom view of the ride request list, called My Rides, which filters the list to look for items for which the Created By field was equal to \[Me\], a special token in SharePoint that translates to the current user. So when I go to the list, I see only my rides, and when another user goes to the list, she sees only hers.
One of the lesser-known features of Share- Point alerts is that when you create a custom view, you can generate alerts, based on changes to data, that appear in that view. So your view can be a filter for your alerts. This feature isn’t well known because the option for creating a view-based alert appears only after you create a custom view, so you might not have ever noticed that option. After I created the My Rides view, I assigned the view to all users. Now, when anything changes about a ride for a user, the user will receive an alert with the appropriate information. We’ll be testing the alert-based notification for a few weeks. If it doesn’t meet our needs, I’ll use SharePoint Designer to create a custom workflow to achieve the same email notification.
I learned some important lessons from building this application. Because SharePoint doesn’t support relational data very well, I needed to denormalize some data points. That is, I have some redundant information across tables. For example, when a user’s ride request is fulfilled as a transfer, the vehicle number is entered into the transfer table and into the ride request table. Code within the Access form enters the data automatically, but it’s redundant. That was necessary to give the correct experience and information when a user visits the site online or receives an email notification. SharePoint has lookup fields, but working with them can be difficult (e.g., there are places where doing searches, sorts, and queries based on their content isn’t so easy). So, I cut my development time significantly by entering information into two fields—a lookup field, which lets users jump to related items via a link when visiting the application online, and a normal text field, which is easier to manipulate programmatically and to generate views and queries.
Using Access as a front end to a Share- Point application isn’t the right solution for every challenge, but since we had a limited number of internal transportation managers who need to interact with the data in a rich way, we can deploy Access to their systems. All other users will be interacting with the ride request form and with the ride list online, and with email notifications. We could have created part of the solution using SharePoint Designer and its powerful Data View Web part, or we could have opened Visual Studio. But we met our requirements with an easy solution within which the only custom code is related to automating the process and reducing data entry.
On to the Games
These four applications demonstrate some interesting uses of SharePoint to solve problems. I’m writing this article a few months before the Games, and by the time you read this, we’ll be running full speed toward the Opening Ceremony on August 8. We’ll have learned even more by then, and you can learn about these applications at my blog, share.intelliem.com/cs/blogs/danholme.