Announcing the release of the SharePoint 2010 Administration Toolkit V1
I am pleased to announce the availability of the first version of the SharePoint 2010 Administration Toolkit. In this toolkit we’ve included a couple of tools that were shipped releases and are now adapted to SharePoint 2010, along with two new tools.
· User Profile Replication Engine 2010 (UPRE2010): this tool got a complete overhaul and was converted to PowerShell. It now allows you to replicate Profile and Social data between SharePoint 2010’s User Profile Application (UPA), as well as backward compatibility with SharePoint 2007’s SSP. You can replicate between SSP’s or UPA services, as well as across versions. (Note that only Profile data can be replicated across versions, as SSP contains no Social activity tracking).
· The Security Configuration (SCW) Manifest: SCW is an attack surface reduction feature in Windows Server. This manifest adds roles for SharePoint 2010 Products to Windows Server 2008 with SP2 or Windows Server 2008 R2.
· The Content Management Interoperability Services (CMIS) Connector: enables SharePoint users to interact with content stored in any repository that has implemented the CMIS standard, as well as making SharePoint 2010 content available to any application that has implemented the CMIS standard.
· The Load Testing Kit (LTK): LTK generates a Visual Studio Team System 2008 (VSTS) load test based on Windows SharePoint Services 3.0 IIS logs. The VSTS load test can be used to generate synthetic load against Microsoft SharePoint Foundation 2010 as part of a capacity planning exercise or a pre-upgrade stress test.
The toolkit can be downloaded from here: http://www.microsoft.com/downloads/details.aspx?FamilyId=718447d8-0814-427a-81c3-c9c3d84c456e&displaylang=en
The toolkit documentation can be found here:
SharePoint Foundation 2010: http://technet.microsoft.com/en-us/library/cc508986.aspx
SharePoint Server 2010: http://technet.microsoft.com/en-us/library/cc508851.aspx
Doron Bar-Caspi
Sr. Program Manager, SharePoint
Back by Popular Request - Live Chats with MVP Experts
Do you have questions about SharePoint? Want to learn more about the recently launched SharePoint 2010? By popular request, SharePoint MVPs from around the world are participating in a live chat event about SharePoint. These Q&A events are a great opportunity to tap into the vast knowledge of these industry professionals who are regarded as the best in their field.
Please join us on Wednesday July 21st at 9am PDT!
Learn more and add these chats to your calendar by visiting the MSDN event page http://msdn.microsoft.com/en-us/chats/default.aspx
Developing Applications for SharePoint 2010
|
Microsoft patterns & practices is excited to announce the release of:
Developing Applications for SharePoint 2010
|
|

SharePoint 2010 introduces new ways of developing applications for the SharePoint platform. With SharePoint 2010, you can build multi-tenant, hosted applications on an infrastructure that is scalable, secure, and stable. You can create powerful, data-driven solutions using SharePoint lists or external data. You can create client-side functionality that takes advantage of modern browser capabilities and Silverlight to provide a rich user experience. These new features, operational models, and development tools make SharePoint a more complete application platform, and it also introduces new design and development decisions for customers. This guidance helps customers understand the decision points, tradeoffs, and performance implications that the new functionality introduces; it also helps customers learn how to take best advantage of the new capabilities that SharePoint 2010 provides.
|
What’s in Developing Applications for SharePoint 2010?
|
|

