Welcome to MSDN Blogs Sign in | Join | Help

Resources for Developing SharePoint Solutions with Silverlight

Many thanks to everyone who attended my talk at SPTechCon 2009 in Cambridge, MA! As promised, this posting will provide a pointer to the source code used in the demos, plus resources to help you get going with Silverlight in your SharePoint development projects.

All the code is on MSDN Code Gallery at http://code.msdn.com/SLParts. This includes:

  • Minimalist samples, one of which passes a text message to Silverlight for display, the other of which shows how to implement and call a custom web service in SharePoint from Silverlight 
  • An image viewer web part to display an image library as a slide show. This web part shows how to pass SharePoint data to Silverlight in a hidden form field to avoid the need to make an extra round-trip to the server.
  • A mini-survey web part to ask a single question and show the results when it is answered. This web part shows how to update SharePoint using a custom web service, which piggybacks the latest results for rendering in Silverlight
  • A video field control that allows browsing SharePoint sites, libraries and documents to select a video in editing mode. This is an example of posting data back with the page (in a hidden form field), as is the expected behavior when editing a WCM page.

Here are some resources I found helpful in working with Silverlight and SharePoint:

Silverlight (General)

Silverlight and SharePoint

Programming with LINQ

Silverlight - HTML Bridge

Silverlight Cross-Domain Access

Visual Studio Extensions for Windows SharePoint Services 1.3

Field Controls in SharePoint

Web Services in SharePoint

Posted by BobGerman | 0 Comments
Filed under: ,

MOSS 2007 and SQL Server 2008 - Better Together

Many thanks to everyone who attended the MOSS 2007 and SQL 2008 "Better Together" webcast today. This blog entry will provide pointers to resources mentioned on the webcast, and will also stand on its own as an overview of the topic. Rich Crane will also post about this on his blog, and will include the slides for those who wanted them. Please check it out at http://blogs.msdn.com/rich_crane.

Microsoft Office SharePoint Server 2007 (MOSS) and Windows SharePoint Services 3.0 (WSS) both added support for SQL Server 2008 in Service Pack 1. This same service pack allows MOSS and WSS to run on Windows Server 2008 as well. The SharePoint Team Blog has a great write-up on these, including pointers to both upgrade and slipstreamed installations, here.

As it turns out, there are a number of features in SQL Server 2008 that provide significant benefits to SharePoint shops. These include:

  • Database backup compression - save significant time and storage, even with SharePoint's out of the box backup facility
  • Compression in High Availability / Disaster Recovery scenarios - saves time and bandwidth when using SQL Mirroring or Log Shipping
  • Failover Clustering - SQL 2008 improves the failover scenario through simplified installation and maintenance, and by removing the need for a drive letter per SQL Server instance
  • Transparent Data Encryption - Allows the complete encryption of SharePoint content (or other) databases, including backups
  • SQL Performance Studio - Provides rich reports for monitoring SQL usage, capacity planning and troubleshooting
  • Policy Management - Facilitates policy enforcement, such as limiting the size of content databases or configuring Autogrowth as appropriate for SharePoint. This especially helpful when administration is shared by SharePoint admins and DBA's.
  • Central Management - Very helpful when scaling out SQL or running multiple instances, central management allows the DBA to make changes across many databases such as setting policies or shrinking data files after removing content

Database Backup Compression

Enabling backup compression in SQL Server PropertiesSharePoint stores all content and most configuration data in SQL Server, so a large part of backing up SharePoint is backing up the databases. SQL Server 2008 can compress those backups, saving time and storage costs.

We tested this with a content database consisting of about 370,000 text documents in a document library. Without compression, using either SQL Server 2005 or 2008, the backup ran in about 30 seconds (to disk) and created a file 3.6GB in size. With SQL Server 2008 backup compression, the same backup (after a reboot to ensure we weren't using the disk cache) ran in 16 seconds and consumed only 729MB, only 20% of the original size in about half the time!

This can be done as simply as adding "WITH COMPRESSION" to the SQL command, as in

BACKUP DATABASE [MY_CONTENT_DB]
TO DISK = 'E:\BACKUP\MY_CONTENT_DB.bak'
WITH COMPRESSION;

What's more interesting, however, is that this can be used for ordinary SharePoint backups as provided in SharePoint Central Administration. To do this, go to the SQL Server 2008 instance and open the property page on the instance itself. On the "Database Settings" page, there is a checkbox labeled "Compress backup". One click later, every backup will be compressed, including the SharePoint out of the box backups (which use SQL Server's backup under the covers, but also save server and IIS settings to provide a comprehensive farm backup.)

