<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Brett's SharePoint Blog : WSS</title><link>http://blogs.msdn.com/bgeoffro/archive/tags/WSS/default.aspx</link><description>Tags: WSS</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Using custom scopes on multilanguage variation sites</title><link>http://blogs.msdn.com/bgeoffro/archive/2009/05/24/using-custom-scopes-on-multilanguage-variation-sites.aspx</link><pubDate>Sun, 24 May 2009 19:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9639334</guid><dc:creator>bgeoffro</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/bgeoffro/comments/9639334.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bgeoffro/commentrss.aspx?PostID=9639334</wfw:commentRss><description>&lt;P&gt;One of the great things about working on MOSS projects here in Europe is the prevalance of multilanguage requirements. You just don't encounter multilanguage requirements (at least on intranets &amp;amp; extranets) nearly as often in the US. I've had a lot of deep, hands-on experience with custom and variations-based multilanguage sites this year, and wanted to provide a heads-up regarding a problem and a novel solution when using variations and search.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;The Problem&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This is a pretty straightforward scenario you'd encounter if you are using variations to implement a multilanguage site. Assuming you've got the default shared scopes configured and are using a master page like &lt;STRONG&gt;default.master &lt;/STRONG&gt;that uses the &lt;STRONG&gt;SmallSearchInputBox &lt;/STRONG&gt;delegate control, here's the repro:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Create a new site collection in language X (English in this example).&lt;/LI&gt;
&lt;LI&gt;Configure the site collection to use custom scopes (Site Actions &amp;gt; Modify All Site Settings &amp;gt; Site Settings &amp;gt; Search Settings &amp;gt; Use Custom Scopes).&lt;/LI&gt;
&lt;LI&gt;Set the variation home ("/" in this example).&lt;/LI&gt;
&lt;LI&gt;Create a variation label for language X (English in this example)&lt;/LI&gt;
&lt;LI&gt;Create a variation label for language Y (Dutch in this example)&lt;/LI&gt;
&lt;LI&gt;Create the variation hierarchies&lt;/LI&gt;
&lt;LI&gt;Navigate to the welcome page for variation site in language X&lt;/LI&gt;
&lt;LI&gt;Select the search dropdown control - "This Site:...", "All Sites", "People" appear in the list (these labels are different if language X is not English).&lt;/LI&gt;
&lt;LI&gt;Navigate to the welcome page for variation site in language Y&lt;/LI&gt;
&lt;LI&gt;Select the search dropdown control - "Deze Site:..." appears in the list (this label is different if language&amp;nbsp;Y is not Dutch).&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;You'll find "All Sites" and "People"&amp;nbsp;(and any other shared scopes) are missing for any variation site where the language is different from the root site. So where did they go?&lt;/P&gt;
&lt;P mce_keep="true"&gt;The key question is, "why do items appear in the search dropdown control?" The dependency in question is a Search Display Group (&lt;STRONG&gt;Site Actions &amp;gt; Modify All Site Settings &amp;gt; Site Settings &amp;gt; Search Scopes&lt;/STRONG&gt;). In single-language site collections, display groups and search scopes all use the same language, so no special configuration is necessary.&lt;/P&gt;
&lt;P mce_keep="true"&gt;In Multilanguage site collections – such as those that use variations – there is an important difference in behaviors. As with single-language site collections, the search scopes and display groups are created in the top-level site’s language. However, some of the subsites are created in different languages. On each site, the search control will look for the scopes in the Search Dropdown display group (which is named differently for each language) to determine which scopes to show on the search control. &lt;/P&gt;
&lt;P mce_keep="true"&gt;On the sites where the language is the SAME as the top-level site, all the scopes in the Search Dropdown display group will render – this is because the names of the Search Dropdown display group in the search settings and the search control match. For example, if the top-level site is English, the Search Dropdown display group is named “Search Dropdown”, and the search control on English sites will be looking for scopes in a display group named “Search Dropdown”.&lt;/P&gt;
&lt;P mce_keep="true"&gt;On the sites where the language is DIFFERENT from the top level site, none of the scopes in the Search Dropdown display group will render – this is because the names of the Search Dropdown display group in the search settings and the search control do not match. For example, if the top-level site is English, the Search Dropdown display group is named “Search Dropdown”, and the search control on Dutch sites will be looking for scopes in a display group named “Vervolgkeuzelijst voor zoeken”, which does not exist.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;The Design&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Our solution was based on our requirements, which is to support the set of five languages required by our customer. The solution components are a single site collection-scoped feature with a feature receiver, which are manually activated as needed by site collection owners for sites that use variations. When the feature is activated, the feature receiver performs the following tasks:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Retrieves the list of five language-specific Search Dropdown display group names from the feature properties&lt;/LI&gt;
&lt;LI&gt;Identifies the default scope in the existing Search Dropdown display group&lt;/LI&gt;
&lt;LI&gt;Creates any of the Search Dropdown display group that do not exist&lt;/LI&gt;
&lt;LI&gt;Ensures that all compiled shared search scopes are added to each search dropdown display group&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The feature does NOT delete any of these display groups or their associated scopes upon deactivation, as it is not possible to determine which scopes were set manually. If additional language packs would be installed, we'd need to include the additional language-specific Search Dropdown display group names. Extending the feature to support additional languages simply requires adding a new property to the feature.xml &amp;lt;Properties/&amp;gt; element.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;The Code&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;There are only two pieces to the solution - the feature manifest and the feature receiver. The example below just shows properties for two languages to keep things simple (and avoid problems handling unicode).&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Feature.xml:&lt;/STRONG&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;?&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;xml&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;version&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;1.0&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;encoding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;utf-8&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;?&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Feature&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Id&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;12345678-1234-1234-1234-1234567890AB&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Title&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;ScopeDisplayGroups&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Description&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;This feature is used to create the search scope display groups needed to enable enhanced search on multilanguage sites.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Version&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;1.0.0.0&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Scope&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Site&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Hidden&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;false&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;ReceiverAssembly&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;ScopeDisplayGroups, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1234123412341234&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;ReceiverClass&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;ScopeDisplayGroups.FeatureReceiver&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;xmlns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;http://schemas.microsoft.com/sharepoint/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Properties&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Property&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Key&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;en&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Value&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Search Dropdown&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;/&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Property&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Key&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;nl&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Value&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Vervolgkeuzelijst voor zoeken&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Properties&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Feature&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Feature receiver:&lt;/STRONG&gt;&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; System;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; System.Web;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; System.Web.UI;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; System.Web.UI.WebControls;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; System.Web.UI.WebControls.WebParts;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.SharePoint;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.SharePoint.WebControls;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.SharePoint.WebPartPages;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.SharePoint.Navigation;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.SharePoint.Administration;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.Office.Server.Search.Administration;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;namespace&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ScopeDisplayGroups {&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;class&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;FeatureReceiver&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; : SPFeatureReceiver {&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;override&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; FeatureActivated(SPFeatureReceiverProperties properties) {&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SearchContext searchContext;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; currentGroupName = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Empty;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (SPSite currentSite = (SPSite)properties.Feature.Parent)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//retrieve current scope display groups from this site&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;searchContext = SearchContext.GetContext(currentSite);&lt;/P&gt;
&lt;P&gt;Scopes scopes = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Scopes(searchContext);&lt;/P&gt;
&lt;P&gt;ScopeDisplayGroupCollection scopeDisplayGroups = scopes.AllDisplayGroups;&lt;/P&gt;
&lt;P&gt;Uri siteUri = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Uri(currentSite.Url);&lt;/P&gt;
&lt;P&gt;ScopeDisplayGroup displayGroup = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;/P&gt;
&lt;P&gt;Scope defaultScope = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//retrieve new scope display group labels from feature properties&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//first, iterate through the scope display group labels to find the one that exists&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//so we can identify the default scope&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;foreach&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (SPFeatureProperty featureProperty &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; properties.Feature.Properties)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;currentGroupName = featureProperty.Value;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;try&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;displayGroup = scopes.GetDisplayGroup(siteUri, currentGroupName);&lt;/P&gt;
&lt;P&gt;defaultScope = displayGroup.Default;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;catch&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;InvalidCastException&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ex)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//do nothing if group is not found&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//retrieve new scope display group labels from feature properties&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;foreach&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (SPFeatureProperty featureProperty &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; properties.Feature.Properties)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;currentGroupName = featureProperty.Value;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;try&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;displayGroup = scopes.GetDisplayGroup(siteUri, currentGroupName);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//if display group exists, add any missing compiled shared scopes &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//this is a "bonus feature", since API doesn't allow us to determine which scopes are OOTB&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//normally only All Sites and People are added automatically to the search dropdown feature&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;foreach&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (Scope sharedScope &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; scopes.GetSharedScopes())&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//only add shared scopes that are currently compiled AND are not part of display group&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (!displayGroup.Contains(sharedScope) &amp;amp;&amp;amp;&lt;/P&gt;
&lt;P&gt;(sharedScope.CompilationState.Equals(ScopeCompilationState.Compiled)))&lt;/P&gt;
&lt;P&gt;displayGroup.Add(sharedScope);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;displayGroup.Update();&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;catch&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;InvalidCastException&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ex)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//if display group does not exist, create the new scope display group&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;ScopeDisplayGroup newDisplayGroup = scopeDisplayGroups.Create(currentGroupName, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Empty, siteUri, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;foreach&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (Scope sharedScope &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; scopes.GetSharedScopes())&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//only add shared scopes that are currently compiled&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (sharedScope.CompilationState.Equals(ScopeCompilationState.Compiled))&lt;/P&gt;
&lt;P&gt;newDisplayGroup.Add(sharedScope);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//if one was found, set the default scope to the same value for all new display groups&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//AND move it to the first choice on the list&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (defaultScope != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;newDisplayGroup.Remove(defaultScope);&lt;/P&gt;
&lt;P&gt;newDisplayGroup.Insert(0, defaultScope);&lt;/P&gt;
&lt;P&gt;newDisplayGroup.Default = defaultScope;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;newDisplayGroup.Update();&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;scopes.Update();&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;override&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; FeatureDeactivating(SPFeatureReceiverProperties properties) {&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;/* no op */&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;//do nothing - removing search scope display groups could be destructive&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;override&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; FeatureInstalled(SPFeatureReceiverProperties properties) {&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;/* no op */&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;override&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; FeatureUninstalling(SPFeatureReceiverProperties properties) {&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;/* no op */&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9639334" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/sharepoint/default.aspx">sharepoint</category><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/WSS/default.aspx">WSS</category><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/search/default.aspx">search</category><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/variations/default.aspx">variations</category></item><item><title>Resolving Issues with Faulty Features and STSADM EXPORT</title><link>http://blogs.msdn.com/bgeoffro/archive/2008/03/21/resolving-issues-with-faulty-features-and-stsadm-export.aspx</link><pubDate>Fri, 21 Mar 2008 17:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8329332</guid><dc:creator>bgeoffro</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/bgeoffro/comments/8329332.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bgeoffro/commentrss.aspx?PostID=8329332</wfw:commentRss><description>&lt;P&gt;If you're attempting an &lt;STRONG&gt;STSADM -o export &lt;/STRONG&gt;(or, I'd assume, a content deployment) of a site and receive the following error:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;FatalError: Failed to compare two elements in the array.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Check out the following KB article: &lt;A href="http://support.microsoft.com/kb/948726/en-us"&gt;http://support.microsoft.com/kb/948726/en-us&lt;/A&gt;&amp;nbsp;.&lt;/P&gt;
&lt;P&gt;The article indicates that the likely cause is&amp;nbsp;one or more&amp;nbsp;invalid feature references in the SPSite and/or SPWeb object. Fortunately, Steven Van de Craen authored&amp;nbsp;a wonderful GUI tool for removing "faulty features" (which is of course unsupported and should be used with caution, but nonetheless very useful). See &lt;A class="" href="http://www.moss2007.be/blogs/vandest/archive/2007/12/27/stsadm-o-export-fatalerror-failed-to-compare-two-elements-in-the-array.aspx?id=28" mce_href="http://www.moss2007.be/blogs/vandest/archive/2007/12/27/stsadm-o-export-fatalerror-failed-to-compare-two-elements-in-the-array.aspx?id=28"&gt;his article on the topic&lt;/A&gt; for more details.&lt;/P&gt;
&lt;P&gt;Cases where you might encounter these errors:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Sites that were migrated from a MOSS Enterprise implementation (even if they're not USING Enterprise features) to a MOSS Standard implementation&lt;/LI&gt;
&lt;LI&gt;Sites that were created in an beta version of MOSS/WSSv3&lt;/LI&gt;
&lt;LI&gt;Sites which reference custom features that have since been removed from the filesystem but were not properly deactivated and uninstalled&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8329332" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/WSS/default.aspx">WSS</category><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/administration/default.aspx">administration</category></item><item><title>List Attachments over 50MB need more than an increase in Maximum Upload Size...</title><link>http://blogs.msdn.com/bgeoffro/archive/2008/03/19/list-attachments-over-50mb-need-more-than-an-increase-in-maximum-upload-size.aspx</link><pubDate>Wed, 19 Mar 2008 22:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8326196</guid><dc:creator>bgeoffro</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/bgeoffro/comments/8326196.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bgeoffro/commentrss.aspx?PostID=8326196</wfw:commentRss><description>&lt;P&gt;Chalk this down as the 1045th* time I've been reminded that you learn something new about SharePoint every day.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;*The number of days I've been working with SharePoint... :)&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Requirement:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Increase the maximum upload size for documents and attachments to 60MB for a web application&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Apparent solution:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Connect to Central Admin&lt;/LI&gt;
&lt;LI&gt;Navigate to &lt;STRONG&gt;Central Admin &amp;gt; Application Management &amp;gt; Web Application General Settings&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Select your web application&lt;/LI&gt;
&lt;LI&gt;Set the &lt;STRONG&gt;Maximum Upload Size &lt;/STRONG&gt;value to &lt;STRONG&gt;60 &lt;/STRONG&gt;MB and hit &lt;STRONG&gt;OK&lt;/STRONG&gt;.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Results:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Upload a 55MB document to a doclib - &lt;STRONG&gt;success&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Attach a 55MB file to a list item - &lt;STRONG&gt;receive the classic "An unknown error occurred" message, scratch head in puzzlement&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Turns out there's a setting at the IIS level that will block list attachment uploads above 50MB. Below 50MB, any max upload size you pick (for example, 10MB) works fine for both list attachments and document uploads and is enforced directly through web app settings. Above 50MB, you need to make at least one minor tweak to your web.config to allow larger uploads.&lt;/P&gt;
&lt;P&gt;Complete solution for max upload sizes over 50MB:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Connect to Central Admin&lt;/LI&gt;
&lt;LI&gt;Navigate to &lt;STRONG&gt;Central Admin &amp;gt; Application Management &amp;gt; Web Application General Settings&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Select your web application&lt;/LI&gt;
&lt;LI&gt;Set the &lt;STRONG&gt;Maximum Upload Size &lt;/STRONG&gt;value to "X" MB and hit &lt;STRONG&gt;OK&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Repeat steps 6-7 for all zones for your web application on all servers hosting the web application role&lt;/LI&gt;
&lt;LI&gt;Open the web.config&lt;/LI&gt;
&lt;LI&gt;Replace the following line:&lt;BR&gt;&lt;STRONG&gt;&amp;lt;httpRuntime maxRequestLength="51200" /&amp;gt;&lt;/STRONG&gt;&lt;BR&gt;with&lt;BR&gt;&lt;STRONG&gt;&amp;lt;httpRuntime maxRequestLength="{X&amp;nbsp;* 1024}" /&amp;gt;&lt;/STRONG&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;if you're using SQL storage for your SharePoint content, the maximum&amp;nbsp;useful value for the &lt;STRONG&gt;maxRequestLength&lt;/STRONG&gt;&amp;nbsp;should be 2097152 (2GB in kilobytes = 2 * 1024 * 1024). Keep in mind that other limits may affect large uploads, most notably:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Site Collection Quota&lt;/LI&gt;
&lt;LI&gt;Timeouts (you may need to adjust these in BOTH Web Application General Settings and the &lt;STRONG&gt;executionTimeout&lt;/STRONG&gt; attribute of the &amp;lt;httpRuntime/&amp;gt; element)&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Timeout settings will be influenced by network throughput limitations like latency and available bandwidth&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Custom Storage Solution&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;External Blob Storage solution (see WSS SDK v1.3 for this feature that's new to WSS SP1) - whatever max BLOB size applies&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Disk Space&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;If using SQL Storage, this is the disk containing your data files for your webapp's content DBs&lt;/LI&gt;
&lt;LI&gt;If using an External Blob Storage solution, then this is wherever your blob store resides&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;For more on the &lt;STRONG&gt;httpRuntime &lt;/STRONG&gt;web.config element, see &lt;A href="http://msdn2.microsoft.com/en-us/library/e1f13641(VS.80).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/e1f13641(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/e1f13641(VS.80).aspx&lt;/A&gt; .&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8326196" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/WSS/default.aspx">WSS</category><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/administration/default.aspx">administration</category><category domain="http://blogs.msdn.com/bgeoffro/archive/tags/IIS/default.aspx">IIS</category></item></channel></rss>