Enterprise 2.0, Powered by SharePoint
2. May 2009 06:57

"Web 2.0" is old news now right? How about "Enterprise 2.0"?  What does technology and social interaction inside the enterprise look like when we start to leverage some of the concepts we've developed for public networks?  Perhaps even more important -- What tools do we use to power social interaction within this new paradigm?  Are they the same tools we used on the web, or altogether different?

 

Let's start by overcoming the buzz words.  First, "Enterprise 2.0" refers to two thing, the corporate social network and collaboration.  The former being something relatively new (but known), and the latter being something we've been getting good at for quite some time.  Social Interaction through technology, or social networking, is something we are all very familiar with in our daily lives on FaceBook and Twitter.  But what does the Corporate Social Network look like?  What does it even mean? I took my best shot at defining it:

"A corporate social network focuses on building communities of people who share related responsibilities and goals, or who can increase productivity through awareness of the responsibilities and goals of others."

So where our public social networks focus on building communities of people with similar interests, our corporate social network builds communities of people with similar responsibilities, and perhaps more importantly, communities of people who can benefit from the awareness of others responsibilities.

 

How do these people benefit from the network?  The primary benefits focus around the awareness factor --Awareness of who in the organization knows what and who knows whom.  For example, the sales division can have insight into exactly who is an expert on a particular product's features, or who in the organization may have a personal contact inside a client organization.  Knowledge can be transferred and preserved with greater ease through wikis or blogs, and collaboration can be dramatically enhanced, even across geographical boundaries by connecting people based on their roles and needs within the enterprise, instead of their physical locations.

 

The other half of this equation, Collaboration, is equally important.  There is little use in my participating in a community with my coworkers if we are unable to create productive outputs, whether they be documents, clients, ideas, or anything else that is relevant to our organization.  SharePoint Server has clearly differentiated itself in being able to quickly solve the collaboration problem.  When used properly it enables users to find information quickly, collaboratively share information in workspaces, and track this collaboration.  But when you actually create one of these pieces of information, or find a relevant item, what other information do you most likely need next before you can act?  Most often you are now faced with contacting someone mentioned in the document to ask some type of question:

  • How was this information used?
  • Was it successful?
  • Who worked on creating this?
  • Why did they create this?

This is where Collaboration begins to benefit from the Corporate Social Network.


So what features do we need, and how does SharePoint help?

 

There are literally thousands of social networking patterns that have been implemented with various degrees of success, everything ranging from GeoTagging to Mobile Status-casting.  Every organization will benefit from different facets and interfaces that can be applied to the underlying data model.  Here I have pulled out some of the more common patterns that most organizations will benefit from.  Along with each I provide commentary on implementation ideas.  Hopefully these will spur ideas for you to leverage within your organization.

 

Feedback Mechanisms are perhaps one of the most valuable first steps in opening the two way communication channels that can truly influence change in the management of processes and an organization as a whole.   Feedback can be provided on documents, articles, pages, policies, or virtually any data stored in the portal.  This may include:

  • Comments
  • Reviews
  • Ratings

While most of these features are not native on the SharePoint platform, they are often trivial to create.  A related list and some creative data views are in many cases all that is required.  The Community Kit for SharePoint already has a blog and wiki with full-featured comments and discussions.  Ratings are available through the SharePoint Tool Basket on any list, issue, document, link, or calendar.

 

Collecting  refers to any features that allow a user to build a collection of items that they find interesting or useful within the organization.  This may be documents, links, how-to's, or even people.  Examples are:

  • Savings content
  • Subscribing to alerts
  • Adding to a 'favorites' list
  • Subscribing to RSS

Frequently there will be custom collections based on the type of organization a user is working in.  An energy company may have "My Oil Rigs" collections and a sales organization may have "My Clients" lists to aggregate relevant entities that a user can benefit from tracking.