For more information on SQL Server 2008 backup compression, see http://technet.microsoft.com/en-us/library/bb964719.aspx.

Compression in High Availability / Disaster Recovery Scenarios

Many SharePoint customers configure SQL Server to use either database mirroring or log shipping in order to provide high availability at the database level. A 2nd SQL server (or servers) receives the logs or mirrors and thus becomes a hot standby in case of a failure of the primary SQL Server(s).  The redundant servers can be placed in a remote data center, providing for disaster recovery in addition to availability.

For a background on these topics, from a SharePoint perspective, see:

All these articles pre-date SQL Server 2008, however. SQL Server 2008 adds log stream compression, to save time and bandwidth, as well as bad page protection to reduce risk of hardware failures. This can reduce network utilization and reduce the failover time window.

For more information on SQL Server 2008 mirroring with log stream compression, see http://msdn.microsoft.com/en-us/library/cc645581.aspx and http://sqlcat.com/technicalnotes/archive/2007/09/17/database-mirroring-log-compression-in-sql-server-2008-improves-throughput.aspx

Failover Clustering

The other primary availability solution for SharePoint databases is clustering. This is the solution of choice for SAN users who enjoy the ability to share physical storage among servers. It is easier to install and manage than in previous versions, and it removes the need for drive letters for every SQL instance. It's also aligned with Windows Server 2008 clustering to allow heterogeneous hardware support as well as the use of IPv6 and DHCP.

For more information see "Getting Started with SQL Server 2008 Failover Clustering" at http://technet.microsoft.com/en-us/library/ms189134.aspx.

Transparent Data Encryption

Every day there are more reasons to secure enterprise data, for regulatory compliance, privacy and to stave off security threats in general. So in many cases it makes sense to encrypt SharePoint content.

There are a few ways to do this:

  • You can encrypt at the volume level using Windows Bitlocker, available in Windows Server 2008. This works well but doesn't protect data if it is moved off of the encrypted volume, as in the case of a backup or log stream.
  • You can encrypt at a file level using NTFS; this has been available since Windows Server 2000. The encryption only applies to specific file(s), so again it won't protect backups, log streams or other copies of the database.
  • You can encrypt at a field level using cell encryption, introduced in SQL Server 2005, however there are schema restrictions as to what can be encrypted. Since SharePoint needs to run on SQL Server 2000, its schema was not designed to take advantage of cell encryption, so it won't help us.
  • SQL Server 2008 introduces Transparent Data Encryption. This encrypts at a database level with no schema restrictions or application awareness, so it's perfect for SharePoint scenarios.

Transparent Data Encryption (TDE) encrypts entire databases, including backups and transaction logs. Thus, offsite copies of confidential data (such as backups) are fully encrypted. If you move files to new storage, there's no need to remember to turn on encryption at the volume or file level because it's already encrypted by SQL Server 2008.

Note that for completeness, enabling TDE on any user database also turns on encryption of TempDB. This is goodness, since it ensures complete encryption of the SharePoint content in question! However the implication is that even if only one in ten content databases are encrypted, all database activity that uses TempDB will incur the encryption overhead. For this reason, it may be advantageous to use a separate SQL Server 2008 instance for TDE databases.

The most important thing to remember when setting up TDE is to BACK UP YOUR SERVICE MASTER KEY AND CERTIFICATE. See "Career Limiting Move, SQL Server 2008 TDE" on Andrew Fryer's blog for details.

For more information on setting up TDE, see

Data Usage CollectionServer Activity HistorySQL Performance Studio

