Welcome to MSDN Blogs Sign in | Join | Help

Check Out World Wide Telescope

The World Wide Telescope public beta was launched earlier in this week, and it's amazing! Imagine being able to zip around the universe, exploring planets and distant galaxies using the amassed images from the world's greatest telescopes. It really changes your perspective! There are also guided tours, views of the planets and much more to see.

It's also a hint at the potential of "Software + Services" ... the incredibly rich UI takes full advantage of client software, yet the image data is so vast it's only practical as a hosted service. Contratulations to Curtis Wong and Jonathan Fay for creating this ground-breaking application.

Check it out at http://www.worldwidetelescope.org/; also there's a good article at http://www.nytimes.com/2008/05/13/science/13astr.html?ref=science!

Posted by BobGerman | 0 Comments

Choosing a Workflow Option for your MOSS 2007 Solution

Last week a customer asked me a question that many others have asked before: “When should I create my workflow in Visual Studio vs. SharePoint Designer?” This question has puzzled so many of my clients that I decided it was time to write a blog posting on the subject.

To review, there are actually four options for workflow in SharePoint technologies:

1.     SharePoint Designer can be used to create workflows through a wizard user interface that resembles the rules editor in Microsoft Outlook. Workflows can be created and edited by an analyst or savvy user. The list of conditions and actions in the wizard can be extended by a developer using Visual Studio. (for more details please see the previous posting).

2.     Visual Studio can be used to create workflows. It’s easy to add .NET code, so developers have a lot of flexibility in what they can do, but it’s definitely a developer activity. Creating these workflows is much easier with Forms Services (available in MOSS Enterprise Edition and SharePoint Forms Server) than if each form must be developed as a discrete .aspx web form.