All of this functionality is native within SharePoint -- RSS feeds can be generated on virtually any content, Search Alerts can be extremely powerful, especially when customized and recommended to users based on perceived audience type, and the "My Links" functionality can be re-branded as needed.  Additional collections can be created as part of a default My Site template.

 

Broadcasting information is a relatively simple concept, but an important way to empower individuals to share and document tribal knowledge, and spread relevant information to their peers. 

  • Blogs
  • Microblogging

Blogs are native within SharePoint Server and can be enhanced with various community tools.  Microblogging can be implemented in a variety of ways -- Integration with Office Communicator, Twitter and Yammer are all becoming more popular.  Twitter and Yammer have such robust service models that they can be integrated to with nothing but SharePoint Designer and Data Views.

 

Circle of Connections or the concept of creating a network of other people, in which attributes can define differences in the types of relations, are critical to successful collaboration and broader awareness in the organization.  SharePoint natively provides some loose colleague information based on user profiles -- But this can be vastly enhanced with small customizations.  Basic search queries can be used to recommend relevant people to the user while browsing the site based on any attributes in the profile.  A user can be prompted to add a user as a connection by simply inserting a row into a custom connections list in a My Site.  This topic alone merits a long article and we'll dive into it in the near future.

 

Presence is a simple, and native feature of SharePoint, which shows when a user is online, and how they can be contacted.  If surfaced intelligently within the interface it can greatly ease the communication between users.   For example, a user may find a document and see immediately the author of the document is online and available for chat or a phone call with a single click.  Questions can be answered immediately and lost time is drastically reduced.

 

Integration is perhaps one of the easiest ways to quickly drive usage of a portal.  Every large organization is powered by a web of line of business applications ranging from CRM systems to accounting systems, HR systems to product databases.  In many cases only specific users have access to data in many systems.  Simply leveraging SharePoint's Business Data Catalog to pull this data into Search, dashboard pages, and mashups for users can allow access to vital information that otherwise would be unavailable and reduce the workload on those individuals who have traditionally had access to the systems.  A byproduct of this is often a savings in license costs due to a reduce need to purchase client applications for line of business systems.

 

Measuring Success

Finishing implementation of an Enterprise 2.0 project is only the beginning of a long journey towards success.  We have to gain user adoption, create efficiencies, and in the longer term, have a definitive return on investment.  I stated earlier our goal was to "increase productivity through awareness of the responsibilities and goals of others" -- So how can we measure if we have increased this awareness and what effect it has had?

 

There are a combination of hard and soft metrics we can track and analyze:

  • Portal Traffic 
  • User ratings on content
  • Search logs and the perceived relevancy of results
  • Collecting behavior -- Quantities and usage of subscriptions/alerts/favorites
  • Traversal of networks -- If implemented, the frequency of users finding content by traversing recommended networks of users and departments.
  • Interviews and Surveys to measure user satisfaction and awareness
Tags: , , , , Comments (3) | Permalink
Auditing and Compliance in WSS 3.0
29. January 2009 14:29

Auditing from within MOSS (SharePoint Server) is quite simple -- There is a UI for enabling and disabling all of the events you may want to audit.  There is also a facility for viewing and exporting these logs.

However, what if you would like to use auditing features in WSS 3.0 without MOSS?  Believe it or not, most of the same auditing functionality is available, but without a UI.

Most of the information you need to do this is available already on the web, however its very spread out and difficult to digest.  Rather than repeat information that is available elsewhere, let me point you to all your options with some explanations:

You can enable auditing on the list or site level via code -- Here's an example of what that looks like:

SPSite siteCollection = SPContext.Current.Site;
siteCollection.Audit.AuditFlags = SPAuditMaskType.All;
siteCollection.Audit.Update();

You might do this in a feature, or as an application page.



Here is additional information on enabling Auditing for a document library.



Here is information on enabling auditing for a site collection.



You can also enable the auditing without writing any code, using this custom STSADM command from Gary Lapointe.



Then you might ask yourself...



But how do I view my logs?



There is less information available about this.  First, let's talk about where the logs live.