SQL Server 2008 includes a great new tool for managing database performance and resource usage, called SQL Performance Studio. This is very useful for monitoring SQL Server in any application scenario, and SharePoint installations are no exception.

SQL Performance Studio includes 3 out-of-the-box collection sets: Disk Usage Collection Set, Query Activity Collection Set and Server Activity Collection Set. These make it easier to monitor all aspects of database performance. For example, it's possible to monitor content database growth over time to better plan splitting of content databases. The Server Activity Collection Set retains data on CPU usage, memory, disk I/O and network utilization. This can be useful in indentifying peak usage periods, or knowing when to scale out to multiple servers.

For details, see:

Policy Management

It's common in a large enterprise that different people or teams will be responsible for SharePoint administration and Database administration. This can lead to some challenges, as these two must work closely in concert to successfully manage a large scale SharePoint farm.

A specific issue that arises is that the easiest way to set up SharePoint databases is to let SharePoint create them directly. Thus, one or more SharePoint service accounts are given securityadmin and dbcreator SQL server roles so SharePoint administrators can create, say, content databases right from SharePoint Central Administration.

The other alternative is to ask DBA's to create the databases, and to let the SharePoint administrator connect to them rather than create them. This is documented in "Deploy using DBA-created Databases" (http://technet.microsoft.com/en-us/library/cc262869.aspx). While this works, it's complex, and may discourage SharePoint administrators from doing the right thing in terms of managing content databases for growth over time due to the overhead of setting them up.

SQL Server 2008 brings another option to the table: Policy Management. This allows DBA's to grant SharePoint service accounts and administrators the rights to manage some or all of their own databases, while maintaining tight control over database policies. For example, a policy could be created to enforce size limits on content DB's, or to ensure the Autogrowth feature is set to a fixed size rather than a percentage, as recommended for SharePoint content databases.

Policies can be run on demand, on a schedule, or when a change is made. The last of these can be set up to prevent an out-of-policy change, or to simply log it and alert an administrator.

For details on Policy Management, see:

Central Management

A typical whiteboard drawing of a SharePoint farm will generally contain a single SQL Server, or a pair of SQL Servers set up for failover using clustering, SQL mirroring or log shipping. However in practice, it's possible to scale out the database layer onto multiple SQL servers or instances. For example, content databases could be distributed across multiple servers.

Of course this presents a management challenge - the more SQL Servers, the more management. If only there were a way to centrally manage multiple server instances, and even work with queries or policies across these servers.

This is exactly the situation addressed by SQL Server 2008 Central Management. Registered servers, or groups of servers, can be queried simultaneously. In addition, policies can be managed and checked across servers using this facility. For example, a DBA could check for policy compliance across all servers from a single screen, with a single action.

For details, see:

Resources

 

General SharePoint/DB Resources

Other takes on SharePoint with SQL Server 2008

SQL Server 2008 Availability Topics

Transparent Data Encryption

SQL Performance Studio

SQL Server Central Management

(Cross-posted to the MTC Blog)

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

Posted by BobGerman | 2 Comments

Microsoft Dynamics CRM Incubation Event - Take 2!

I just wanted to let you know about a cool event coming up at the Boston MTC…

Following a very successful first round, the MTC is hosting a 2nd Microsoft Dynamics CRM Incubation Week. If you or your company is interested in integrating your software with Microsoft Dynamics CRM, this is a great opportunity!

The selected teams will spend a whole week (April 20-24) at the MTC in Waltham, MA. The first ½ day will be spent in CRM training, and then each team will be provided with servers and one of our MTC development suites for 3½ days of hands-on development with the assistance of our CRM and .NET experts. The final day will be dedicated to packaging up each team’s solution (so they can keep and build on it), plus demonstrating solutions to a panel of judges for various prizes.

All in all this promises to be a great week and an opportunity to extend your product’s reach by integrating with Microsoft Dynamics CRM. For details, please see Sanjay Jain’s blog.

Thanks!

Posted by BobGerman | 2 Comments

SharePoint Saturday in Boston ... and Beyond!