3.     MOSS 2007 includes several built-in workflows: Approval, Collect Feedback, Collect Signatures, Disposition Approval , Three-State and Translation Management. These allow extensive configuration by site administrators. Ed Hild has pointed out that the built-in “approval” workflow can be extended by adding an event handler to the “approved” event on a forms library (http://blogs.msdn.com/edhild/pages/using-oob-workflows-to-provision-sites.aspx) … the form holds a request, the built-in workflow mediates the approval of the request, and if the form is approved, the request is carried out by the event handler. Very clever!

4.     A number of 3rd party workflow products are available such as K2.Net, Skelta, Captaris, Ultimus and I’m sure many others.  Many of these products are more mature than the workflow offerings provided by SharePoint technologies, and have built-in provisions for escalating work in an organization, advanced tracking and reporting, etc.

Everybody likes to have choices, but sometimes having so many options can be confusing, and this post will try to help.

First stop is the “out of the box” workflows. They’re really quite powerful and configurable. Why build a custom workflow at all if you don’t have to?

A commonly overlooked “out of the box” workflow is the Three-State Workflow. No, this is not a workflow for use when you’re in a place like Port Jervis (which straddles New Jersey, New York and Pennsylvania)! It’s really a two-stage approval workflow, and thus it can be in any of three states, such as waiting for first approval, waiting for second approval or completed. It requires a “choice” field in the content with at least three choice values to correspond to the three states. The three-state workflow is often overlooked because its feature is not enabled by default … to use it, go to Site Collection Features and enable the “Three-State Workflow” feature. It’s worth a try, as it’s pretty flexible!

If the “out of the box” workflows don’t have what you need, then by definition we’re looking at a custom workflow. Personally I like SharePoint Designer workflows because they are the easiest to set up and modify, however there are some limitations you need to be aware of. First of all, they are edited live on a SharePoint site; there is no easy way to have a software lifecycle with controlled releases going through a build and test environment. Second, they are set up on a library by library basis, so there’s no easy way to distribute and manage the workflow across many document or forms libraries, or to connect them to content types. Finally, they are always sequential workflows, meaning they run from start to completion (as compared with state machine workflows which are best for modeling ongoing processes where work moves among a known set of states). In practice, most workflows are sequential, so that’s not a big deal. The net of it is if a workflow is a “one-off” and business users own the process, let them manage it themselves with SharePoint Designer workflows. Empowerment is good. This provides the business with more flexibility and agility.

If the workflow needs to be associated with many libraries or a content type, then it will need to be created by a developer. In addition, many organizations will prefer a formal development process, especially for business processes that have financial or regulatory impact.

If the desired workflow resembles one of the built-in workflows followed by some additional actions, consider Ed’s event handler idea.

Otherwise, it’s time to go into Visual Studio and create a workflow using the workflow templates in the SharePoint SDK. This allows developers to take advantage of the full power of .NET in a full software lifecycle; it also allows state machine workflows. There are a number of resources including videos and webcasts in the Workflow Resource Center on MSDN.

Finally, if the solution needs to have additional workflow features that would be expensive to develop, such as escalations, vacation schedules and advanced reporting, then consider a 3rd party workflow. A marketplace of options evolved during the 2003 versions of SharePoint, which lacked its own workflow, thus encouraging our partners to invest in this area; now these 3rd party products can offer higher-end workflow for customers who need it.

I hope this has been helpful in selecting a workflow option for your MOSS 2007 solution!

This posting is provided "AS IS" with no warranties, and confers no rights. Thank you for reading it!

 

Posted by BobGerman | 1 Comments

Design Patterns for Collaborative Apps - Recap of my session at the SharePoint Conference 2008

I'm writing this from my hotel room in Seattle, where I've just attended the SharePoint Conference 2008. The conference was great, and it was an excellent opportunity to meet up with SharePoint friends old and new.

I did a session called "Design Patterns for Collaborative Applications", and at the session I promised a recap with all the links from the talk, so here it is!

The idea for the talk came from working with many customers over the last few years, and noticing patterns in the solutions I worked on with them. The talk focuses specifically on collaborative applications ... that is, extending SharePoint's collaboration features to provide more integration with business processes. I showed four "patterns", each of which I've seen in multiple customers. In this post, I'll summarize each of the patterns and provide the links to the resources mentioned in the talk.

1. Business Entity Workspace

The idea here is to combine dashboards with team sites, so users can access all the information about a business entity, including both structured (LOB and external) and unstructured (documents, events, contacts etc.) information in a single user interface. Some real-world uses include:

  • The MTC where I work has a site for each engagement that also surfaces our CRM system and other tools, so everything is in one place
  • A property management company wants all the information about a property in one place, including maps and financial reports as well as leases, contracts, etc.
  • An company wants all the information about its customers in one place, including contacts, documents and financial data
  • Another company wants its product information in one place, including sales performance, documentation, etc.

I showed two ways to do this: one had a pair of web pages (a selector and a detail page), with the selector passing an entity ID to the detail page much as the Business Data Catalog profile page gets its entity ID from a query string parameter. The other had a hierarchy of sites, with a child site for each entity. The core of the solution is using Filter web part connections to select the right data to show; an advantage is that most of the built-in SharePoint web parts can consume a filter connection.

I demonstrated a new web part I wrote called the "BDC Multifilter" which, rather than just providing a single filter with the entity's ID, can provide up to four additional filters with various attributes of a BDC entity. You can even combine multiple attributes, to make a street address out of address, city, state, country etc. for passing to a mapping web part. The BDC Multifilter, along with a Virtual Earth web part (that consumes an address as a gilter) and a search web part (that consumes a query as a filter) are all available for download now at http://code.msdn.com/FilterParts. I also acknowledged that I saved many hours building the demo by using the BDC Metaman tool, available at http://www.bdcmetaman.com/, which I can recommend after the experience.

2. User Self-Service

This is a very common scenario: a user fills in a form, and a workflow runs to coordinate a business process which ultimately updates a line-of-business system. Some examples include:

  • An expense reporting application
  • Legal services, such as requesting a legal review or contract
  • Requesting a new job requisition to hire an employee
  • Taking on a new customer or engagement that requires approval and updating a CRM system

The tricky part is making it secure while providing flexibility to the business. I showed how to create custom activities in SharePoint designer - that provides the flexibility. A great and usable sample is available on Codeplex at http://www.codeplex.com/SPDActivities - the sample provides a number of new activities that work within SharePoint, but of course you can write your own to do something else. The process for writing a custom activity for SharePoint Designer is located at http://msdn2.microsoft.com/en-us/library/bb629922.aspx.

The security issue is that someone could write their own workflow to skip the business process and approvals, and just update the LOB system. The .ACTIONS file that defines the custom workflow activties is global, so even if you lock down security on the site that you expect people to use to, say, file an expense report, someone with admin rights to some other site might be able to invoke the "reimburse employee" action without the fuss and muss of having any real expenses. In addition, it's important to lock down the form ... imagine that someone alters the form to show one total to the approving manager, and hides a much larger total in the XML that controls the reimbursement.

The fix for this is to:

  • Dedicate a web application to the self-service scenario
  • Deploy your custom action code to the /bin directory of that web applciation ONLY
  • Lock down any and all sites/site collections that run in that web application so only trusted users can control the form and workflow

Another approach is to create a custom workflow in Visual Studio that includes the business process and forms along with the LOB access. This doesn't allow business users to change the workflow, however ... you decide if that's desirable or not. Yet another is to use BizTalk to manage the LOB update, and to enforce the business rules in the BizTalk orchestration. And, before someone points out the omission, there is are a variety of 3rd party workflow solutions out there that could be used.

3. Team Knowledge Base

The idea here is to provide team feedback about shared knowledge, be it a collection of documents or, as I showed in the demonstration, a wiki site. This comes up a lot in services organizations (Microsoft Consulting Services has a custom SharePoint solution called ICE that does this), and often for use by customer service reps who have to quickly answer questions on the phone. I demonstrated another internal tool that was developed by a local partner, Burntsand, that provides ratings and comments on a SharePoint Wiki. Since this isn't publicly available, I pointed attendees at another Codeplex gem, the Knowledge Base Web Part, available at  http://www.codeplex.com/spkb.

Part of the discussion was about where to store the ratings. Unless you want users to be able to "stuff the ballot box" by rating an item repeatedly, you need to keep track of individual users' ratings so they can change their rating but still only get one "vote." In the application I showed, this is stored in a set of SharePoint lists (one per Wiki page). When a user rates a page, the average is recalculated and stored right in the page for speedy access. This works well to a point, but with more than a couple thousand users (or rated objects) it's likely to slow down; in that case I'd recommend storing the individual ratings in a cusotm SQL Server database.

4. Team Tracking Workspace

The scenario here is that a team of people are working on a coordinated release of documents. Typical business scenarios include:

  • Proposal development
  • Ad campaign development
  • Books, magazines, and other publications
  • Business case development - for a new product or service

If the deliverable was code, Team Foundation Server would be a logical tool. If the deliverable is documents, SharePoint workspaces are a natural fit ... if equipped with a tracking mechanism.

The solution I showed stores document status in a SQL Server database, but I'm working on getting it to stay in SharePoint for easier re-use. Item status can be shown across all projects (each project in a child site), sections of a project (each section a document library), folders, and documents. The status is based on the approval and versioning information in the document, but in some cases more status values are needed, for a multi-level approval scenario or other multi-stage business process. SharePoint event handlers run whenever a document is added, changed or removed, and update the database accordingly.

I'm working to package this up in a general purpose way, but it may take a while since this is a "nights and weekends" type activity and I'm not sure when I'll get to it. In the meantime, if you really need it, you could develop something similar or, if you engage Microsoft Consulting Services and send the consultant to me, I can share the code through the consultant. It's a combination of it not being packaged very well, and some legal aspects which would be covered by the MCS work order.

Another, complimentary solution I showed was a very cool "Document Splitter" that breaks a Word document down into multiple section documents, and then stitches them back together, much as a slide library does for PowerPoint presentations. This is Chapter 8 in my friend Ed Hild's APress book,  Pro SharePoint Solution Development: Combining .NET, SharePoint and Office 2007. I highly recommend this book; each chapter presents a very useful Office Business Application (OBA) solution that incorporates the Office 2007 client and Office SharePoint Server 2007, and with the book comes the code I showed. (I also recommend Ed's blog, http://blogs.msdn.com/EdHild). I was pleased that the two solutions worked so well together, with just a bit of tweaking to get Ed's custom actions (split and merge menu items) to work with my "tracked document" content type it all came together in about half an hour's work. The result was an ability to have a team concurrently developing various sections of a single document, and tracking their progress throughout.

I hope the session was valuable, and offer my thanks to those who attended!

 This posting is provided "AS IS" with no warranties, and confers no rights. Thank you for reading it!

Posted by BobGerman | 1 Comments

Back in the Zone with ZoneTabs

I’m back after a long break from posting to announce the availability of a new web part that you may find helpful.

Zone Tabs 2.0 is a new version of a tab web part I previously released on GotDotNet that helps reduce clutter on a web part page by allowing you to attach the other web parts in a zone to tabs. (A web part zone is one of those rectangular areas where you can drop your web parts on a page.) For example, a web part zone might contain 10 web parts, but instead of scrolling to see them all, the user clicks different tabs to show a subset of related web parts at any one time.

Screen shot

As you can see in the screen shot, it’s possible to use more than one set of Zone Tabs on a page so long as they’re each in their own zone. In addition, Zone Tabs can be set up to pivot the web part zone between horizontal and vertical views, a function that is generally performed by developing a new page in Visual Studio or customizing a page in SharePoint Designer 2007. The new version of Zone Tabs requires Microsoft Office SharePoint Server 2007 or Windows SharePoint Server 3.0 to work.

To download the web part as a WSS Solution Package as well as full source code, please visit the new MSDN Code Gallery at http://code.msdn.com/ZoneTabs. The Read Me file explains how to install and set up the web part. This posting will go into a little more information about how I wrote it, and some cool things I learned along the way.

Creating Tabs with CSS

Horizontal TabsThe first thing I wanted to do was to make the tabs look better than they did previously. ZoneTabs 1.0 rendered itself as a table, and used some of the built-in WSS styles; for some reason they didn’t look as good in the new version of SharePoint products, even though the overall SharePoint UI was greatly improved. So I set out to make the tabs look better.

I found a number of blog articles on various ways to create tabs in HTML, and wanted something that was easy and attractive, while also easily adapting themselves to varying lengths of text. I decided on a technique called “sliding doors” which was described on several sites. Basically, the idea is to render the tabs as a bunch of anchor elements within unnumbered list items, such as:

<ul>

  <li><a href=”#”>Tab1</a></li>

  <li><a href=”#”>Tab2</a></li>

</ul>


When I first saw this I was pretty surprised that list items were being used, but it turns out that it’s possible to override the usual bulleted list using style sheets. The CSS sets the <li> tags to show most of the tab, including the top and one of the sides, and the <a> tag to show the other side. The <li>’s image is as big as a tab could ever be. This is the clever part: since the <a> tag is on top of the <li> tag, the tab edge in the <a> tab overlaps the big image in the <li> tab and thus trims it perfectly to size. For a detailed drill-down, check out David Bowman’s article at http://www.alistapart.com/articles/slidingdoors/; this has one of the clearest explanations.

For ZoneTabs, I re-wrote the CSS to my own needs and generated the tab images myself from scratch. I used a vector graphics program to make these GIANT tabs, including some blended highlights for a 3-D effect, which I converted to bitmaps (.gif files) that were much smaller and anti-aliased. Then I sliced off the edge to make two images, each of which I extended until they were big enough to handle an 800x800 pixel tab. Eventually I had an HTML page with nice extensible tabs on it, in four color sets (light and dark in blue, black, gray and gold). This was pretty tedious, I have to admit.

Making the Tabs into a WebControl

The next step was to take the HTML tabs and make them into a control suitable for use in a web part. I realized that tabs were a list of items, so I decided to jump right in and subclass the ListControl base class. For the hyperlinks, I used LinkButton controls:

int i = 0;

foreach (ListItem li in this.Items)

{

      LinkButton lb = new LinkButton();

      // Elsewhere in this class, the code expects the ID to be a

      // string representation of the tab's item index

      lb.ID = i++.ToString();

      lb.Text = li.Text;

      lb.Font.Size = FontUnit.Point(_fontSize);

      lb.Font.Bold = _bold;

      lb.Click += new EventHandler(tab_Click);

      this.Controls.Add(lb);

}

 

The best part is that the ListControl base dealt with the ListItems for me … whether they are data bound or added using the Add() method, by the time my code ran (in CreateChildControls() or the OnDataBound event), the ListItems were ready and waiting so I could create a LinkButton for each one.

The next bit of magic is in the Render() method, and it’s as simple as emitting everything except the anchor tags around the LinkButton controls as they render.

foreach (Control c in this.Controls)

{

      if (c is LinkButton)

      {

            // We know the control's ID is the item index,

            // so check to see if we're rendering the

            // selected index and decorate the control accordingly

            int controlIndex = Convert.ToInt32(c.ID);

            if (controlIndex == this.SelectedIndex)

            {

                  writer.Write("<li class=\"selected\">");

            }

            else

            {

                  writer.Write("<li>");

            }

            c.RenderControl(writer);

            writer.Write("</li>");

        }

}

 

The last piece is the event handler that handles clicking on the LinkButton controls, and adjusts the selected list item accordingly. It also fires the OnSelectedIndexChanged() event if the selected index has changed.

private void tab_Click(object sender, EventArgs e)

{

if (sender is LinkButton)

      {

            LinkButton lb = sender as LinkButton;

            int oldIndex = this.SelectedIndex;

            int newIndex = Convert.ToInt32(lb.ID);

 

            // If the user clicked a new index, then

      // update the selected item

            // and fire our SelectedIndexChanged event

            if (oldIndex != newIndex)

            {

                  if (oldIndex >= 0)

                  {

                        this.Items[oldIndex].Selected = false;

                  }

                  this.Items[newIndex].Selected = true;

 

                  OnSelectedIndexChanged(e);

            }

}

}

 

Making it into a Web Part

Remember that ZoneTabs was an update from an old-style WSS web part. The first step was to change the base class to System.Web.UI.WebControls.WebParts.WebPart, and to change the ToolPart (the fly-out used to configure the web part) to an EditorPart. I didn’t change the EditorPart much at all, though I do have some ideas on how to make it better … as they say “shipping is a feature” so I decided to make some minor cosmetic changes such as allowing users to change the tab colors, and to leave the main logic alone.

The EditorPart is just a brute force composite control, with lots of text boxes, check boxes and drop-downs to capture all the information. The tricky part is the ability to select which of the other web parts in a zone should be shown when each tab is selected. As in the original version, this is stored in a web part property in the form of an XML string.

<tabs>

      <tab name=”First Tab”>

            <webPart title=”Part1” visible=”false />

           

      </tab>

</tabs>

 

I can think of more elegant ways to do this, and to let the .NET framework do the serialization for me, but I decided to preserve the code on both the EditorPart and WebPart ends and to create and query the XML using the XML DOM and XPath queries. The trick to storing the tabs is that I store only the web parts that I want to hide and ignore the ones I want to show under each tab. When ZoneTabs runs, it loops through the web parts in its zone and checks each one to see if it should be hidden. This works best for a couple of reasons – first of all, if someone adds a web part after the tabs are in place, it will be ignored (and always shown). Secondly, if a web part is hidden due to audiences or personalization, the built-in logic won’t be affected. Thus ZoneTabs play nice with audiences and personalization.

Actually hiding a web part is very simple … I set its Hidden property to true. If I can’t find a reason to hide it, I clear the Hidden property by setting it to false.

Flipping on its side

Then I had an idea … why not try pivoting the web part zone on its side using the API? Sure enough, it worked just fine by simply changing this.Zone.LayoutOrientation. Most of the work was in adapting the CSS and images so the tabs would show up sideways as well, and this threw me back into tedious image manipulation for a little while. It’s ironic that when the zone is vertical the tabs are horizontal and vice-versa, but it makes sense if you think of it, so the tab orientation also needs to be flipped based on the web part settings.

Check it Out

Please go download the web part and leave a comment either here or on the MSDN Code Gallery and let me know what you think! For now it’s still released as a “Beta”; a few loyal Tab Part users from the old version have had success using them, but I’d like a little more feedback before I mark it as released.

Thanks!

This posting is provided "AS IS" with no warranties, and confers no rights. Thank you for reading it!

Posted by BobGerman | 9 Comments

Tag, I’m “It”: Five things you may not know about me…

Well I just got tagged by my friend Arpan Shah in what seems to be a blogging pyramid scheme, where the recipient has to reveal five things most readers wouldn't know about them (and then tags 5 other bloggers). While I normally resist the chain letter thing, this IS a good excuse to get back to blogging after a long hiatus! So here are five things about me… I'd mention my love of music but I already said that in my opening post, so here goes!

  1. OK, I'll expand on the love of music thing – in college I managed the campus radio station and hosted two shows… "Jazz Spectrums", which covered everything from Dixieland to Fusion, and "The Jungle Bob Show" which was all rock and roll. I bet you can guess what my college nickname was?
  2. Part of the nickname story was because I grew up way out in the country, in the Berkshire mountains in a little town called Cheshire. It's beautiful country; I still go there to visit my family, and the dairy cows still outnumber the people.
  3. My wife, Kate, and I have a great garden in our small back yard, which we inherited when we bought our house several years ago, and since have taken to another level. In fact, we had greens out of the garden tonight for dinner. This is unusual because it is January and I live near Boston, MA, so it should be a frozen landscape! Yesterday it was 70F (21C), and the pac choi I cut down in October had all grown back. Go figure!
  4. For many years early in my career, I worked mainly in assembly language developing device drivers and protocols to run in front-end processors. It was a lot of fun hand-compiling the code and debugging with a logic analyzer, and I learned a lot about performance and concurrency. I sometimes feel spoiled to have .NET and Visual Studio to work in!
  5. I grew up in a house of writers; my parents wrote or co-wrote over 40 books plus regular newsletters and magazine articles about banking and personal finance. I've always liked to write – you'd think that I would blog more often! ;-)