Audit logs are stored in your sites content database, in a table called "AuditData".



That table has a logical schema, and looks like this:



[SiteId] [uniqueidentifier] NOT NULL,
[ItemId] [uniqueidentifier] NOT NULL,
[ItemType] [smallint] NOT NULL,
[UserId] [int] NULL,
[MachineName] [nvarchar](128) NULL,
[MachineIp] [nvarchar](20) NULL,
[DocLocation] [nvarchar](260) NULL,
[LocationType] [tinyint] NULL,
[Occurred] [datetime] NOT NULL,
[Event] [int] NOT NULL,
[EventName] [nvarchar](128) NULL,
[EventSource] [tinyint] NOT NULL,
[SourceName] [nvarchar](256) NULL,
[EventData] [ntext] NULL


You may need to join this data to your Site table via the SiteID if you want to report on it effectively with SQL Reporting Services or even Excel.



Additionally, the Audit API has a more 'proper' way to access the audit data which will be safe in the event that the underlying schema changes in a future update.



Ted Pattison has prepared a sample with the ability to configure the logs and view the log data using the API.



Oh, and of course I plan to add the ability to view audit logs to my SharePoint Log Viewer in a future version!

Tags: , , Comments (2) | Permalink
Displaying 'Person' Columns with Presence in a Data View
27. January 2009 15:21

(The title of this post could also be: "How to disable output escaping of the columns in your SharePoint Data View from SharePoint Designer")

You may have tried to use a list with a Person column as the source for a Data View.  You may have even had Presence information available in that column.

It's likely that all you got was a bunch of garbled HTML when you actually rendered the column.  This is because by default, the XSL transformation will escape all the HTML characters rendered for the "People" column type.  With a simple attribute in your XSL you can fix this, and show single and multiple Person entries correctly.

If you look in your code view in SharePoint Designer where the column is rendered, you'll see a simple value-of select like this:

<xsl:value-of select="@People" />


Simply modify that by adding an output escaping attribute:



<xsl:value-of select="@People" disable-output-escaping="yes" />


And now it should render the column properly.  This will work for any data type that contains HTML.

Tags: , , , Comments (2) | Permalink
Programmatically Hide Pages From Navigation When Added To List
8. September 2008 10:17

This has become a fairly frequent request from customers using SharePoint 2007 for Web Content Management. 

Specifically, in a MOSS publishing site, it is requested that links are not automatically added to navigation when the pages are created in the pages library.  Instead, the page should be marked as 'hidden' in the navigation automatically when added to the pages library.  This applies to either Quick Launch, or the Top Navigation (or both).

Typically this is because the governance of the site involves a different person managing the navigation than who may be managing the pages, thus even when a page is added it should not show in the nav until unhidden by another party.

The easiest way I'm aware of to achieve this is with a simple event handler on the pages libraries to hide the page once it is added.

The PublishingPage object will wrap an SPListItem for us, and give us access to the navigation settings.

Here is a simple implementation of this event receiver.  Note that it references Microsoft.SharePoint.dll and Microsoft.SharePoint.Publishing.dll

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Publishing;
namespace PageNavigationEvent
{
public class HandlePageAdd : SPItemEventReceiver    
{
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
try
{
this.DisableEventFiring();
if (PublishingPage.IsPublishingPage(properties.ListItem))
{
PublishingPage newPage;
newPage = PublishingPage.GetPublishingPage(properties.ListItem);
newPage.IncludeInCurrentNavigation = false;
newPage.IncludeInGlobalNavigation = false;
}
}
catch
{
// do something clever
}
finally
{
this.EnableEventFiring();
}
}
}
}


 



For initial deployment and testing, I recommend you try out the fantastic Event Receiver Manager which is simple to install and will allow you to graphically add your receiver to a specific pages library without building a feature.



For proper deployment you will want to create a feature, which can install the receiver on all pages lists.  You can find instructions on doing this here.

Tags: , , Comments (1) | Permalink