If you're interested in SharePoint and are in the Boston area (or would like to visit!) then you'll definitely want to know about SharePoint Saturday (http://www.sharepointsaturday.org/boston/).  There is a great line-up of speakers and sessions and you can't beat the price (free)!

I'll be speaking on Enterprise Search, and providing the low-down on our new FAST Enterprise Search Platform and the search roadmap that was revealed last month at FastForward 2009. I'd love to see you there ... and of course there are dozens of other great sessions, all listed on the web site.

If you're not in Boston, SharePoint Saturday events are popping up everywhere! They're coming soon to Tulsa and Atlanta, and I've heard talk of other cities as well. Check out http://www.sharepointsaturday.org/ for the latest events and dates.

Thanks and I hope to see you at SharePoint Saturday!

Posted by BobGerman | 0 Comments

AJAX-Enabling your Zone Tabs Web Part

If you've been reading for a while you may remember I wrote a web part called "Zone Tabs" whose job in life is to control other web parts in its "Zone." Thus you can put different web parts on various tabs, and allow users to select what they want to see with less scrolling. This has been extremely popular, yet people are left wanting more. By far and away, the #1 request has been to avoid the postback that refreshes the whole screen when a tab is selected.

Well I'm happy to announce that Mehul Bhuva has solved that problem and has a full explaination on his blog at http://mehulbhuva.blogspot.com/2009/02/ajaxify-zone-tabs-web-part-in.html! His approach is to use the ASP.NET AJAX UpdatePanel control. Since the tabs and other web parts in a "Zone" need to be refreshed together - without re-painting the rest of the page - his approach is to insert the UpdatePanel right into the page around the WebPartZone control using SharePoint Designer.

 Many thanks and kudos to you Mehul - many people requested this and you did something about it which we all appreciate!!

 

Posted by BobGerman | 0 Comments

The MTC’s and the Build-Buy Continuum

The phrase “Build vs. Buy” has become so widely used that it has become a part of our industry’s lexicon. In general, it refers to the decision whether to build a new application, or buy one “off the shelf.” However there is an implied “either/or” approach to the decision which can be very self-limiting.

First of all, consider this idea of building or buying. In a pure “build” approach, we would have to start by writing an operating system and then work our way up. Or perhaps we should design our own CPU chips? Of course this is silly! How about a pure “buy” approach? Well if an application is very general in nature – such as a word processor – then sure, it’s likely that a pure “buy” solution is out there in a shrink-wrapped box somewhere. But for a complex enterprise solution, at the very least some kind of configuration or customization is going to be needed to fit an organization’s needs.

So from the start we can see that pure “build” isn’t going to happen, and while “buy” may make sense for a general-purpose desktop application, it’s likely that a more complex application is going to require at least some configuration or customization! In reality we are dealing with a continuum of approaches ranging from “build” to “buy”; there may be multiple points along that scale that would work technically but present different trade-offs from a business and engineering perspective.

At the Microsoft Technology Centers, it’s our job to help our customers select the right solution, given of course that it’s based on Microsoft technology. These customers have a lot to think about! They have to navigate user requirements, technical constraints and multiple vendors to make their choice. That “build vs. buy” decision, even within a single vendor’s platform, is just one more wrinkle they need to sort out. For example, is a particular solution better suited to SharePoint, or a custom web application? Should that invoicing application be custom, or could it be built on top of Microsoft Word or Excel as an Office Business Application (OBA)? Should those reports be driven by Performance Point, SQL Reporting Services or by writing an application with WPF or SilverLight? The answer is different for every customer, yet each of these represents a different point along the build-buy continuum.

Each time we use a vendor’s technology – whether it’s “middleware” on a server or a customizable desktop application – we are moving the needle away from “build” and over towards “buy”. If we look at the spectrum, it might look something like this:

BUILD

·        Custom application from “the ground up”

·        Custom application on a rich framework (e.g. .NET Framework)

·        Custom application on one or more vendor products (e.g. Commerce Server application)

·        Multiple vendor applications with custom integration, or integration with a smaller custom application

·        Vendor application with customizations (e.g. a SharePoint portal with custom developed web parts and workflows)

·        Vendor application with configuration (e.g. a SharePoint portal configured with the customer’s logo and desired information structure)

·        Vendor application “out of the box”

BUY

 

Of course, these are fuzzy and may overlap, and there are often hybrid approaches. Making this decision requires deep knowledge of the candidate technologies!

THE CASE FOR MOVING TOWARDS “BUY”

I would say that most of the customers I’ve worked with want to buy and not build. While there are some good reasons for this, it makes sense to think them through. Here are some typical ones:

·        Cost: This needs to be analyzed for each case. If a vendor’s product does only 20% of what’s needed, and the rest is all custom, then it’s probably a waste of money. On the other hand if the product removes a significant amount of the build cost, then it may well be worth it. Vendors have the ability to spread their development costs across many customers, so they should be passing that economy of scale to their customers!

·        Delivery time: Again, if the vendor’s product removes a significant amount of building, it will usually save time. On the other hand, if a vendor’s product is a bad fit, it may cost time (and money) working around the issues.

·        Support: The vendor supports and updates the product over time. This needs to factor into the cost equation, but it also has implications on reliability and security, assuming your vendor issues periodic fixes to their product and has a good support offering

·        Features: Any project is going to have a features list that is too long, and project managers always draw a “cut” line somewhere. A vendor’s product may have some of these lower priority features included, so they are more or less “free” if the cost of the product is justified by the high priority factors.

·        Agility: If it’s well designed, a vendor’s product or platform can provide more agility in the form of allowing quick changes through configuration, for example. It may remove some agility as well, however; if users don’t want to do things the way the product was designed to do them, then excessive customization or disgruntled business users may be the result.

THE CASE FOR MOVING TOWARDS “BUILD”

The same factors come into play in building more of the solution…

·        Cost: If the vendor’s product is only a marginally good fit, the cost to purchase, learn, customize and deploy it may be more than the cost to build it all. Or if the product cost is excessive compared to the work it saves, again it’s time to pull out the coding pencils.

·        Delivery Time: In general, buying something that works should save time over building a new one, but don’t forget the time needed to learn the new technology! If an application is simple, and developers are ready and trained with the technology to write it, it might be quicker than learning a vendor product. But this applies only in the simplest of applications, and these projects have a way of being harder than they first appear! Analyze all the use cases, for current and future needs, before shying away due to a learning curve.

·        Support: Vendor support isn’t usually fun, and there’s a certain satisfaction to having the ability to fix it yourself! However you need to ask who has the time and skills to do the support. And what if they get hit by the proverbial bus? How hard would it be for a new person to pick it up? The larger and more complex the solution, the harder it will be to support all aspects of it yourself.

·        Features: If there is no available product that satisfies most of the high-priority requirements, then “build” is the only option. Sometimes the only way to get the desired feature set is to build them.

·        Agility: If you can think it, you could build it … given infinite resources of course. If you don’t want to compromise at all, then build the parts that need to be “just so”. But be aware that you’ll only be as agile as your ability to hire developers to make a change, and that they will need time to make it.

Making these tradeoffs isn’t easy, and requires a deep understanding of the business requirements, the customer’s organization, and the technologies in question. This is part of what happens at an MTC, usually during an “Architecture Design Session,” with the customer, partners and MTC architects all working together as a team to find the best solution among the alternatives.

COMMON FALLACIES:

Here are some common misconceptions about build vs. buy, in addition to the idea that it’s an either/or decision:

·        “You can’t be innovative unless you build it yourself”
The range of possibilities using configuration and customization are surprising! Even the way an application is used can be unique to a situation. It’s worth considering moving towards the “buy” side even if you think nobody has done something before.

·        “Not Invented Here”
People who have built something, or who want to, are likely to defend more of a “build” solution. Do the analysis and make a business decision.

·        “We’d only be using a small part of the product’s capabilities, so it’s a bad fit.”
If a product provides a lot of value for the solution, it’s worth considering even if there are other parts of the product that won’t be needed. Do the math. If using the product saves build and support costs, then it may be a good value even if you’re paying for some features you’ll never use.

·        “If I Had a Hammer”
If the team uses hammers all the time, every solution will look more like a nail. There is some value to staying within a team’s comfort zone, but it is limited. Does the vendor’s product add enough value to justify the learning curve?

A SHORT STORY

I’d like to close with a short story of a customer who ran headlong into the build-buy continuum, and nearly had to suffer the worst of both worlds: a large complex application with a lot of “building” and a lot of code to support, which still required a significant vendor product. I’ll change all the names to protect my customer – and myself I suppose!

Woodgrove Bank wanted a new executive portal for their Intranet. The solution involved a lot of financial “dashboards” combined with documents and collaboration information such as tasks and calendars. I led a briefing and Architecture Design Session for Woodgrove at the MTC, and they ended up choosing a solution based on SharePoint technology. They also chose another software package from Fabrikam Software, and a system integrator, Contoso Services, to put it all together.

About six months later, the customer called, somewhat upset about the project. It seemed that many of the things that I told them would be “out of the box” with SharePoint ended up requiring custom development, and the software from Fabrikam was nearly useless, according to the folks at Contoso Services. As a result, his implementation cost was skyrocketing as Contoso built more and more of the solution from scratch – on top of SharePoint. The customer was starting to feel like the software he purchased was a waste of money.

We agreed to hold another Architecture Design Session to review the architecture and determine what had happened. We had everyone there: stake-holders from Woodgrove, Fabrikam and Contoso were in attendance as well as me and others from Microsoft.

The meeting quickly became awkward as Contoso spelled out the reasons that, feature after feature, SharePoint’s way of doing something wouldn’t work for the Woodgrove executive portal. For example, they had asked users if they wanted the search box on the right or left; the users said “Left” and SharePoint had it on the right, so that was custom work! (The product was SharePoint Portal Server 2003; many of their customizations would have been easier in the 2007 equivalent.) The Fabrikam product features met a similar fate – they were close but didn’t exactly meet the needs, which were all taken literally with no cost-benefit tradeoffs.

The Woodgrove project lead started squirming in his seat. Contoso had an elaborate data model that caused a huge amount of extra work, and had a theoretical technical justification over just using the SharePoint API. One by one, the Contoso consultants justified their customizations based on business requirements or technical arguments, but there had been no cost-benefit analysis. By the end of the day, the customer was fuming, and fortunately not at me! If only they had asked, he would have been glad to relax the requirements in a way that got the job done using the provided software components. A couple of weeks later, Fabrikam sent one of their consultants over to Woodgrove Bank and they were able to replace a lot more of the custom work with their built-in functionality.

Woodgrove had no technical staff on the project: they had a strong business sponsor but no knowledge of the technology on their own. And as it turned out, Contoso only made money by billing for services, and they took advantage of the situation. This is unusual, by the way – the vast majority of systems integrators I’ve worked with would take the high road in such cases – but still there is the tendency for them to stay in their own comfort zone, and if that’s writing code, you can expect to end up with a lot of it.

Lessons learned? I’d say to any customer, if you don’t have your own technical staff to watch over a project, then hire another consultant to do it. I see this often. One consultant is hired to oversee the technical decisions and architecture, and is not considered for the implementation project. That way they can watch out for the customer while allowing the customer to hire an implementation specialist in whatever technology they end up choosing. Better yet, involve the software vendor's consulting services in an architectural and QA role; Microsoft Consulting Services often provides this kind of engagement.

This certainly would have paid for itself at Woodgrove! All those small build-buy decisions pushed them back towards “build” after they already had decided to mostly “buy”, so in effect many features were purchased twice: once in a product and once for the custom code version that Contoso Services wrote.

SUMMARY

As our industry gets better and better at reusing code, whether it’s in class libraries or whole application suites that allow customization, there will be more and more opportunities to fine tune the build-buy decision. Realize that it’s a continuum and keep an open mind as you consider the options along that spectrum.

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

(cross-posted to the new MTC Blog - check it out to see what the rest of the MTC community have to say!)

Posted by BobGerman | 0 Comments

The Compleat Windows Server 2008 Laptop

I just did something I’ve been meaning to do for a long while: re-tooled my laptop with Windows Server 2008 and Hyper-V virtualization. I really appreciate the Hyper-V performance, as well as the modularity of the operating system: it’s easy to turn pieces on and off so you only run what you need. This is a great setup for a developer or IT Pro who needs to run server software on the go.

 

A few friends asked how I set it up, so I thought I’d put it on my blog for anyone else who’s interested and hasn’t already tried it. There are plenty of great resources already on the web, but I didn’t find any single resource that showed how to get all my desired laptop features working. So here is my list of links to the various steps for transforming the Windows Server 2008 install into a mobile workstation with the Vista UI, search, wireless, Bluetooth, etc.

 

Note that Hyper-V requires hardware and BIOS support in order to work, so it’s generally available only on relatively new machines made in the last year or so. Also, when you enable Hyper-V, the operating system shuts off the sleep (S3) and hibernation (S4) features because supporting these states in a hypervisor is an “incredibly complicated problem”, according to Virtual PC Guy. I can only imagine...

 

Anyway, here are the sites that got me through the process, in more or less the order I did them:

 

Topic

Link

Install the OS

Just install the OS to start; I chose x64 of course so I could get to all 4GB of memory on my laptop.

Wireless

In Server Manager, enable the “Wireless LAN Service” feature to install Wifi handling. Several people recommended doing this before installing the Wifi drivers; I did it in the other order and it worked anyway.

Drivers

Install drivers for your laptop. Vista drivers generally work fine; I had no problems with any of them.

NOTE: I had a few unknown devices even after installing the obvious drivers, but they all got taken care of when the Bluetooth stack was added later on.

Enable the Vista UI and Desktop Search

http://blogs.msdn.com/vijaysk/archive/2008/02/11/using-windows-server-2008-as-a-super-desktop-os.aspx

UPDATE: Step #6 is missing a part ... go into Group Policy Editor as it says, or by typing "gpedit.msc" into the Start/Run box. Then navigate the tree to Computer Configuration > Administrative Templates > System and find the "Display Shut Down Event Tracker". Disable this policy and the shutdown event prompt will go away. Thanks, Barry!

NOTE: I skipped step #8, enabling the Superfetch service. Do a web search for Superfetch and decide if you want this thing anticipating your application usage and pre-fetching the apps in the background. Seems faster to me without it.

Disable Internet Explorer Enhanced Security mode

We all want to be secure, but this is a workstation... http://blogs.techrepublic.com.com/datacenter/?p=255

Adding the Vista Sidebar

http://blogs.technet.com/yungchou/archive/2008/06/25/adding-vista-sidebar-and-aero-to-windows-server-2008-desktop.aspx

Bluetooth – the hard careful way

http://www.gilkirkpatrick.com/Blog/post/Installing-the-Microsoft-Bluetooth-Stack-on-Windows-Server-2008.aspx

Bluetooth – the easy way (thanks to Spence’s download – worked great for me!)

http://harbar.net/archive/2008/06/13/Enabling-Bluetooth-on-MacBook-Pro-and-Windows-Server-2008-x64.aspx

 

(Spence happens to have a MacBook-Pro, but AFAIK it’s the same for any laptop.)

Windows Mobile Device Center (to sync your phone)

http://www.microsoft.com/downloads/details.aspx?familyid=4F68EB56-7825-43B2-AC89-2030ED98ED95&displaylang=en

(You may want to check for the most recent version)

Hyper-V Setup

http://technet.microsoft.com/en-us/library/cc732470.aspx

Migrating VPC’s to Hyper-V

http://www.groovypost.com/howto/microsoft/windows-server/migrate-microsoft-virtual-server-2005-r2-vm-to-windows-server-2008-hyper-v/

Great Hyper-V Blog

http://blogs.msdn.com/virtual_pc_guy/default.aspx

 

I hope this is helpful … Have fun!

 

Thanks for reading my blog. This posting is provided "AS IS" with no warranties, and confers no rights. I welcome your comments and feedback.

Posted by BobGerman | 2 Comments

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 | 0 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 | 21 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
More Posts Next page »
 
Page view tracker