As I said, I usually don't go for these chain letter things, and was debating if I should continue it, but I can't resist -- I tag Rich Crane, Bob Goodearl, Ed Hild, Scott Jamison and John Pelak!

Posted by BobGerman | 1 Comments

A Grand Tour

Today was day #3 of the SharePoint Conference. It's about 7:00 in the evening, and I'm in the "hands-on labs" with about 200 computers and a handful of eager attendees who stayed late to work on SharePoint and Office labs. I earned my way to the conference, you see, by volunteering as a lab proctor, which is a pretty good deal if you think about it!

In addition to the content, it's been very cool to run into a number of my clients here. One of them very aptly compared the conference to a double-decker tour bus, where you get to see the sights in just enough detail to know which attractions to go back and visit later.

When I came here, I thought I was really starting to get the hang of all this new technology, but every session I attend makes me realize how much I still have to learn. "Office System 2007" - the combination of the new client and server - are truly vast. It's like the tour bus is covering the whole United States, and I have dozens and dozens of attractions to visit in depth.

So here are a few of the highlights...

===============

I knew that the new Business Data Catalog (BDC) allowed you to declaratively  connect line-of-business systems into SharePoint, but I didn’t know the full extent of it. Instead of developing custom code to connect SharePoint to business applications, a single XML configuration links business data in a number of useful ways which are pervasive within the SharePoint environment, including:

- each BDC “entity” – a customer, product, order, or whatever – gets its own profile page, which displays the details, in a similar way to a user profile page

 - SharePoint search can return business data along with documents, people and other information

 - the entity becomes a data type which can be used in lists and document metadata

 - the entity can be included in user profiles, so you can connect people with their accounts, products, etc.

 - built-in web parts can be used to browse the business data from any site

===============

The old SharePoint scaled really well; the new one will scale even more both in terms of both server and storage capacity. We got a sneak preview of the new scalability test results, which will eventually be publicly available as a white paper.

===============

Publishing forms to the web, or even to Outlook, with the new InfoPath client is much easier than I thought. I’m looking forward to digging into the new forms server!

===============

The “My Site” feature – a site for every user – is expanded in 2007… and it’s also possible to create additional “My” sites, such as “My HR”, or “My xxxx” where you can fill in the blank and create personalized sites on topics of your choice for every user.

These are just a few of the things I discovered here… and the tour bus is just getting warmed up!

This posting is provided "AS IS" with no warranties, and confers no rights. Thank you for reading it!

Posted by BobGerman | 0 Comments

Greetings from the SharePoint conference!

Today was the first day of the SharePoint conference in Bellvue, WA. Certainly the highlight of the day was a keynote by none other than Bill Gates. I’ve heard Mr. Gates speak any number of times, usually on very futuristic and visionary topics. This time was unique for me because he spoke on a topic I know well – and I was very impressed by his insights.

 