|
Component
|
Description
|
|
The guide
|
"Application Foundations for SharePoint 2010" describes approaches you can use to address the challenges of testability, flexibility, configuration, logging and exception handling, and maintainability; it also explains how to use the SharePoint Guidance Library components in these areas.
"Execution Models in SharePoint 2010" provides deep technical insights into the mechanics of the full-trust execution environment, the sandbox execution environment, and various hybrid approaches to executing code in SharePoint applications.
"Data Models in SharePoint 2010" explains new list and external data functionality and data access techniques, key design decision points that can help you to choose between standard SharePoint lists and external lists, and techniques and patterns to address large lists and list aggregation.
"Client Models in SharePoint 2010" provides guidance on how to best use the new client-side functionality to access data and build richer client experiences with Silverlight and Ajax.
Each section also contains a set of how-to topics. These explain how to perform specific tasks that the team found challenging to discover.
|
|
Reference implementations
|
This release includes eight reference implementations that you can deploy to a SharePoint 2010 test environment. The reference implementations reinforce the key concepts in the guide and illustrate how to build applications that reflect real-world scenarios. Each reference implementation includes a detailed scenario and design overview, an explanation of the design decisions the team faced for the implementation, and an installation script to automate setup. This release includes reference implementations for the following scenarios:
· Sandboxed solution
· Sandboxed solution with a full-trust proxy
· Sandboxed solution with External List
· Sandboxed solution with custom workflow activities
· Farm Solution (timer job)
· SharePoint List Data Models
· External Data Models
· Client Application Models
|
|
The SharePoint Guidance Library
|
The library is a collection of reusable classes delivered as source code that address common challenges in application development for the SharePoint platform. This release improves on the previous release of the library by adding support for sandboxed solutions and taking advantage of new SharePoint features. The SharePoint Guidance Library consists of three key components:
· SharePoint Service Locator. This provides a simple implementation of the Service Locator pattern for SharePoint applications. The service locator enables you to isolate your code from dependencies on external types, which makes your code more modular, easier to test, and easier to maintain.
· Application Settings Manager. This provides a robust and consistent mechanism for storing and retrieving configuration settings at each level of the SharePoint hierarchy, from individual sites (SPWeb) to the entire server farm (SPFarm).
· SharePoint Logger. This provides easy-to-use utility methods that you can employ to write information to the Windows Event log and the SharePoint Unified Logging Service (ULS) trace log. It also enables you to create custom diagnostic areas and categories for logging.
|
|
|
|
Click here to download this release.
|
Managing Upgrades on Sandbox Solutions
Sandbox solutions are a great feature on the SharePoint 2010 platform. But as these solutions are deployed in various locations across your farm or site collection, the question of how to manage them arises.
We’re providing a PowerShell script to help you with this. It’s pretty simple but can be extended to do more in order to fit into the tools you’re already using to manage your farms and site collections.
Let me describe what this script does:
Every Sandbox Solution that is deployed has a Solution ID associated with it. Inside that Solution, you will find one or more features with a Feature ID and a version number. For a given Solution Id, this script will walk your entire farm or site collection and generate a log telling you all the locations where that solution is found. It will then look at each feature within the Solution and add a log entry indicating which version of that feature is deployed. It can also perform the upgrade if a new version of the Solution is provided. This is a flag so the script can perform the upgrade or simply be used as a means for gathering information on the solution.
The script takes the following parameters:
· File Path and Name of Solution (.wsp file) to be upgraded
· Switch Parameter indicating if the upgrade should be performed or not
Permissions:
· Script assumes the person running it is the box admin and is permitted to perform the upgrade actions.
· Permission levels are modified to grant Full Control for the admin.
· After upgrade is complete, permissions are restored to original settings.
The log format is as follows:
· Details on the file path and name of the solution you are examining including Solution Id.
· Detail on each site collection that is examined
· For each site collection
o Information on whether or not a matching solution was found
o If found, details on the solution file that is being removed so it may be replaced by the new version.
o If upgrade is being performed, details on success or failure
· A summary that includes
o Number of site collections examined
o If upgrade is not being performed, a summary list of the sites that will require upgrade along with details on the current version for each feature (id) in the solution.
o If upgrade IS performed, the feature and version information accompanied by details on successful upgrade, successful new install, or the feature being unchanged because it’s already current.
A few Things to Note:
To upgrade a solution, the SharePoint 2010 platform expects the solution filenames to be different. If they are the same, you will get an error telling you that the solution is already active. When you upgrade a solution, the solution id will be used to find existing versions of that solution and THEN look at the version details. The upgrade will only move you to a new version. It will not roll back to an old version. And if the versions are the same, it will do nothing.
We hope this script helps you manage the solutions you are deploying and makes upgrades that much easier.
# SharePoint DLL
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
#Cmdlet Install
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Log file definition
$intro = "User Solution Upgrader v1.0 - Log File"
$date = (Get-Date).ToString('yyyyMMdd')
Set-Variable -Name ForReading -value 1 -Option Constant
Set-Variable -Name ForWriting -value 2 -Option Constant
Set-Variable -Name ForAppending -value 8 -Option Constant
#Assume that the current "Domain\User" is the box admin entitled to perform the reconaissance and upgrade actions.
$admin = $env:UserDomain + "\" + $env:UserName
if ($env:UserDomain -eq $null)
{
$admin = $admin.substring(1)
}
# Get the script's parent folder. This is where the log file will be written.
$logFolder = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$getACL = Get-Acl $logFolder
$access = $getACL.Access | Where { $_.IdentityReference -eq $admin }
if ($access -eq $null -or
($access.FileSystemRights -ne [System.Security.AccessControl.FileSystemRights]::FullControl -and
($access.FileSystemRights -ne [System.Security.AccessControl.FileSystemRights]::Write -and
$access.FileSystemRights -ne [System.Security.AccessControl.FileSystemRights]::CreateFiles)))
{
$logFolder = $env:userprofile
}
# Add the log file name to the path.
$logFileFullPath = Join-Path $logFolder "usersolutionupgrader-$date.txt"
# Open file
$fo = New-Object -com Scripting.FileSystemObject
$f = $fo.OpenTextFile($logFileFullPath, $ForAppending, $true)
if ($f -eq $null)
{
$logFolder = $env:userprofile
$logFileFullPath = Join-Path $logFolder "usersolutionupgrader-$date.txt"
$f = $fo.OpenTextFile($logFileFullPath, $ForAppending, $true)
}
#Confirm log file on screen
Write-Host ("Log Path: " + $logFileFullPath)
#Write intro line
$f.WriteLine()
$f.WriteLine($intro)
function WriteLog
{
$dt = Get-Date
$logMsg = $dt.ToShortDateString() + " " + $dt.ToShortTimeString() + "`t" + $args[0]
$f.WriteLine($logMsg)
Write-Output($logMsg) #Turn this on when you need console output
}
function exitScript()
{
if ($f -ne $null)
{
$f.Close()
}
Write-Host "Exiting script due to error."
exit
}
WriteLog ("Current user (admin): $admin")
#solution details
$solFile = ""
$targetSolutionId = ""
$upgrade = $false
$myError = $null
$haveCurrentFeatures = $false
$haveNewFeatures = $false
$numSites = 0
$oldFeatures = @{}
$newFeatures = @{}
$solSites = New-Object System.Collections.ArrayList
$solFailSites = New-Object System.Collections.ArrayList
#Parse the commandline parameters
if (($args -eq $null) -or ($args.Count -lt 2))
{
WriteLog("Error: This script has been called without enough parameters. Listing your parameters below:")
WriteLog($args)
if ($f -ne $null)
{
$f.Close()
}
exitScript
}
else
{
$badParameters = $false
foreach ($arg in $args)
{
switch ($arg)
{
"-upgrade" {$upgrade = $true}
"-path" {[void] $foreach.MoveNext(); $solFile = $foreach.Current}
default {$badParameters = $true}
}
}
if ($badParameters -eq $true)
{
WriteLog("You passed in a bad parameter.")
exitScript
}
#Validate parameters
$extension = [IO.Path]::GetExtension($solFile)
if (($extension -eq $null) -or ($extension -ne ".wsp") -or (!(Test-Path $solFile)))
{
WriteLog("Error: The solution file name is not of WSP format or is an invalid file.")
exitScript
}
#Confirm parameter values captured
$fileName = Split-Path $solFile -Leaf
WriteLog("Solution Path is: `t" + $solFile)
WriteLog("Solution Name is: `t" + $fileName)
if ($upgrade)
{
WriteLog "The tool will attempt to perform UPGRADE on the site collections"
}
WriteLog ""
}
#Get solution ID from given WSP
$tempPath = Join-Path $env:temp "upgrader" | Join-Path -ChildPath $fileName
$shell = New-Object -ComObject "Shell.Application" -ErrorAction:SilentlyContinue -ErrorVariable myError
if ($myError -ne $null)
{
WriteLog("FAILED to create the Shell.Application object.")
WriteLog("Error: " + $myError)
$myError = $null
}
[IO.Directory]::CreateDirectory($tempPath) | Out-Null
$tempFolder = $shell.NameSpace($tempPath)
$tempFolder.CopyHere($solFile)
#Take the file name ("yourfile.wsp") from the original path
$tempSolPath = Join-Path $tempPath $fileName
if (!(Test-Path $tempSolPath))
{
WriteLog "Error: Failed to copy WSP file to temp location."
exitScript
}
#Rename the WSP file to have CAB extension in order to facilitate CAB extraction
$cabFileName = [System.IO.Path]::GetFileNameWithoutExtension($fileName) + ".cab"
Rename-Item $tempSolPath $cabFileName
$cabPath = Join-Path $tempPath $cabFileName
$sourceWsp = $shell.NameSpace($cabPath).items()
$tempFolder.CopyHere($sourceWsp)
$manifestPath = Join-Path $tempPath "manifest.xml"
[xml]$manifest = Get-Content $manifestPath
$targetSolutionId = $manifest.Solution.SolutionId
#Validate Solution GUID
[Guid]$testGuid = "B80D56EC-5899-459d-83B4-1AE0BB8418E4"
if (($targetSolutionId -eq $null) -or ($targetSolutionId.Length -lt 36) -or
([System.ComponentModel.TypeDescriptor]::GetConverter($testGuid).ConvertFromString($targetSolutionId) -eq $null))
{
WriteLog("Error: Target solution ID is invalid: " + $stringSolutionId)
exitScript
}
WriteLog("Extracted solution ID: $targetSolutionId from manifest.xml")
WriteLog("")
#Now delete temp folder.
Remove-Item $tempPath\*
Remove-Item $tempPath
#Go through Content DBs
WriteLog ("Looking for Solution Id: " + $targetSolutionId + " in all Content Databases`n")
$dbs = Get-SPContentDatabase
foreach ($contentdb in $dbs)
{
#Web App Level
$webAppUrl = $contentdb.WebApplication.Url
#Get WebApp
$webApp = Get-SPWebApplication -Identity $webAppUrl
$policy = $webApp.Policies[$admin]
$policyAdded = $false
$roleAdded = $false
#If the admin doesn't have Full Control, it will be granted as follows:
if ($policy -eq $null)
{
$policy = $webApp.Policies.Add($admin, "")
$webAppModified = $true
$policyAdded = $true
WriteLog "Added a policy entry for user '$admin'."
}
$fullRole = $webApp.PolicyRoles.GetSpecialRole([Microsoft.SharePoint.Administration.SPPolicyRoleType]::FullControl)
if ($policy.PolicyRoleBindings[$fullRole] -eq $null)
{
$policy.PolicyRoleBindings.Add($fullRole)
$webAppModified = $true
$roleAdded = $true
WriteLog "Full Control added for '$admin' to Web Application '$webAppUrl'"
}
if ($webAppModified)
{
$webApp.Update()
$webAppModified = $false
}
#Done. Have Full Control
WriteLog ("Entering Web Application '$webAppUrl'.`n")
Get-SPSite -WebApplication $webApp -Limit ALL | % {
$site = $_
$solution = $null
$foundSolution = $false
#Scan for solution here
Get-SPUserSolution -Site $_ | Where { $_.Status -eq [Microsoft.Sharepoint.SPUserSolutionStatus]::Activated -and $_.SolutionId -eq $targetSolutionId } | % {
if ($foundSolution -eq $false)
{
$foundSolution = $true
$solution = $_
if ($haveCurrentFeatures -eq $false)
{
Get-SPFeature -Sandboxed -Site $site | Where { $_.SolutionId -eq $targetSolutionId } | % {$oldFeatures.Add($_.Id, $_)}
$haveCurrentFeatures = $true
}
if ($upgrade -eq $false)
{
$solSites.Add($site.Url) | Out-Null
}
$solutionHash = $_.Signature
WriteLog ("Found site collection: " + $site.Url)
}
}
$numSites ++
#DoUpgrade here
if ($upgrade -and $foundSolution)
{
$successAdd = $false
WriteLog ("Uploading new solution file as: $fileName")
#Add + Upgrade solution
$myError = $null
Add-SPUserSolution -LiteralPath $solFile -Site $site -ErrorAction:SilentlyContinue -ErrorVariable myError -Confirm:$false
if ($myError -ne $null)
{
WriteLog("Site collection '" + $site.Url + "' FAILED to upload the new solution.")
WriteLog("Error: " + $myError)
$myError = $null
}
else
{
$successAdd = $true
}
$addedSolution = Get-SPUserSolution -Identity $fileName -Site $site
if ($addedSolution -ne $null)
{
WriteLog ("Found solution $fileName in the Solutions Gallery. Attempting to use it...")
#First check for already updated solution
if ($addedSolution.Signature -eq $solutionHash)
{
#This means we have the same version installed. Just skip it. And delete our copy!
WriteLog ("New solution is already active on this site collection.")
if ($successAdd -eq $true)
{
#Remove the new solution (the dupe)
WriteLog ("Removing file: $fileName")
Remove-SPUserSolution -Identity $addedSolution -Site $site -Confirm:$false
if (!($solFailSites.Contains($site.Url)))
{
$solFailSites.Add($site.Url) | Out-Null
}
}
}
else
{
#Perform upgrade
Update-SPUserSolution -Identity $solution -Site $site -ToSolution $addedSolution -ErrorAction:SilentlyContinue -ErrorVariable myError -Confirm:$false
if ($myError -ne $null)
{
WriteLog("Site collection '" + $site.Url + "' FAILED to upgrade to the new solution.")
WriteLog("Error: " + $myError)
if (!($solFailSites.Contains($site.Url)))
{
$solFailSites.Add($site.Url) | Out-Null
}
$myError = $null
}
if (!($solFailSites.Contains($site.Url)))
{
#Upgrade succeeded
WriteLog("Site collection '" + $site.Url + "' has been upgraded to the new solution.")
WriteLog ""
$solSites.Add($site.Url) | Out-Null
#Record results AFTER upgrade
if ($haveNewFeatures -eq $false)
{
Get-SPFeature -Sandboxed -Site $site | Where { $_.SolutionId -eq $targetSolutionId } | %{$newFeatures.Add($_.Id, $_)}
$haveNewFeatures = $true
}
}
}
}
else
{
if (!($solFailSites.Contains($site.Url)))
{
$solFailSites.Add($site.Url) | Out-Null
}
}
}
$site.Close();
}
#Close permissions and webApp
if ($roleAdded)
{
$policy.PolicyRoleBindings.RemoveById($fullRole.Id)
$webAppModified = $true
WriteLog "Removed Full Control for '$admin' from Web Application '$webAppUrl'"
}
if ($policyAdded)
{
$webApp.Policies.Remove($admin)
$webAppModified = $true
WriteLog "Removed the policy entry for user '$admin'."
}
if ($webAppModified)
{
$webApp.Update()
$webAppModified = $false
}
WriteLog ""
WriteLog "Done with Web Application."
WriteLog ""
}
#Final tally of site collections
WriteLog("Analysis of site collection upgrades for solution ID $targetSolutionId ...")
WriteLog("We have processed a total of $numSites site collections.")
WriteLog("")
if ($upgrade)
{
#Site Collection Summary
if ($solSites.Count -eq 0)
{
WriteLog("No site collections were upgraded. Refer to this log for any upgrade errors.")
}
else
{
WriteLog("Listing site collections that have been upgraded:")
foreach ($siteUrl in $solSites)
{
WriteLog($siteUrl)
}
}
if ($solFailSites.Count -ne 0)
{
WriteLog("Listing site collections that FAILED to upgrade:")
foreach ($siteUrl in $solFailSites)
{
WriteLog($siteUrl)
}
}
#Feature Upgrade Summary
if ($newFeatures.Count -gt 0)
{
WriteLog ""
WriteLog "Feature upgrade summary for the New User Solution:"
foreach($fKey in $newFeatures.Keys)
{
$fDef = $oldFeatures[$fKey]
$fDef2 = $newFeatures[$fKey]
#Feature ID and DisplayName
WriteLog("Feature ID: " + $fDef2.Id + "`t DisplayName: " + $fDef2.DisplayName)
#Feature Version
if ($fDef -eq $null)
{
#New feature added.
WriteLog("This feature has been newly added.`t`t`t Version " + $fDef2.Version)
}
else
{
if ($fDef.Version -eq $fDef2.Version)
{
WriteLog("This feature has been unchanged.`t`t`t Version " + $fDef2.Version)
}
else
{
WriteLog("Feature went from Version " + $fDef.Version + " to Version " + $fDef2.Version)
}
}
WriteLog ""
}
WriteLog ("The new solution holds a total of " + $newFeatures.Count + " feature(s).")
}
}
else
{
if ($solSites.Count -eq 0)
{
WriteLog("No site collections have been found.")
}
else
{
WriteLog("We have found " + $solSites.Count + " site collections, as follows (no upgrade action performed):")
foreach ($siteUrl in $solSites)
{
WriteLog($siteUrl)
}
}
WriteLog ""
WriteLog "Feature summary for current User Solution:"
foreach($fKey in $oldFeatures.Keys)
{
$fDef = $oldFeatures[$fKey]
WriteLog ("Feature DisplayName: `t" + $fDef.DisplayName)
WriteLog ("Feature Version: `t" + $fDef.Version)
WriteLog ("Feature Id: `t`t" + $fDef.Id)
}
WriteLog ""
WriteLog ("Found a total of " + $oldFeatures.Count + " feature(s).")
WriteLog ""
}
WriteLog ""
#Close the file handle.
if ($f -ne $null)
{
$f.Close()
}
Installing KB938444
We’ve been tracking a small number of customers that have experienced issues after installing KB938444 through Windows Update.
After the reboot at the end of installation we’ve had reports of Windows SharePoint Services sites and Central Administration being inaccessible with the error, “HTTP 404”, “Server Error: …” or “Cannot connect to the configuration database”.
This issue only affects Windows SharePoint Service v3 standalone installations that use the Windows Internal Database (wYukon) and does not affect SharePoint or user data.
If after applying KB938444 you hit one of the errors described above you will need to run psconfig from an administrator command prompt as detailed below to complete the update.
psconfig -cmd upgrade -inplace b2b -wait –force
The Windows Small Business Server team have a blog post detailing this, and some other SBS specific steps, that relate to this issue here (By default SBS ships with WSS configured to use wYukon).
KB938444 is an important security update and we recommend installing it as soon as possible.
Live Chats to Learn more about SharePoint - with the MVP Experts
Do you have questions about SharePoint? Want to learn more about the recently launched SharePoint 2010? By popular request, SharePoint MVPs from around the world are participating in a live chat event about SharePoint. These Q&A events are a great opportunity to tap into the vast knowledge of these industry professionals who are regarded as the best in their field.
Please join us on Wednesday June 23rd at 9am PDT!
Learn more and add these chats to your calendar by visiting the MSDN event page http://msdn.microsoft.com/en-us/chats/default.aspx
- Melissa Travers (Sr. MVP Lead, Community and Online Support)
Save the Date - SharePoint Conference 2011
Save the Date for SharePoint Conference 2011, the premier worldwide conference dedicated to SharePoint and related technologies being held October 3-6, 2011 in Anaheim, California.
SharePoint Conference 2011 will be the conference to learn more about Microsoft® SharePoint® 2010, the business collaboration platform for the enterprise and the internet. Learn how to apply the latest best practices for building and deploying solutions on the platform and find out how customers and partners are embracing cloud-based services to create value for their organizations.
Registration will open Spring 2011. Add yourself to the keep me notified list to stay up to date on all conference announcements at www.mssharepointconference.com.
We hope to see you in October 2011!
Microsoft SharePoint Conference 2011 Team | SPC@Microsoft.com
Live from the BI Conference - June 8, 2010
At the BI Conference today, Ted Kummert demonstrated the new self-service user experiences that we’ve enabled in Office and SharePoint 2010 and SQL Server 2008R2.
One of the items he demonstrated was the new Microsoft Business Intelligence Indexing Connector (MSBIIC), which extends the capabilities of FAST Search Server for SharePoint 2010, with the ability to enable users to quickly and easily find the relevant Business Intelligence documents.
You can try this out for yourself by downloading the components here –
Microsoft Business Intelligence Indexing Connector - Backend
Microsoft Business Intelligence Indexing Connector – Frontend
And check out the keynote from TechEd here -> http://www.msteched.com/2010/NorthAmerica/Keynote02
In addition to discovering the documents, the MSBIIC will also crawl the data sources revealing items that are not necessary in the report itself but critical to the user’s discovery and as part of the refiners. Now users can find the relevant information all within a single user experience, no matter the type of document.
For more information, check out the download page as well the post here ->http://blogs.msdn.com/b/sharepointbi/archive/2010/05/14/announcing-the-microsoft-business-intelligence-indexing-connector.aspx
Update to SharePoint Server 2010 for Internet Sites
If you installed SharePoint Server 2010 For Internet Sites - Enterprise using a license key obtained from the Volume Licensing Service Center or Microsoft Partner Network before May 25, 2010, you may encounter the following symptoms:
The following Enterprise features are not available, or the features have reduced functionality:
· Access Services
· InfoPath Forms Services
· Chart Web Parts
· Excel Services
· PerformancePoint Services
· Visio Services
NOTE: this does not apply to any trial or evaluation versions of the product, and only applies to the specific version indicated above.
A new license key has since been provided for use with SharePoint Server 2010 For Internet Sites – Enterprise. To resolve this issue, you must uninstall SharePoint Server 2010 For Internet Sites from each server. Then, obtain the new SharePoint Server 2010 for Internet Sites – Enterprise key to reinstall SharePoint Server 2010 For Internet Sites on each server. Please note that to ensure proper functioning of the product, you must reinstall with the proper key if you are in this state, regardless of if you are seeing any specific symptoms listed above. Before doing so, it is recommended that you take a backup of your current environment to be certain that you have a safe copy of your data. The article linked at the bottom of this post has more information and references to relevant TechNet documentation.
The KB article below includes more information, including references to relevant TechNet documentation and steps to verify that you are running in this state:
The version of SharePoint Server 2010 for Internet Sites that is downloaded and installed before May 25, 2010 does not have all product features enabled, or it runs with reduced functionality
http://support.microsoft.com/kb/2143810
SharePoint 2010 – Top 10 Resources to get you started…
With the official launch of SharePoint 2010 last week, we thought now would be a perfect time for us to share some resources to help you to get started evaluating and learning about the new release.
This post contains links to download evaluation software, guides, demo virtual machines and lots more, for both Developers and IT Professionals.
1. Check out the Office 2010 & SharePoint 2010 Launch Keynote and on-demand sessions, and the SharePoint 2010 Product Site on Microsoft.com
2. Download the SharePoint 2010 Overview Evaluation Guide, the SharePoint 2010 Professional Developer Evaluation Guide and the SharePoint 2010 IT Professionals Evaluation Guide to quickly ramp up on platform updates and additions.
3. Check out the learning plans for IT Professionals, Developers and End Users and get started on your SharePoint 2010 learning plan.
4. Download the pre-configured Hyper-V SharePoint 2010 Evaluation and Demo Virtual Machine (~1.8GB) along with the SharePoint 2010 Walkthrough Guide for a chance to get hands on with SharePoint 2010 with zero set up and configuration.
5. Download 180 day trial versions of; SharePoint Server 2010, FAST Search Server 2010 for SharePoint, Office Professional Plus 2010, Windows Server 2008 R2, SQL Server 2008 R2 to install and evaluate SharePoint 2010 yourself, and while you’re downloading stuff here’s some links to the full versions of; SharePoint Foundation 2010, Search Server Express 2010, SharePoint Designer 2010
6. Watch the Getting Started with SharePoint 2010 for IT Professionals video series and the Getting Started with SharePoint 2010 for Professional Developers video series to get bite-sized video overviews of some of new and updated features.
7. Do the self paced IT Professional hosted virtual hands-on-labs and Developer hosted virtual hands-on-labs to get hands-on with SharePoint 2010 through a series of scripted tutorials, and if you want more, then download and install 10 getting started Developer Hands-on-labs.
8. Discover what’s new for end users with Getting started with SharePoint 2010 guides and Take SharePoint Server 2010 training at your desk.
9. Visit the TechNet and MSDN SharePoint 2010 sites for a wealth of technical reference documentation and prescriptive guidance through our categorized resource centers, such as the Installation and Deployment Resource Center to learn how to plan, install and configure SharePoint 2010 and the Upgrade and Migration Resource Center for the latest guidance and best practices for upgrading to SharePoint 2010.
10. Got questions? Search for an answer, or ask the community in the official Microsoft SharePoint 2010 Forums.
Already a SharePoint 2007 expert?
Check out the free advanced training content for IT Professionals and Developers looking to upgrade their skills from SharePoint Server 2007 to SharePoint 2010.
We’ve got 36 modules of self paced IT Professional Advanced Training and Developer Advanced Training that includes audio and video recordings. We’ll also be adding 24 hosted virtual hands-on-labs in the very near future to accompany the training content – All for FREE and on demand.
Want to get certified on SharePoint 2010?
Take a look at the Microsoft Learning SharePoint 2010 Training Portal for information and expected availability dates for SharePoint 2010 Certification, Classroom training, E-Learning, MS Press books and Learning Snacks.
Live Chats to Learn more about SharePoint
Do you have questions about SharePoint? Want to learn more about the recently launched SharePoint 2010? By popular request, 28 SharePoint MVPs from around the world are participating in two live chat events about SharePoint. These events are a great opportunity to tap into the vast knowledge of these industry professionals who are regarded as the best in their field. Two opportunities are available to join the conversation. Times were chose to accommodate most of the world.
On Tuesday May 25th tune in between 4:00 PM – 5:00 PM Pacific time, and on Wednesday May 26 tune in between 9:00 AM – 10:00 AM Pacific time to chat with SharePoint MVPs.
Learn more and add these chats to your calendar by visiting the MSDN event page http://msdn.microsoft.com/en-us/chats/default.aspx
Language Offerings for SharePoint 2010 Products
Multilingual support is key to the deployment success of many of our global customers. This post shares our plans for language coverage for SharePoint 2010 and estimated release timeframes. To date we have shipped 19 languages, including English, Japanese, French, Russian, German, Spanish, Chinese Simplified, Chinese Traditional, Arabic, Korean, Hebrew, Hindi, Danish, Thai, Swedish, Polish, Portuguese (Brazil), Dutch and Italian with 21 others shipping between now and September 2010.
The following table applies to SharePoint Foundation 2010, SharePoint Server 2010, Office Web Apps, Project Server 2010, Search Server 2010 and Search Server 2010 Express. The Estimated Release Timeframe is RTM date, which may be earlier than the date when it hit public download.
Note: Fast Search Server for SharePoint 2010 uses the language infrastructure of SharePoint Server 2010, so there is no separate language pack or localized version for it.
[ll: Language code. CC: Country Code. SKU: Stock Keeping Unit (The full release of the product). LP: Language Pack]
| Language |
ll-CC |
Release Type |
Estimated Release Timeframe |
| Arabic*** |
ar-sa |
SKU and LP |
Released |
| Basque** |
eu-es |
LP |
September |
| Bulgarian* |
bg-bg |
LP |
August |
| Catalan** |
ca-es |
LP |
July |
| Chinese (Simplified) |
zh-cn |
SKU and LP |
Released |
| Chinese (Traditional) |
zh-tw |
SKU and LP |
Released |
| Croatian* |
hr-hr |
LP |
August |
| Czech |
cs-cz |
SKU and LP |
June |
| Danish |
da-dk |
SKU and LP |
Released |
| Dutch |
nl-nl |
SKU and LP |
Released |
| English |
en-us |
SKU and LP |
Released |
| Estonian* |
et-ee |
LP |
August |
| Finnish |
fi-fi |
SKU and LP |
May |
| French |
fr-fr |
SKU and LP |
Released |
| Galician** |
gl-es |
LP |
September |
| German |
de-de |
SKU and LP |
Released |
| Greek |
el-gr |
SKU and LP |
July |
| Hebrew*** |
he-il |
SKU and LP |
Released |
| Hindi* |
hi-in |
SKU and LP |
Released |
| Hungarian |
hu-hu |
SKU and LP |
June |
| Italian |
it-it |
SKU and LP |
Released |
| Japanese |
ja-jp |
SKU and LP |
Released |
| Kazakh* |
kk-kz |
LP |
August |
| Korean |
ko-kr |
SKU and LP |
Released |
| Latvian* |
lv-lv |
LP |
August |
| Lithuanian* |
lt-lt |
LP |
August |
| Norwegian Bokmål |
nb-no |
SKU and LP |
May |
| Polish |
pl-pl |
SKU and LP |
Released |
| Portuguese (Brazil) |
pt-br |
SKU and LP |
Released |
| Portuguese (Portugal) |
pt-pt |
SKU and LP |
May |
| Romanian* |
ro-ro |
LP |
July |
| Russian |
ru-ru |
SKU and LP |
Released |
| Serbian Latin* |
sr-latn-cs |
LP |
August |
| Slovak |
sk-sk |
LP |
July |
| Slovenian |
sl-si |
LP |
July |
| Spanish |
es-es |
SKU and LP |
Released |
| Swedish |
sv-se |
SKU and LP |
Released |
| Thai* |
th-th |
SKU and LP |
Released |
| Turkish |
tr-tr |
SKU and LP |
July |
| Ukrainian |
uk-ua |
LP
|
June |
* Project Server is not localized in these languages.
** Access Services, PerformancePoint Services and Project Server and not localized in these languages.
*** No support for bidirectional languages in PerformancePoint Services.
Download Language packs
2010 Server Language Packs for SharePoint Server 2010, Project Server 2010, Search Server 2010, and Office Web Apps 2010
Language Packs for SharePoint Foundation 2010
For more information on deploy language packs, please refer to
Deploy language packs (SharePoint Server 2010)
http://technet.microsoft.com/en-us/library/cc262108(office.14).aspx
Deploy language packs (SharePoint Foundation 2010)
http://technet.microsoft.com/en-us/library/cc288518(office.14).aspx
Jie Li
Technical Product Manager, SharePoint
Virtual launch event today
Join the live virtual launch event for Office and SharePoint today at www.the2010event.com!
Executive Thoughts on SharePoint 2010
Check out SharePoint GM Eric Swift’s thoughts on SharePoint 2010 in this new executive video blog! Go to www.the2010event.com to participate in the virtual launch event tomorrow, and www.microsoft.com/sharepoint to get more information. Follow us on twitter @sharepoint and use hashtags #join2010 and #sharepoint. Become a fan at www.facebook.com/mssharepoint and ask questions at http://mssharepointforums.com.
Plan Your Server Farm with Capacity Management Resource Center for SharePoint 2010
The release of SharePoint 2010 Products marks a substantial change in the way Microsoft approaches capacity and performance documentation. We have listened to feedback and learned from customer experiences with SharePoint Server 2007 and our own testing to establish a comprehensive set of initial guidance for capacity and performance management for SharePoint 2010.
We have published a Capacity Management Resource Center (http://technet.microsoft.com/en-us/sharepoint/ff601870.aspx ) that will help you find the content you need. You can start with the Capacity Management Sizing Overview (http://technet.microsoft.com/library/cc261700(Office.14).aspx ) to help you get started with capacity management concepts and the 5 steps to properly size, design, deploy, monitor, and maintain your environment. Other content available now includes SharePoint Server 2010 boundaries and limits (http://technet.microsoft.com/library/cc262787(Office.14).aspx ), Storage and SQL Server capacity planning (http://technet.microsoft.com/library/cc298801(office.14).aspx ), technical case studies of production SharePoint Server 2010 environments, and recommendations for specific features and services. More content will be added in the coming weeks and months, so make sure to check back often for new white papers and articles.
Announcing Launch - May 12, 2010
Watch Stephen Elop, President of the Microsoft Business Division, announce the launch of Office 2010 and SharePoint 2010 on May 12, 2010 at 8 a.m PST or 11 a.m. EST. The live Microsoft keynote focuses on the next wave of productivity that delivers:
- End user productivity across the PC, phone and browser
- IT choice and flexibility
- A platform for developers to build innovative solutions
Join the virtual launch event with Microsoft executives, product developers, partners and customers to:
- Find out how peers and partners are already seeing benefits to their business by leveraging the next wave of productivity.
- Submit your questions through live Q&A.
- Participate via blogs, tweets, social media networks, commenting, and more.
Pick up the Launch Widget here:

Live Chats to Learn more about Sharepoint - 28 MVP Experts
Do you have questions about SharePoint? Want to learn more about SharePoint 2010? By popular request, 28 SharePoint MVPs are participating in two live chat events about SharePoint. These events are a great opportunity to tap into the vast knowledge of these industry professionals who are regarded as the best in their field. Two opportunities are available to join the conversation. Times were chose to accommodate most of the world.
On Tuesday April 27, tune in between 4:00 PM – 5:00 PM Pacific time to chat with the following MVPs:
- Agnes Molnar
- Asif Rehmani
- Becky Bertram
- Bill English
- Clayton Cobb
- Darrin Bishop
- Matt McDermott
- Mike Oryszak
- Rob Bogue
- Sahil Malik
- Saifullah Shafiq Ahmed
- Serge Tremblay
- Shane Young
On Wednesday April 28, tune in between 9:00 AM – 10:00 AM Pacific time to chat with the following MVPs:
- Andrew Connell
- Bil Simser
- Bryan Phillips
- Chris O'Brien
- Dan Attis
- David Mann
- John Ross
- Kevin Laahs
- Michael Mukalian
- Muhanad Omar
- Paul Stork
- Randy Drisgill
- Rob Foster
- Spencer Harbar
- Woody Windischman
Learn more by visiting the event page http://msdn.microsoft.com/en-us/chats/default.aspx
- Melissa Travers (Sr. MVP Lead, Community and Online Support)
Temporarily disabling List View Threshold on a large list
In SharePoint 2010, some new limits have been added to protect the servers and other users from expensive operations inadvertently carried out by other users. For a complete list of the SharePoint 2010 Software Boundaries and Limits, click here http://technet.microsoft.com/en-us/sharepoint/ff601870.aspx. If you'd like to find out more about what the different limits mean click here to read the help topic http://office2010.microsoft.com/en-us/sharepoint-server-help/manage-lists-and-libraries-with-many-items-HA010378155.aspx?redir=0 . For a more in-depth look at the features that help you manage large lists, and the best practices involved, read this white paper: Designing Large Lists and Maximizing List Performance http://technet.microsoft.com/en-us/library/ff608068(office.14).aspx .
The List View Threshold is one of the thresholds that fall under the "resource throttling" settings for each Web Application, which can be managed in Central Administration. It is set to 5,000 by default; which means that any view or query that attempts to process more than 5,000 items at a time will be blocked by the SharePoint server. For example, a view that filters on an un-indexed column in a list that has 5,001 items will receive a message informing the user that the query was blocked by the List View Threshold, and if there is a daily time window set, then the message will also state the hours during which this operation would be permitted.
Shortly after upgrade, some users may find that they are unable to access their data through the views they had existing; and to access the data in the way they wish to (e.g. sorted by a column called "color"), they must add an index to their large list. However, they keep running into the List View Threshold limitation so can't perform this task unless:
- They wait until the daily time window set by the administrator, if it is at all set and enabled. By default the daily time window is not set, because it needs to be a conscious decision on the administrator's part to figure out what times work best as "off peak" for their organization. This is the recommended course of action, but sometimes this is not sufficient if the user needs to be able to access that data immediately.
- The farm administrator raises the List View Threshold to a very high number, so that everybody who has a large list can access all their views. This is highly discouraged, because it poses a high risk to the server's health and stability, and instead of solving the problem for the small number of people who have it, it has the potential of creating problems for everybody else, and encouraging poorly constructed views and queries.
- The administrator grants the user's specific list a temporary exemption from the List View Threshold. This exemption can only be done programmatically. I'll show here how you can accomplish this, as well as how to lift the exemption once the period you specified to the users is up. I highly recommend that you grant this exception very conservatively, and don't leave it on any longer than necessary. In most cases, giving the users a week to fix their views or custom code should be more than enough.
To disable the list view threshold for a particular list, you can use the object model to edit the list's "EnableThrottling" property to false (defaults to true). The code below shows you how to do this for one particular list, or for all lists under a certain site. It's best to grant this pardon only to specific lists, rather than an entire site since providing it granularly makes it easier to keep track of what might cause the server to perform poorly, as well as reinforcing the importance of fixing the lists as quickly as possible to the end users.
Here's a script written by Chris Clark, a tester on the SharePoint team, to perform this change. To reverse the change (i.e. remove the exception on a list or all the lists within a web), just change this line:
$list.EnableThrottling = $false
to:
$list.EnableThrottling = $true
###########################################################################
# MakeExceptionLIst Script
# OnFailure: NONE
# OnSuccess: Changes SPList settings to make one or more lists under an SPWeb Exception Lists
#
# Input Parameters:
# - WebUrl ~ The URL of the SPWeb which contains the lists to be made exception lists
# - ListName (Optional) ~ The name of the list to make an exception list
#
# Ex:
# makeexceptionlist.ps1 -WebUrl http://localhost -ListName "Shared Documents"
# makeexceptionlist.ps1 -WebUrl http://localhost/sites/site1 -ListName "*"
#
# Exit code rule:
# On success, exit 0
# On failure, if no other scripts depend on this, exit a none-zero value
#
# Do not use "return" to give the caller exit code, as this cannot be
# captured by the caller process.
###########################################################################
Param([string]$WebUrl = "", [string]$ListName = "")
# Add Sharepoint pssnapin
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
###########################################################################
#
# Turn off/on list throttling on selected list
#
###########################################################################
Function UpdateList($list)
{
$listname = $list.Title
Write-Host "Making list $listname an exception list"
$list.EnableThrottling = $false
$list.Update()
}
###########################################################################
#
# Retrieve relevant objects (SPWeb, SPList) for operation and call Update
#
###########################################################################
$web = Get-SPWeb $WebUrl
if( $web -eq $NULL )
{
Write-Host "Web not found. Exiting"
exit 1;
}
if ( $ListName -eq "*" )
{
Write-Host "Locating all Lists under web..."
$lists = $web.Lists
foreach( $list in $lists )
{
UpdateList( $list )
}
}
elseif ( $ListName -ne "" )
{
Write-Host "Locating List < $ListName >..."
$list = $web.Lists[$ListName]
if ( $list -ne $NULL )
{
Write-Host "List found!"
UpdateList( $list )
}
else
{
Write-Host "List not found. Exiting"
exit 1;
}
}
else
{
Write-Host "Invalid List Name"
exit 1;
}
Write-Host "Done!"
exit 0;
###########################################################################
#
# End
#
###########################################################################
- Dina Ayoub
Program Manager on SharePoint, Microsoft
Announcing the CMIS Connector for SharePoint
Cross-posted from the ECM team blog
Today at the SharePoint 2010 Summit @ AIIM Expo, Eric Swift (@eswift), General Manager of SharePoint Marketing announced that Microsoft with be shipping the CMIS Connector for SharePoint as part of the SharePoint Administrator Toolkit by the end of June 2010. The CMIS Connector for SharePoint provides a CMIS (Content Management Interoperability Services)interface over the top of SharePoint as well as a CMIS consumer Web Part that can be used to display content from other CMIS enabled repositories.
CMIS is a specification that Microsoft developed in along with IBM, EMC, Alfresco, OpenText, SAP and Oracle to enable greater interoperability between content management repositories and to enable a whole new range of Composite Content Applications that can be build agnostic of the underlying repository.
We see CMIS as a great solution to help our customers more effectively leverage content maintained in a heterogeneous environment but more importantly, we see the specification as a way to enable a whole new range of Composite Content Applications that can be build agnostic of the underlying repository.
For further reading on CMIS, visit these sites:
Public voting on the CMIS specification ends on April 30th and we expect that the specification will be ratified as a standard shortly afterwards. We are excited that our work on the specification alongside the other leading ECM vendors is coming to fruition and are looking forward to providing support for the standard in SharePoint 2010.
Ryan Duguid
Senior Product Manager, Microsoft Corporation
SharePoint 2010 Summit @ AIIM Expo
This week a team from Microsoft is headed to Philadelphia to host a series of educational sessions and a Customer Immersion Experience. They will be delivering this content at the AIIM Expo + Conference and hopefully you can attend to learn from the people behind the product. Read more on the ECM blog here, where you can hear more about the Expo and meet the team attending.
SharePoint 2010 reaches RTM!
Today we reached an exciting engineering milestone- the release-to-manufacturing (RTM) for Office 2010, SharePoint 2010, Visio 2010 and Project 2010!
RTM is the final engineering milestone and a major achievement for all of the internal teams who worked so hard to get to this point. As tirelessly as our engineering teams worked, we would never have reached this milestone without incredibly active participation from our customers and partners. More than 5,000 organizations and partners have worked with us on rapid deployment and testing of the products, and the feedback that we’ve received from all these programs has shaped a fantastic set of products that I’m sure our customers will love.
Our Volume License customers with active Software Assurance (SA) on these products will be one of the first to receive the 2010 set of products. They will be able to download the product in English, French, Spanish, German, Russian, and Dutch via the Volume Licensing Service Center starting April 27. Other languages will be available on a rolling timeline. Customers without SA will be able to purchase the new products through Volume Licensing from Microsoft partners starting May 1.
Earlier this year we announced that we will officially launch SharePoint 2010 to our business customers on May 12 with a virtual launch. Our virtual launch will allow people from around the globe to participate in our launch by going to http://www.the2010event.com. Stephen Elop, President of Microsoft’s Business Division, will deliver a keynote as part of the virtual launch, and the virtual launch site will showcase product demos, customer and partner testimonials, and interviews with product managers and executives, and we hope this will give you another great way to explore, learn, and get excited about the 2010 releases.
On behalf of the SharePoint team, I want to thank all of the customers and partners who have helped us reach this milestone. We look forward to continue learning from you and all the great things you will do with our products!
-Jeff Teper
Corporate Vice President, SharePoint Server, Microsoft
Making Your SharePoint 2010 Customizations Visual Upgrade Aware
Hi, Jonathan Kern here again. Today’s post is about one of the new features in SharePoint 2010: Visual Upgrade. Visual Upgrade allows administrators to decouple UI upgrade from system upgrade. This helps make upgrading to a new version of SharePoint far less painful for your users and for your helpdesk personnel.
Much of our UI is aware of Visual Upgrade in that it conditionally renders based on the Site’s UI Version (2007 UI or 2010 UI). But SharePoint is built as a platform, so there are several ways in which your customizations can also be aware of Visual Upgrade.
UIVersion: The basic unit of Visual Upgrade
Visual Upgrade is a Site-level setting that selects which product version UI to use when displaying the Site. For example, one Site may use the 2007 UI while another could use the new 2010 UI. In our APIs, this setting is represented as an integer property on SPWeb called UIVersion. For this release, the two valid values for this property are 3 (meaning SharePoint 2007) and 4 (meaning SharePoint 2010).
Controls and code can pivot on this value to determine how to behave based on the Site’s UI Version. At the very simplest, you can pivot directly on the UIVersion property. However, there are some best practices when doing so:
- Avoid using == unless you absolutely need to. Future versions of SharePoint may (and likely will) have a different value for SPWeb.UIVersion, so unless you want your customization to stop working after upgrade to a future release, you should use something like >= or < when doing a comparison with the property. You can, however, be assured that future versions will have a UI Version that is greater than the version before.
- If you can use a single code path for both UI Versions, do so. There is no reason to maintain two separate paths if you don’t absolutely need them.
- Try not to reinvent the wheel. See the sections below to see if one of our out-of-the-box APIs will do the job.
Visual Upgrade content containers
A common type of customization that needs to be aware of Visual Upgrade is ASP.NET markup. We provide two container controls to make it easy to conditionally render markup based on the Site’s UI Version. Both conditionally render their contents based on whether the value in their UIVersion attribute matches the Site’s UI Version. More on this attribute later. The controls are slightly different though, and it’s important to know the differences so you can use the right one for your job:
- UIVersionedContent: During the Init phase of the ASP.NET Page Lifecycle, if the value of the UIVersion attribute matches the current Site’s UI Version, UIVersionedContent will add its child controls to the ASP.NET control hierarchy. If the UIVersion attribute does not match the Site’s, the child controls are never added to the control hierarchy and no processing is done for them.
<SharePoint:UIVersionedContent UIVersion=”>=4”>
<ContentTemplate>
<!-- Content -->
</ContentTemplate>
</SharePoint:UIVersionedContent>
- VersionedPlaceHolder: During the PreRender phase of the ASP.NET Page Lifecycle, if the value of the UIVersion attribute does not match the Site’s UI Version, VersionedPlaceHolder will set its Visible property to false, thus hiding itself and all its children (i.e. Render never runs).
<SharePoint:VersionedPlaceHolder UIVersion=”>=4”>
<!-- Content -->
</SharePoint:VersionedPlaceHolder>
There are pros and cons for each control:
| Control |
Pros |
Cons |
| UIVersionedContent |
No code from the child controls is ever run if the value of the UIVersion attribute doesn’t match the Site’s UI Version.
|
Doesn’t work for child controls that must be in the control hierarchy during the Page Lifecycle; for example, ContentPlaceHolders. |
| VersionedPlaceHolder |
Works for ContentPlaceHolders and other controls that must be in the control hierarchy throughout the Page Lifecycle. |
Not as performant as UIVersionedContent since the logic in Init through PreRender in each of the child controls is run, even if the control won’t be shown on the page. |
The UIVersion attribute
For both of the above controls, and others to be explained below, there is a common syntax to express what UI Version(s) the controls should render in:
| Example Syntax |
Renders if SPWeb.UIVersion is… |
| =4 |
4 and only 4 |
| >3 |
greater than 3 |
| >=4 |
greater than or equal to 4 |
| <4 |
less than 4 |
| <=4 |
less than or equal to 4 |
| 3;4 |
3 or 4, but nothing else |
| 3 |
less than 4 (deprecated, do not use this syntax) |
| 4 |
greater than 3 (deprecated, do not use this syntax) |
Please note that the last two examples are shown for completeness but are considered deprecated. You will see them used in out-of-the-box files, but our guidance going forward is to use one of the other syntaxes.
Other controls and elements that can be versioned
In addition to the two container controls, there are several other existing controls and elements that we’ve added the UIVersion attribute to:
- ScriptLink
- CSSLink: While there is a UIVersion property available, it is better to set Version which will handle setting UIVersion for you. If you need the more complex syntaxes shown above, you can set Version and then UIVersion.
- CSSRegistration
- CustomAction
- Feature
- Master Pages: There is a UI Version column in the Master Page Gallery that is used in SharePoint Designer and in Sites with the Publishing Feature enabled to filter the master pages that can be applied to those that are valid for the given Site. For this column, the valid values are (empty) meaning that the master page is valid in all UI Versions, 3 meaning that it is compatible with the 2007 UI, and 4 meaning that it is compatible with the 2010 UI.
Conclusion
Now you’ve got the know-how to get your SharePoint customizations ready for Visual Upgrade. Just remember to follow the best practices listed above when pivoting against SPWeb.UIVersion directly, and use the right syntax when using the UIVersion attribute on a control.
As always, if you have questions about Visual Upgrade or the SharePoint UI or need some help getting it to do what you want it to, head over to the SharePoint 2010 forums on Technet. I check there often and will be able to provide guidance (if someone else doesn’t beat me to it).
Until next post,
--Jonathan Kern
UX Developer, SharePoint Foundation
Further Reading
Learn How to Design an Internet Business Solution with SharePoint 2010: Free 2-Day Training for SharePoint Partners
25 Seats Available for a 2 day SharePoint 2010 Solution Designer training for partners in Redmond (April 26-27, 2010)
The SharePoint Solution Designer training objective is to skill Business Analysts and Solution Architects on reusable ‘best in class’ patterns for the SharePoint platform using real-world scenarios across a solution area.
Recognizing and appropriately applying SharePoint solution patterns increases repeatability which optimizes time spent in solution design, delivery, and increases customer satisfaction. The course is based on one business driven development scenario for an Internet Business solution. This content is applicable to those who specialize in identifying the business and technical requirements of a SharePoint opportunity; and consult, design and lead the strategy, planning and business case development for enterprise initiatives .
This instructor led training will be offered in Redmond (WA) and is free of cost for partners.
Seats are limited and will be assigned on a first-come, first-serve basis.
Sign up here: https://training.partner.microsoft.com/learning/app/management/registrationex/LMS_Registration.aspx?UserMode=0&Mode=0&ActivityID=579601
If you have questions, please email naplcsup@microsoft.com
Customizing Ribbon Positioning in SharePoint 2010 Master Pages
Hi, I’m Jonathan Kern and I’m a developer on SharePoint Foundation. For SharePoint 2010, I am responsible for a variety of User Experience (UX) features such as Visual Upgrade, Site UI (including v4.master and minimal.master), and parts of the Ribbon platform. I’m posting today to talk about how two of these features work together: the Ribbon and the Master Page.
As you’ll likely notice in SharePoint 2010, the Ribbon is specially positioned to always be visible on the screen, even if you scroll down the page contents. This is accomplished by placing the Ribbon into its own container and then using client-side script to make the rest of the page contents take up the remainder of the browser’s height. You can see this in action by switching between the “Browse” tab and the “Page” tab on the SharePoint default homepage: The top of the scrollbar on the right side of the browser window will move up and down depending on whether the Ribbon is opened or not.
One of the questions I hear most often is how to enable or disable this behavior on a custom master page. To answer this question, I need to explain more about how the system works. There are three parts of the system: The markup on the master page, the CSS styles in the stylesheet, and the ECMAScript code linked to on the page.
Master Page Markup
Let’s start with the markup. SharePoint 2010 compatible master pages require many components, but there are a few key components that are used by the Ribbon positioning system. Going from top to bottom, the first component of note is the “_fV4UI” ECMAScript variable. In v4.master, it looks like this:
<script type=”text/javascript”>
var _fV4UI = true;
</script>
This block tells the rest of the ECMAScript code in SharePoint that this master page is operating in SharePoint version 4 mode (version 4 corresponds to SharePoint 2010). This variable is used in the script that handles Ribbon positioning which I’ll discuss later on.
Moving down the master page source code, the next interesting component is the “body” tag. In v4.master, it looks like this:
<body scroll=”no” onload=”...” class=”v4master”>
The two important parts of the tag are the “scroll” and “class” attributes. The “scroll” attribute is used to force IE to hide the page scrollbar. Since SharePoint handles the scrollbar independently, we need to stop the browser from interfering. For other browsers, the scrollbar is hidden using CSS styles which are explained later in this post. The CSS class applied to the “body” tag is used to apply CSS styles in the corev4.css stylesheet which are part of the Ribbon positioning system. If you are using a custom stylesheet, you may leave this out; but make sure to apply the needed CSS styles in some other way (perhaps by referencing “body” directly in your stylesheet).
The next important component on the master page is the Ribbon container. In v4.master, it looks like this:
<div id=”s4-ribbonrow” class=”s4-pr s4-ribbonrowhidetitle”>
...
</div>
Let’s look at this piece by piece. First, you’ll notice that the element is a div so that it takes up the width of the browser and acts as a block-level HTML element. After that, is the ID which is a mandatory part of the system: the ECMAScript logic for Ribbon positioning uses this ID to find the Ribbon container. If you omit or change this ID, the Ribbon positioning system will abort and your Ribbon will not stay docked to the top of the page. I’ll discuss the steps to enable and disable the system later on in this post. The next part of the Ribbon container element is the “class” attribute which lists the CSS classes applied to it. The first one is just a layout class used to make the container full width and block displayed. “pr” stands for Page Row. The second CSS class is used in the Ribbon positioning system to tell what state the Ribbon is in currently. It is set to “s4-ribbonrowhidetitle” by default, but that is changed to the correct value once the ECMAScript code on the page initializes.
The Ribbon control itself lives inside the Ribbon container. Also present are the controls that appear in the top row of the ribbon (e.g. Site Actions, breadcrumb navigation button, edit/save button, the Personal Actions menu, etc.), the notifications area, Publishing Console, and Web Part adder. Nothing else should be placed into this container as its height is set using static values that will not adjust to additional content. To add more chrome above the Ribbon, you should add a new element above the Ribbon container.
Immediately following the Ribbon container are two other important elements on the master page: the Workspace element and the Body Container. These elements look like this in v4.master:
<div id=”s4-workspace”>
<div id=”s4-bodyContainer”>
...
</div>
</div> The Workspace container is the element that remains scrollable when the Ribbon positioning system is enabled. Like the Ribbon container, its ID is mandatory as it must be referenced from ECMAScript code during page load. Directly inside of the Workspace container is the Body Container. Its ID is also required. Body Container is used to determine the width of the page content within the client-side script. Both of these elements must be present on the master page for the Ribbon positioning system to run. If one or both are missing, the system will abort.
There is one more interesting element on the master page: The Title container. As you’ll notice in v4.master, opening a Ribbon tab other than Browse will hide the page title and top navigation and replace it with the appropriate Ribbon tab. The important distinction to note here is that the “Browse tab” is not actually a tab. In reality, it is simply an empty Ribbon tab with normal HTML below it. In v4.master, the Title container looks like this:
<div id=”s4-titlerow” class=”s4-pr s4-notdlg s4-titlerowhidetitle”>
...
</div>
Like the other containers discussed above, the Title container must have a specific ID, in this case “s4-titlerow.” However, unlike the other containers, if the Title row ID is not present, the Ribbon positioning system will still run. If you leave out the ID or remove the element completely, the system will just ignore it and handle everything else appropriately. This means that if you leave the element but remove the ID, the Title area will not be removed from the page when you open a Ribbon tab. The CSS classes are also worth noting: As I explained above, “s4-pr” just makes the element take up the full browser width and display as a block element; “s4-notdlg” is used to stop the element from appearing if the page is being loaded in a Modal Dialog; “s4-titlerowhidetitle” is used by the Ribbon positioning ECMAScript to handle the current state of the Ribbon - just like the corresponding class on the Ribbon container, it is updated accordingly when the client-side script initializes at page load.
CSS Styles
All of the CSS styles pertinent to the Ribbon positioning system are in corev4.css. They are all required for the Ribbon positioning system to function properly. The first style rule of importance is “body.v4master” which is defined as follows:
body.v4master {
height: 100%;
width: 100%;
overflow: hidden;
}
This makes the body of the page take up the full width and height of the browser and hides the scrollbar for most browsers (remember that the “scroll” attribute on “body” handles this for some versions of IE).
Next is the CSS rule for the Ribbon container:
body #s4-ribbonrow {
min-height: 43px;
background-color: #21374c;
overflow-y: hidden;
}
This makes the Ribbon row take up 43px of vertical space at minimum and allows groups that cannot be fit into the browser (after scaling) to “fall off the edge” of the ribbon.
Below the Ribbon container styles are a set of styles that only apply to printing. I won’t go through each of these, but suffice to say that these styles are meant to undo some of the positioning applied by the system so that the full page displays when printed.
Further down the stylesheet are the styles for the Workspace and Body Container elements:
body s4-workspace {
overflow-y: scroll;
overflow-x: auto;
position: relative;
left: 0px;
}
body #s4-bodyContainer {
min-width: 760px;
} First, we make the Workspace element always show a vertical scrollbar (to prevent shifting of page contents on load) and show a horizontal scrollbar only if necessary. The other two declarations in this rule are used for other layout purposes. The Body Container gets assigned a minimum width to ensure that shrinking the browser window down won’t render SharePoint unusable.
ECMAScript
The real logic of the Ribbon positioning system is in the ECMAScript code. I won’t go through the actual code that runs, but if you are curious, you can open up init.debug.js in your layouts\1033 folder and look for “FixRibbonAndWorkspaceDimensions()”. The Ribbon positioning logic is triggered in three ways: when the page loads, when the browser is resized, and when the Ribbon is minimized or maximized (for example, by double-clicking a tab title). Note that switching between the “Browse” tab and other tabs is a form of minimizing and maximizing the Ribbon.
The logic generally works like this:
· First, we look for the four interesting elements on the page: the Ribbon container, the Workspace container, the Body Container, and the Title container. If any of the first three cannot be found, the code aborts.
· We then check if the Workspace element has the CSS class “s4-nosetwidth” applied to it. If so, it will not set the width of any elements. This is useful if you have a fixed-width master page design.
· Next, we use static values plus some runtime information to determine the height that should be set on the Ribbon container. If the Ribbon container has its “visibility” style set to “hidden,” the system will set the Ribbon container’s height to 0px. This is the supported way to hide the Ribbon container for certain users but keep the Ribbon positioning logic when the Ribbon is displayed.
· Now, the important calculation occurs: The system gets the browser’s viewport height (the area of the window that contains the SharePoint page) and subtracts the height of the Ribbon container and the top position of the Ribbon container to determine how much space is left below for the Workspace container.
· The calculated height is set to the Workspace element and then some extra logic is run to set width and scroll position information accordingly.
At the very end of the ECMAScript logic, a set of callback functions are run for components that need to know when the Ribbon positioning system has run. If you need to run some code at this point, you can call SP.UI.Workspace.add_resized(handler) which will add your handler to the list.
Enabling and Disabling the System
Now that you have a better idea of how everything works, let’s run through the necessary steps to enable and disable the system for your master page.
Enabling the Ribbon Positioning System
The easiest way to take advantage of the Ribbon positioning system is to derive your custom master page from v4.master. All you have to do is pay attention to the components listed above so that you don’t remove something that’s important. If you end up using a custom CSS file, make sure to include all of the CSS rules shown above. The ECMAScript is included automatically by the ScriptLink control. ScriptLink is required on all SharePoint 2010 compatible master pages, so you get that for free.
If you are retrofitting an old master page to work with the Ribbon positioning system, you can simply follow the steps at http://msdn.microsoft.com/en-us/library/ee539981%28office.14%29.aspx to upgrade your master page. Most of what is discussed on this post is covered briefly in that documentation.
Disabling the Ribbon Positioning System
If you’re customizing v4.master, but wish to let the Ribbon scroll up with the page contents, you’ll need to do a few things:
In your master page:
1) Remove the “_fV4UI” variable from the top of the page. It will still be emitted by the SPWebPartManager later on in the page’s markup, but it will not be present when the on-load events for the Ribbon position system are usually attached. This will stop the code from running when the page loads which will improve rendering performance.
2) Remove or change the Workspace element’s ID to make the ECMAScript code abort early during window resizes and Ribbon minimize/maximize events. You can leave the element, but just change or remove the ID.
3) Remove the “scroll” attribute from the Body tag.
In your CSS stylesheet:
1) Remove or change the width, height, and overflow declarations on the “body” tag.
2) You can optionally remove the s4-workspace and s4-bodyContainer rules since they are no longer necessary.
Conclusion
I hope that the information in this post is useful to you in some way. The Ribbon positioning system is complex, but it is fairly easy to work with as an end-user or third-party developer. If you have questions about the system or need some help getting it to do what you want it to, head over to the SharePoint 2010 forums on Technet. I check there often and will be able to provide guidance (if someone else doesn’t beat me to it).
Until next post,
--Jonathan Kern
UX Developer, SharePoint Foundation
Feedback around protecting SharePoint
Our friends on the Forefront Server Protection team are conducting research to understand what applications you would like to protect, and how you would like them protected. One of the applications they are soliciting feedback on is SharePoint. The survey shouldn't take more than 5-10 minutes, and your feedback directly impacts product decisions.
Please head over to http://www.surveymonkey.com/s/forefrontsurvey to take the survey. We appreciate your valuable input.