It seems like the only time I can find to blog and work on any of my community projects in the last month is while cruising at 30k feet above the clouds. Be that as it may I did want to provide some of my promised sneak peaks of the project for some of you folks out there who have been expressing interest in this project. Along the way you'll notice that I start touching on some of the implementation details related to different aspects of the functionality found in the SharePoint User Group Portal. In many ways this project was initially intended to be used as a learning tool as much as it was for our User Group Site and the resulting community project. I had been working with several junior SharePoint developers in the last year and I wanted to provide to them a working sample of different development techniques that I've used in my last few years as a SharePoint developer. Because of this you'll find that I have touched on many different facets of SharePoint development ranging from feature development, custom list definitions, custom site definitions, and branding to more "hardcore" development of custom user controls, webparts, and custom site\application pages. In short you may find a lot of flavors. There are many avenues to achieve the same end results when it comes to SharePoint development and you'll certainly see this represented in the source code of this project. I've tried to make the appropriate development choices for many of the features but your mileage may very. Feedback and suggestions are always welcomed and appreciated. Finally I have made use of several aspects (and code bases) from the CKS Enhanced Blog Edition. At first I wasn't that fond of the CKS EBE architecture but as time went on I really found the value in the flexibility it's implementation offers and chose to implement some of those features as opposed to reinventing the wheel. With that said onto the details.
General Branding Info
The theme that you'll see in the following screen shots is one that I had developed for the Triangle .Net User Group. In the case of the User Group Portal a "theme" is a combination of masterpage, css, and xslt as opposed to a traditional SharePoint Theme. This has been ripped directly from the Modular Theme Framework (MTF) found in the CKS Enhanced Blog Edition. Additional themes will also be available at some point in time in the future and the process of building custom these will closely mirror that of the CKS Enhanced Blog Edition of which there are a few posts floating around. I think the authors of the CKS Enhanced Blog Edition implemented a very flexible "theming" system in the MTF in that it combines common branding mechanisms such as masterpages, css, and xslt driven controls into a common location.
The Home Page
The home page is of course the default landing page for the site. The general design goal of the home page has been to give the most prominent placement to meeting announcements (typically the core offering of a user group) and use the remaining space for snippets of remaining information such as General Announcements, Sponsor Acknowledgement, job postings, community events, etc. The Landing page is composed of two webpartzones and a host of default webparts (both out of the box and custom).
Meeting Details
The meeting webpart could be considered one of the focal points of the portal. It includes the details of the meeting including the date and time, Location (with link to details), speaker summary, sponsor summary, and registration status when appropriate. Additionally if the meeting requires registration the registration information is included. Finally the upper right hand buttons provide a printer friendly version of the meeting and also a calendar link to add the event to your local calendar (icalendar). Meetings are managed by several SharePoint lists including the Meetings, Sponsors, Speakers, and optionally the Event Registration list. Lookup columns to related information link the before mentioned lists together. Each list definition is implemented with Site Columns and Content Types to ease the task of introducing additional functionality in the future.
Event Registration
The registration engine is an internal registration engine and provides most if not all of the features of your typical external registration services but better integration with the rest of the site and makes use of the existing user credential store instead of having attendees create an additional account for registration The meeting WebPart is intelligent enough to know the current status of the registration and display the appropriate information (Open, Full, Closed, etc). As is common with other components the registration portion of the meeting WebPart and the registration screen itself is intelligent enough to display the current availability of registration and the individual user's registration status. Members can register for the event and optionally cancel their registration as well (Canceling registration can also be managed via the members profile). Member's receive email confirmations and event registration is managed within a custom event registration list.
Meeting Details
The meeting details page can be reached by clicking on the title link of any meeting listing WebPart (home page or meetings page and provides additional information related to the event including:
- Additional Meeting Details
- Meeting Resources (Downloads)
- Meeting Discussion - Discussions are driven by a discussion list and require authentication to be able to post.
- Meeting Pictures
- Link to Meeting Site (Optional for meetings that require additional content or a dedicated site)
The meeting detail page is implemented as a custom page along side the meetings list. It contains multiple WebPart zones along with additional default WebPart defined within the zone template. In the near future I'll be discussing some of the implementation details and specifically some of the advantages (and challenges) of this approach. In addition to the meetings list the meeting detail pages includes several other supporting lists including Meeting Resources (Document Repository), Meeting Pictures (Picture Gallery), and Meeting Discussion (Discussion List)
Meetings List
The meetings list page provides a list to all past meetings. I plan to offer additional filter criteria to the meetings WebPart (as seen on this meetings list page) to only list specific meetings based on additional meta data. For example some user groups such as TRINUG distinguish differences between general meetings, special events, special focus series, and community sponsored meetings.
Sponsor List
A kin to the meetings list the sponsor list provides a list of all User Group Supported Sponsors. Unlike the meetings list which required a custom WebPart implementation the sponsors listing requirements were simple enough that a custom view fit the bill. This page\list is rendered based on a CAML definition found in the schema.xml of the list definition on a custom page. Although this precludes the flexibility that is achieved with a XSLT based WebPart I have still provided a CSS based branding of this list so it should not normally be necessary to modify the view definition in the schema.xml (not an exercise for the faint of heart!) . Finally multiple WebPart zones will allow for the inclusion of additional functionality on this page down the road.
Sponsor Details
The Sponsor details provide more details related to the sponsor which includes sponsorship history and job posting history (for sponsors who are recruiters - often a large majority of sponsors for user groups). Sponsorship is probably one of the biggest categories I have for post 1.0 enhancements because they can often be the life blood of the group. .Among other things this will also soon include sponsorship self-service (Job Postings, Contact Information and additional value-add features for sponsor). Sponsors can be optionally linked with one or more accounts which will provide the association of a sponsor with accounts to trigger additional UI elements only visible for designated users (sponsors) within the system.
Speaker History
As with sponsor and meetings this is a listing of all past speakers for the user group. Similar to the sponsor listing implementation this screen is driven by a custom view and custom page within the list definition and rendered using CAML within the schema.xml. Beyond the speaker listing the speaker detail page (reachable from the listing page) provides some historical information on that particular speaker. Post 1.0 enhancements include the ability to upload their own speaker resources and tie in with some additional community efforts to match up speakers with user groups (more to come)
Summary
This list of features and samples is by no means and exhaustive list of the currently functionality or future planned functionality but is the core of what I have developed to date. Looking for some functionality you don't see or that I didn't talk about? Drop me a line and I'll let you know if its on the list. Looking to make some contributions? An avenue for community contributions will soon be made available and I'll keep you posted.
Once again for those of you who have been waiting to get your hands on this just a little more patience, I'm getting very close.