He said that the focus of Office 2007 is bridging the barrier between structured and unstructured information. Just as the Office client applications integrate functions such as word processing and spreadsheets, SharePoint integrates previously separate islands: search, document management, web management, business intelligence and more. He’s right – all these islands are available separately from different vendors, and I think the SharePoint team has done a great job bringing them into an integrated whole.

 

He also discussed SharePoint as a platform for developers. Line of business applications can inherit SharePoint’s features by developing on top of the SharePoint API’s. The result is not only reduced development costs (compared with re-implementing parts of SharePoint) – it also results in more consistent, easier to use applications for end users. This is something I’ve done a lot of at the MTC, integrating everything from risk management to property management onto the platform where SharePoint can handle the unstructured data in the context of a line of business application.

 

Another boundary Bill discussed is the boundary with partners and customers. The new version of SharePoint provides a single infrastructure for Internet, intranet and extranet applications.

 

Bill listed his Top 5 favorite parts of SharePoint, which I report here with explanations in my own words:

 

5. Community (Wikis, Blogs, RSS): These technologies leverage peoples’ ideas and help them to realize their potential. In SharePoint 2007, everything from a page or document library to search results can be an RSS feed. Blog and Wiki templates are available out of the box.

 

4. Excel Services: Why download a large spreadsheet and crunch numbers on a client PC, only to look at a chart or small result set? It makes more sense to run certain spreadsheets right on the server, and to display them as plain old HTML. Excel services provide exactly this. There are a lot of Excel gurus out there who are business and financial experts; now they can work with a familiar tool and share the fruits of their labor via a simple web interface.

 

3. Client Integration: The Office client integration in 2007 is better than ever. Bi-directional synchronization with Outlook, integrated metadata management, and direct access to document management features all add to the experience, and eliminate the need for users to bounce between client software and web sites to do routine information tasks.

 

2. Search and the Business Data Catalog: The SharePoint search engine is better than ever, with improved relevancy ranking, more flexible administration and the ability to search for people as well as data. But it really shines when combined with the new Business Data Catalog (BDC), which provides access to structured information in line of business applications. Already on our own intranet, we have a “customer” search feature, which can instantly locate customer information from our CRM system. The potential of Search and the BDC is to provide a single, simple way to locate any information, structured or unstructured, in an enterprise.

 

1. SharePoint for Composite Applications: SharePoint has been a great platform for a while now, but now with the BDC, improved connections to page context, and deeper .NET integration, it’s better than ever. The ability to surround structured application data with contextually relevant unstructured SharePoint content is extremely powerful.

 

In addition to Mr. Gates’ keynote, a number of other great sessions were offered. I enjoyed sessions on Web Content Management and Search. Web Content Management is especially relevant to me, since I’ve done a lot of work in this area, and will be co-presenting the topic at the upcoming TechEd conference in Boston.

 

Watch this space for more information on the SharePoint conference!

 

This posting is provided "AS IS" with no warranties, and confers no rights. Thank you for reading it!

Posted by BobGerman | 0 Comments

Why Extranets Matter

My last couple of blog entries have discussed technologies which cross organizational boundaries – Extranets and Groove. I thought it would be worth taking a few minutes to discuss why this is important from a business perspective, and to consider some of the patterns I’ve observed.

 

At an organizational level, Extranets are about using technology to move boundaries: boundaries of work, boundaries of access and boundaries of control. Many technologies can move these boundaries. Extranets are web sites which move these boundaries while preserving the more fundamental boundaries that surround organizational relationships, such as a client relationship. You’ll find that the same principles apply to other situations, such as eCommerce web sites. In order to be successful, extranets (and other inter-organizational technology) must move boundaries in a way that is mutually beneficial to the organizations and people involved.

 

Let's start with a relatively low-tech (and more public) example. I came across an old photograph of a food market where I often shop, taken way back in 1921. The Mugar family had purchased Star Market in 1916, and hired helpful clerks to select and package up groceries for each customer.

 

Yet, that same year, a grocer named Clarence Saunders was about to change the world. On September 16th, he opened Piggly Wiggly, the first self-service grocery store, in Memphis, TN. At the time, there were predictions that this new kind of store would fail – with open shelves and shopping baskets, customers just helping themselves and handling the products - it was shocking to some!

 

Ninety years later, we not only take self-service shopping for granted, we also check ourselves out at point-of-sale kiosks, and before we can even bag our selections, we have updated the store’s inventory and marketing databases to boot.

 

OK, now let's look at how self-service shopping changed the boundaries of business. Shoppers began doing work which had previously been done by store clerks - selecting their purchases directly from the shelves and bringing them to the front of the store. This moved a work boundary, and stores needed fewer clerks, so they were able to charge more competitive prices and their business and profits grew.

 

Shoppers got something out of the self-service deal as well. They got to look at the merchandise directly and more carefully consider their purchases: the boundary of access was moved. Also, the traffic flow through the store was improved, saving them time. And the larger stores which resulted had more choices of merchandise at better prices. So this mutually beneficial change caught on in a big way.

 

Now I don't know about you, but when the self-service check-out kiosks first came out, I wasn't too thrilled. The machines were kind of buggy, and it took longer to check out than normal. I suppose I was also learning how to use the kiosk, and figuring out the subtle interactions with the supervising store clerk who had to intervene periodically to verify I wasn't ripping anything off. I was doing more work, getting less personal treatment, and not getting any obvious benefit. Bad idea.

 

Later, the machines got better, and now I sometimes use them when the lines at the human cashiers are too long. But overall, I feel like the time savings is just a ploy: they could have hired more cashiers after all! Maybe I saved a dollar or two because of lower prices which came from not hiring so many cashiers, but frankly I’d pay a little more for the personal service. So here is a situation where, speaking for myself anyway, success is limited because only one party seems to be getting a benefit, and it's not me. Have you ever seen anyone walk past an available human cashier to go to a kiosk? That will only happen when the kiosk designers figure out a way to reward customers for using the technology.

 

OK - now let's apply these principals to extranets.

How can extranets be made to be mutually beneficial - so they're worth creating, and they actually get used? How can we move the boundaries so everybody wins?

 

There are no hard and fast rules, so I’ll present some examples of successful extranets I’ve seen:

 

Scenario #1:

A professional services firm provides news and advice to its customers via an extranet. Customers can subscribe to notifications when new content of interest to them becomes available. This moves work from the firm to its customers, which is an obvious benefit for the firm. A less obvious benefit to the firm is that it can learn about what topics its customers are interested in, by analyzing the articles they read and the topics they request notifications on. Customers get the benefit of direct access, so they can browse around more freely and at any time; this, combined with the notifications, gives them more timely and broader access to the content. The notifications are important to remind customers to return to the extranet site. The advice won’t be as deep or as personalized as it would be from a human being; hence this is best as a supplement rather than a replacement for a personal advisor.

 

Scenario #2:

A coalition against domestic violence maintains a loose network of safe houses. A woman in trouble can call a hot line 24x7 and be referred to a safe house in her area where she and her children can stay until the situation can be remediated. The safe houses use an extranet to keep a central database of available rooms up-to-date. In this case, work moves from the coalition to the safe houses, which frees up coalition staff to work on other programs. Safe houses get to control their own data, which is easier than passing it over the phone. Everyone benefits from reduced errors and more current data.

 

Scenario #3:

A job placement firm provides job candidates with online access to advice, job postings, and one-on-one online collaboration with counselors. Work moves from the firm to job candidates, who now search for their own information. Candidates get easier and faster access to both the information and their counselors. They also can more easily search in multiple geographies because job information and counselors are available from any internet connection.

 

Scenario #4:

An online service provider allows its corporate customers to manage user accounts for their employees. In this case, both work and control move from provider to customers. The provider saves work; customers get more responsive and accurate account management. This is an example where it’s easier for customers to do the work than to relay detailed information to the provider by filling in paper forms or reading it out on the telephone.

 

Scenario #5:

A real estate company provides its independent agents with detailed home listings, personal web sites, and customer relationship software via an Extranet. Although no work boundary is moved, access boundaries move both ways: the agents get access to listings, and the company gets access to customer data. Everyone benefits from the listing information and personal web sites, which drive sales. The real estate company also gets to retain the customer data, even when an agent moves to another company.

 

What do these have in common?

 

First, they are all one-to-many relationships. In most cases, work moves from the “one” to the “many.” This demonstrates a basic characteristic of one-to-many organizational relationships, which is that moving work from the one to the many provides an economy of scale. Anyone who's organized a pot-luck supper will understand the idea.

 

Second, in each case the “many” (customers, clients, students, citizens, etc.)  get more access or control in exchange for doing this work. Without these benefits, the extranet won’t work unless users are somehow compelled to use it (the stick instead of the carrot).

 

I’d argue that the carrot – providing more benefits – is key to a long-term relationship; forcing people to do extra work or to share access for no benefit will eventually lead to resentment and ultimately the loss of customers. An example of the stick approach – not an extranet, but still a helpful example – is telephone systems which force callers to traverse a labyrinth of menus to reach an customer service representative. Almost nobody likes this, but sometimes we have no alternative, when calling a utility company for example. As soon as a competitor appears with a simpler or better alternative, customers will leave. This is not the desired result.

 

If you are thinking about implementing an extranet for your organization, you probably have already considered how it can save you work or give you more information to benefit your business. The bottom line is that this is only half of the equation! In order to be successful, you need to provide benefits in exchange, so people will use and rely on the extranet. Implemented in this way, extranets can serve to deepen organizational relationships, build loyalty, and ultimately provide a win-win situation for all parties.

 

This posting is provided "AS IS" with no warranties, and confers no rights. Thank you for reading it!

Posted by BobGerman | 0 Comments

In the Groove

My latest cool collaboration discovery is Groove Virtual Office, and I’m totally jazzed by it. As you must have heard by now, Microsoft acquired Groove Networks about a year ago, and its founder, Ray Ozzie, became our CTO. (My Brush with Greatness - in 1980, fresh out of college, I worked on an early distributed OS called "Notmuch" at Data General, which was designed and led by Ray... it was a very cool project, but I doubt he would remember me...)

 

Anyway, I think Groove is a killer app, because it has transformed the way I work on a daily basis. So I thought I’d share a bit about my experiences.

 

At first, I just didn’t get it. Microsoft has a great web-based collaboration tool called Windows SharePoint Services. Looking at Groove and SharePoint, it was hard to tell the difference – they both provide collaboration workspaces with documents, events, tasks, contacts, and lists of things. So why should I install Groove on my computer when the thin-client version works so well?

 

I remember discussing this with Matt Pope, who is Group Program Manager for Groove, when he visited the MTC a while back. “Just try it,” he said. “You have to experience it.” So I tried it. And Matt was right – it completely exceeded my expectations and it does have to be experienced. But that won’t stop me from trying to explain it anyway… ;-)

 

 

Groove is like email in some significant ways – it is decentralized, it effortlessly crosses organizational boundaries, and it synchronizes in the background onto your computer, so you always have access to everything even when you’re offline. Layer onto that the idea of collaboration workspaces: instead of streams of email messages, persistent workspaces are shared in this manner. The result is a much more flexible and accessible collaboration experience. It’s also more responsive, since the data is right on your hard drive, rather than out on a web server somewhere. Content replicates its way in from your peers, and toast pops up on your desk – you can even read and update the content when you’re off line.

 

There’s a place for everything, however, and cool as Groove is I don’t think it will replace SharePoint for collaboration. In fact, they can be synchronized, and this is a very useful combination, but I'll save that for another post.

 

A good example of when to use Groove and when to use SharePoint comes from the MTC where I work. My MTC is part of a worldwide network which performs thousands of customer engagements over time. We create a SharePoint site for every engagement, and these are invaluable in providing a place to collaborate internally on planning and follow-up. They also provide a landing place for the unstructured data out of each engagement, so you can go back and review what was done when the customer returns.

 

Groove would totally not work for this!! There are too many workspaces, for one thing. I don’t want to clog up my hard drive with every engagement I ever did, much less every engagement all the MTC’s have done! Also, these sites are managed centrally – the MTC controls access based on employees’ participation and their role within Microsoft. If the MTC access policies change, the site permissions can be changed, usually by changing group memberships. Again, that’s not possible with Groove, where each workspace has its own membership list and is managed from within.

 

On the other hand, the MTC’s work with a lot of Microsoft partners, and Groove is a great way to collaborate with them. Groove account management is “in the cloud” and works across corporate firewalls, so it’s easy to email a workspace invitation to anyone regardless of who they work for. I am the liaison to a few of these partners, and Groove is a great time-saver as it gives us a place to drop shared content and always keep up to date. I don’t have to email updated documents to everyone, only to have them re-file them in their own directory structure … instead, I just keep my documents in Groove, and everyone always has them on their desktop all the time.

 

SharePoint could do this on an Extranet basis, but governance is always a big issue – for the moment, you’d end up setting up accounts for each individual from a partner company; these need to be managed somehow, especially as staff changes. The next version of SharePoint is slated to support ADFS, which will solve this problem neatly for companies that have a significant enough relationship to create the SAML trust necessary for it to work.

 

But long before that’s established, people will be collaborating with Groove.

 

It’s addicting. Just try it…. ;-)

 

http://www.groove.net/Downloads

  

This posting is provided "AS IS" with no warranties, and confers no rights. Thank you for reading it!

Posted by BobGerman | 0 Comments

Extranet Support in SharePoint 2007

A colleague of mine recently asked if the forthcoming version of SharePoint technology will be good for use in Extranets, and why. Indeed it will! Here are some thoughts on the subject...

First off - there are at least two kinds of Extranets out there, and it always makes sense to clarify what kind the customer wants. One type is simply an extension of a corporate Intranet onto the public Internet, so employees can get access without a virtual private network. For example Outlook Web Access is such an Extranet.

Another type is a web site which is shared with specific customers or partners, for collaboration or other business functions across organizations. This latter type is more interesting as it has much greater implications for streamlining business processes and forming richer partnerships. It's also much harder to set up because:

  • external user accounts must be maintained, or some kind of trust (such as SAML federation using ADFS) must be created between organizations
  • external clients are not under control of the hosting organization, so often a particular web browser or client software cannot be assumed
  • privacy issues come up, in which the sharing of participants' information must be carefully considered

In either case, Microsoft Office SharePoint Server (MOSS) 2007 is definitely more Extranet-friendly than SharePoint 2003. Many benefits in MOSS 2007 are not unique to Extranets but still will make a big positive impact in Extranet situations.

Here are a baker's dozen reasons why Extranets will be better with MOSS 2007:

1. Authentication options are much wider, including:

  • ADFS Support – allows federated authentication, in which each party manages their own user accounts, and there is a secure trust between the organizations. For example, imagine that Microsoft and Litware have such a trust set up. Joe works for Litware and has been given access to content in Microsoft’s Extranet. If Joe leaves his job, Litware removes his account and he immediately loses access to the Microsoft Extranet as well!
  • Very flexible authentication, based on the ASP.NET 2.0 provider model. This allows simple authentication based on LDAP, SQL Server, or any data store and algorithm desired by writing or purchasing an Authentication provider. This is great for customers who already have partner accounts stored somewhere, such as in another application’s database or LDAP store.

2. More granular “anonymous” access, can be set on a group of sites instead of a whole virtual server as in SPS 2003. So, for example, anonymous users can see part of the Extranet – to get general information, sign up for an account, etc. – while other parts require a login.

3. Broader browser support including FireFox, Safari, Netscape

4. Easier branding and “skinning” using ASP.NET 2.0 Master Pages and Navigation provider model. This will be useful in situations where the extranet is branded for a each customer, or where the Extranet represents multiple brands.

5. Email integration – Users can email documents, messages and calendar items directly into a MOSS site; this can be opened to Extranet users to provide integration with even non-Microsoft productivity applications

6. Content Deployment – allows jobs to be created which copy content from one place to another on a schedule. So, for example, content from an Intranet site can be re-used on an Extranet without the need for content owners to post it twice

7. RSS Feeds – Allow clients to subscribe to information feeds so information stays up-to-date automatically. Every list, from a calendar to a site full of web pages, is an RSS feed by default.

8. Web-based forms allow InfoPath use on Extranet with no client deployments. Thus, users with InfoPath can use the rich client, but the solution doesn't need to depend on that because any web browser can be used to fill in forms.

9. Auditing support so you can monitor who has accessed which content. This is important on many Extranets not only for security but also for marketing reasons. For example, if a firm wants a customer to renew a service contract connected with the Extranet content, they often want to see how the customer is using the Extranet to establish value. Then they can ask their customer, “Did you know that your employees accessed 1,000 articles a month from our knowledge base?”

10. Web Content Management, Wikis, Workflow, Versioning – All work together to make it much easier to update content

 11. Format conversion built-in: Any XML-based format can be converted automatically in the background. For example, your Office 2007 formats (native XML format) can be converted to HTML for use on an Extranet where users may not have Office installed.

 12. Excel Web Access: Another win for environments where you have no control over the desktop, this allows Excel 2007 to run over the server and render in plain old HTML so any browser can view it.

 13. Site Variants: Mainly intended for multi-lingual support, but also usable for customized content scenarios. Site variants are parallel sites; content in the “master” site becomes a draft in all the site variants, where an editor or translator can modify it prior to publication

As you can tell, I'm pretty jazzed about all this, as it's going to make my job a lot easier when customers want to design solutions which span firewalls and organizations!

This posting is accurate to the best of my knowledge based on information available to me at the time I wrote it. This product is in Beta - anything can happen!

This posting is provided "AS IS" with no warranties, and confers no rights.

Thank you for reading it!

 

Posted by BobGerman | 8 Comments

Another Vantage Point

The cool thing about the internet is that any shmoe with a computer and an internet connection can have a voice, however obscure, on the world stage. Blogging seems to encourage this, which I figure has to be a good thing – more free speech usually leads to positive changes in the world. I’m relatively new to the medium; in fact, this is my very first blog post.

 

When I first started reading blogs, I imagined thousands or millions of people, each standing on a soap box, pointlessly blathering about pet issues and punditry. Now that I’ve been reading for a while, I imagine the blogosphere as a vast array of windows into people’s minds, lives and jobs. As with other social relations, if you find out you’re compatible with someone, you can maintain an association. Of course, inside some of the windows is a person standing on a soap box and blathering. Fortunately, the social boundaries are simple; it’s easy to unsubscribe.

 

Anyway, it’s especially cool that my employer, Microsoft, not only allows but even seems to encourage us to do this; “open and respectful” is one of the company’s core values. Besides, how can I resist a chance to jump on the latest online phenomenon? And so it is that I invite you to peek into Microsoft from my vantage point.

 

Let me introduce myself. Professionally, I’m a Technology Architect at the Microsoft Technology Center (MTC) near Boston, where I help customers evaluate solutions based on Microsoft software. We provide a lab environment where customers can envision what’s possible, work out the foundations of an architecture, and prove out any risk areas. My technical specialty is in the area of portals and collaboration, which lately at Microsoft has meant a lot of focus on SharePoint and .NET technologies. This is an especially exciting time considering the great advances in the recently released .NET 2.0 and the amazing new version of SharePoint and Office that’s in the pipeline. I work with a great team with complimentary specialties, so that we can team up with customers and work on solutions that span many technologies.

 

Personally, I live with my wife, Kate, and two cats in Watertown. I love music and being outdoors; I like to walk and bicycle along the Charles River, and in the summer I grow herbs and vegetables in a garden behind our house. Between vacations and business, I travel a lot, and enjoy tacking a little sightseeing onto business trips when the schedule allows it. I like photography and playing the guitar, but don’t do as much of either of them as I’d like. And of course technology is a hobby as well; I build all my own computers, and have created a multimedia home infrastructure that is tailored to Kate’s and my lifestyles. The cats don’t seem to mind.

 

I plan to post about:

 

·       What it’s like to work at Microsoft and the MTC

·       Ideas and experiences on how to effectively create software solutions, and minimize risk early in the process

·       SharePoint, .NET and related technical information gleaned from projects I do; this could range from high-level developments in the field to code samples and pointers to submissions on GotDotNet

·       Random musings on collaboration and social networking, business and economics, globalization and individuality (WHAT, you may ask, is the different between “Musings” and “Blather”?? It’s purely subjective, I know! ;-) )

 

So many thanks for reading, and I look forward to your comments and suggestions!

Posted by BobGerman | 0 Comments
 
Page view tracker