<?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>Mark Arend : SharePoint</title><link>http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx</link><description>Tags: SharePoint</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Debugging web parts and other SharePoint custom code</title><link>http://blogs.msdn.com/markarend/archive/2008/09/09/debugging-web-parts-and-other-sharepoint-custom-code.aspx</link><pubDate>Tue, 09 Sep 2008 15:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8936482</guid><dc:creator>markarend</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/markarend/comments/8936482.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=8936482</wfw:commentRss><description>&lt;P&gt;Here are some tips for debugging your SharePoint web parts and other custom code. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;1. How do you debug assemblies that are in the GAC?&lt;/P&gt;
&lt;P&gt;2. Is there an easy way of attaching the debugger to the right process?&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;H3&gt;Debugging assemblies that live in the GAC&lt;/H3&gt;
&lt;P&gt;When debugging an assembly that lives in the GAC, you have to copy the symbol file (.pdb) from your project to the GAC.&amp;nbsp; The problem is, when you open a Windows file explorer to the GAC directory, C:\Windows\assembly, it doesn't behave like a folder that you can drag-and-drop into.&amp;nbsp; You must copy using another method.&lt;/P&gt;
&lt;P&gt;To view the GAC as typical folder structure using file explorer, enter &lt;B&gt;%systemroot%\assembly\gac_msil&lt;/B&gt; in the Run... dialog box under the start menu.&amp;nbsp; This folder opens the part of the GAC that contains managed code assemblies (from this location in file explorer, you can click the folder-up button to see other parts of the GAC).&lt;/P&gt;
&lt;P&gt;From %systemroot%\assembly\gac_msil, locate the folder having the name of your assembly, and open that.&amp;nbsp; Open the folder in there having the correct version number.&amp;nbsp; Finally you’ll see the dll.&amp;nbsp; To debug, drag the .pdb file from your bin\debug directory into that folder.&amp;nbsp; You can also use an xcopy command to do this, now that you see the full path to the dll location.&amp;nbsp; This path will change if you modify your assembly's version number.&amp;nbsp; Note that whenever you upgrade your solution, the .pdb file is removed from that folder, so you have to copy it there again to debug again.&lt;/P&gt;
&lt;P&gt;Of course you want to make sure to build in debug mode.&amp;nbsp; Some projects are set up with dependencies on the \release\ directory, which I think is a bad idea, but it's a fact of life sometimes.&amp;nbsp; If you don't want to change your build to Debug, you can quickly change your Release build to emit debug symbols: open the properties page for the project—make sure Configuration is Active (Release)—and on the Build tab, check “Define DEBUG constant” and uncheck “Optimize code” (you may also have to click the Advanced button and select "full"&amp;nbsp;symbols).&amp;nbsp; Now building in release mode will include debug symbols.&amp;nbsp; Be sure to change these settings back once you’re done.&lt;/P&gt;
&lt;H3&gt;Attaching the debugger to the right process&lt;/H3&gt;
&lt;P&gt;A number of people have asked me about the "Attach Debugger" menu item they see me use.&amp;nbsp; This is a community feature that's been around for more than a year, but it's good to refresh people's memory of this extremely useful tool.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;A &lt;A href="http://blogs.msdn.com/sharepoint/archive/2007/04/10/debugger-feature-for-sharepoint.aspx" mce_href="http://blogs.msdn.com/sharepoint/archive/2007/04/10/debugger-feature-for-sharepoint.aspx"&gt;SharePoint product team blog entry&lt;/A&gt; discusses the Attach Debugger feature that you can install for SharePoint pages.&amp;nbsp; It has a link to the CodePlex project &lt;A href="http://www.codeplex.com/features/Release/ProjectReleases.aspx?ReleaseId=2502" mce_href="http://www.codeplex.com/features/Release/ProjectReleases.aspx?ReleaseId=2502"&gt;SharePoint 2007 Features&lt;/A&gt; that you can install to enable this feature on the Site Actions menu of your sites:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/DebuggingwebpartsandotherSharePointcusto_71E3/Attach%20Debugger_2.gif" mce_href="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/DebuggingwebpartsandotherSharePointcusto_71E3/Attach%20Debugger_2.gif"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=195 alt="Attach Debugger" src="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/DebuggingwebpartsandotherSharePointcusto_71E3/Attach%20Debugger_thumb.gif" width=257 border=0 mce_src="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/DebuggingwebpartsandotherSharePointcusto_71E3/Attach%20Debugger_thumb.gif"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Extremely helpful!&amp;nbsp; And as a bonus, it seems faster than doing it from Visual Studio's Attach Debugger command.&lt;/P&gt;
&lt;P&gt;I recommend you look at the &lt;A href="http://www.codeplex.com/features/Release/ProjectReleases.aspx?ReleaseId=2502" mce_href="http://www.codeplex.com/features/Release/ProjectReleases.aspx?ReleaseId=2502"&gt;SharePoint 2007 Features&lt;/A&gt; project, it's got lots of goodies besides this.&lt;/P&gt;
&lt;DIV class=wlWriterSmartContent id=scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a087e32a-5e63-4328-8b52-29d5162142bd style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tags/SharePoint%20Development" rel=tag mce_href="http://technorati.com/tags/SharePoint%20Development"&gt;SharePoint Development&lt;/A&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8936482" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Web+Parts/default.aspx">Web Parts</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Development/default.aspx">Development</category></item><item><title>List of MOSS Timer Jobs</title><link>http://blogs.msdn.com/markarend/archive/2008/09/06/list-of-moss-timer-jobs.aspx</link><pubDate>Sat, 06 Sep 2008 16:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8927844</guid><dc:creator>markarend</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/markarend/comments/8927844.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=8927844</wfw:commentRss><description>&lt;P&gt;MOSS has many default timer jobs; information about them can be useful to understand the workings of your MOSS farm, and potentially to troubleshoot problems or plan for related types of customizations.&lt;/P&gt;
&lt;P&gt;The attached document provides a list of all MOSS timer jobs provided out-of-box, with some additional notes about them.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8927844" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/markarend/attachment/8927844.ashx" length="103424" type="application/msword" /><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Configuration/default.aspx">Configuration</category></item><item><title>Consolidated list of MOSS items</title><link>http://blogs.msdn.com/markarend/archive/2008/09/06/consolidated-list-of-moss-items.aspx</link><pubDate>Sat, 06 Sep 2008 16:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8927826</guid><dc:creator>markarend</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/markarend/comments/8927826.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=8927826</wfw:commentRss><description>&lt;P&gt;Sometimes you just need a list of things provided by MOSS, in order to plan what kind of things you will make available to users within your architecture.&lt;/P&gt;
&lt;P&gt;The attached document lists all out-of-box Lists, Web Parts, Site Templates and Site Actions provided out-of-box&amp;nbsp;by MOSS, along with their descriptions and availability.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8927826" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/markarend/attachment/8927826.ashx" length="186880" type="application/msword" /><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>MOSS Usage Reports explained</title><link>http://blogs.msdn.com/markarend/archive/2008/09/06/moss-usage-reports-explained.aspx</link><pubDate>Sat, 06 Sep 2008 15:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8927809</guid><dc:creator>markarend</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/markarend/comments/8927809.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=8927809</wfw:commentRss><description>&lt;P&gt;The site usage reports that MOSS provides are fairly simple, but can be useful if you haven't got any other tools for tracking site usage.&amp;nbsp; One problem with them, however,&amp;nbsp;is that the information they present is not really explained anywhere. Columns are often named "Value" and sometimes it's not clear exactly what the value represents.&amp;nbsp; Another example is what does "Requests" actually measure?&amp;nbsp;&amp;nbsp;The answer is that&amp;nbsp;Requests always measures Page Views, not all HTTP requests for individual items like images, style sheets, etc.&lt;/P&gt;
&lt;P&gt;The attached document gives clear, detailed explanations of all out-of-box report elements.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8927809" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/markarend/attachment/8927809.ashx" length="86016" type="application/msword" /><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Usage+reports/default.aspx">Usage reports</category></item><item><title>Colleagues, Social Distance &amp; Relevance in People Search; Social Networking tools</title><link>http://blogs.msdn.com/markarend/archive/2008/05/01/colleagues-social-distance-relevance-in-people-search-social-networking-tools.aspx</link><pubDate>Thu, 01 May 2008 16:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8447018</guid><dc:creator>markarend</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/markarend/comments/8447018.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=8447018</wfw:commentRss><description>&lt;P&gt;MOSS provides some very powerful features to enable the new buzzword "social networking."&amp;nbsp; Discussions about these can be found pretty easily, and I give an overview of some tools near the end of this posting.&amp;nbsp; But specifics about how some of the details work has been devilishly hard to find... until now.&amp;nbsp; Through discussions with various people in-the-know, I've been able to assemble answers to common questions around People Search and MySite web parts.&lt;/P&gt;
&lt;H3&gt;Social Distance&lt;/H3&gt;
&lt;P&gt;By default, the results on the People Search page are ordered by Social Distance.&amp;nbsp; What the heck is that?&amp;nbsp; It's an ordering of results based on colleague relationships.&amp;nbsp; Here's how it's computed:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Search results are always returned to the search results page sorted by &lt;B&gt;relevance&lt;/B&gt;. &lt;/LI&gt;
&lt;LI&gt;When viewing results by &lt;STRONG&gt;social distance&lt;/STRONG&gt;, additional processing on the search results page is used to group the results: 
&lt;UL&gt;
&lt;LI&gt;The &lt;EM&gt;first 3 pages &lt;/EM&gt;of search results are grouped by colleague-ness: first your colleagues appear, then colleagues of your colleagues, then everyone else. &lt;/LI&gt;
&lt;LI&gt;Within each group, the ordering is still by relevance. &lt;/LI&gt;
&lt;LI&gt;When paging through results, another 3 pages of results will be grouped once you reach page 4, then page 7, etc. &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;By default, 10 results appear per page, so this groups people in batches of 30.&amp;nbsp; If you customized the People Search results page to show 25 results per page, this would group people in batches of 75.&lt;/P&gt;
&lt;P&gt;There are potentially some quirks with this algorithm that was designed to give the best value in a lightweight manner.&amp;nbsp; Your colleagues will appear at the top of the list on page 1, but if you have lots of colleagues, more of them might appear on page 4.&amp;nbsp; This is because the colleague grouping takes place on the client, starting with a relevance ranking.&amp;nbsp; So if some of your colleagues are relevance-ranked after 3 pages worth of results, these will be grouped once you get to the next set of 3 pages (page 4, page 7, etc).&amp;nbsp; Based on relevance, these people should be less relevant to your query.&lt;/P&gt;
&lt;P&gt;The People Search results page allows you to toggle the results ordering to only Relevance, ignoring the Social Distance grouping.&lt;/P&gt;
&lt;H3&gt;Relevance&lt;/H3&gt;
&lt;P&gt;Relevance ranking in people search is the same as that used in regular search across lists and documents.&amp;nbsp; I'm told that the ranking algorithm MOSS uses in all cases is &lt;A title="Wikipedia entry on BM25 and BM25F ranking algorithms" href="http://en.wikipedia.org/wiki/Okapi_BM25" target=_blank mce_href="http://en.wikipedia.org/wiki/Okapi_BM25"&gt;BM25F&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Conceptually, a user's profile is treated as a document about that person with their name as the title.&amp;nbsp; At a basic level, the more search query terms that appear in the person's profile, the more relevant the result.&amp;nbsp; Matches against a few special fields (e.g. name, alias) are returned in the high confidence webpart.&lt;/P&gt;
&lt;P&gt;Note that the names of discussion lists that a user belongs to are included in that user's profile information.&amp;nbsp; This means that a people search for "rock climbers" should return all of the people who are members of a distribution list named "Rock Climbers at Contoso" as well as anyone who has the phrase "rock climbers" in their profile information, such as in their "About Me" field.&lt;/P&gt;
&lt;H3&gt;Colleagues&lt;/H3&gt;
&lt;P&gt;Here's where the real value of social distance and other meaningful relationships is computed.&lt;/P&gt;
&lt;P&gt;A list of your colleagues is stored in the profile database.&amp;nbsp; During a profile import, this list is initially populated with a set of "immediate colleagues" that are computed from your profile properties: manager, peers and direct reports.&amp;nbsp; This way, when you first look at your Colleagues web part, it's not blank.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Then, from an editing page on your Profile, you can edit your colleagues list to add &amp;amp; remove specific people, and to group them and set their visibility to other people.&amp;nbsp; Also from here, you can ask SharePoint to suggest other colleagues, and these suggestions are collected from several places.&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width=400 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=162&gt;&lt;A href="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=311 alt=image src="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_thumb_2.png" width=146 border=0 mce_src="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_thumb_2.png"&gt;&lt;/A&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=236&gt;
&lt;P&gt;My Microsoft badge photo, 1999!&lt;/P&gt;
&lt;P&gt;From your MySite page (or your Profile page, which is available even if MySites are turned off), click &lt;FONT color=#0000ff&gt;Colleagues&lt;/FONT&gt; to edit your colleague list.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H4&gt;Where do colleagues come from?&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Immediate colleagues &lt;BR&gt;&lt;/STRONG&gt;&lt;EM&gt;...automatic: during profile import; comprised of:&lt;/EM&gt; 
&lt;UL&gt;
&lt;LI&gt;Your manager &lt;/LI&gt;
&lt;LI&gt;Your peers (others who report to your manager) &lt;/LI&gt;
&lt;LI&gt;Your direct reports &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Colleagues added &lt;/STRONG&gt;by you &lt;BR&gt;&lt;EM&gt;...manual: via editing page on your Profile&lt;/EM&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Suggested colleagues&lt;/STRONG&gt; &lt;BR&gt;&lt;EM&gt;...lookup: manually guided via editing page on your Profile; comprised of:&lt;/EM&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Sent items &lt;/STRONG&gt;in Outlook. Periodically (every 5 days or so, depending on usage) Outlook analyzes Sent Items for common recipients, weighted by frequency of contacts and other factors. This is how Outlook is able to suggest likely recipients when you begin typing their name in the To: line, and in my experience, it seems to work pretty well.&amp;nbsp; When you click Suggested colleagues, it collects these names from Outlook via an ActiveX control, and adds them to the list of suggestions. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Office Communicator &lt;/STRONG&gt;contacts are examined; that is, those contacts that you've added to your Office Communicator client from the company directory.&amp;nbsp; These are also collected from the Communicator client via an ActiveX control. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Site Memberships &lt;/STRONG&gt;are all sites &lt;EM&gt;in which you are explicitly included &lt;/EM&gt;in the "~Members" group for the site (where ~ is your site name).&amp;nbsp; Other users who are also explicitly included in the ~Members group on those sites are suggested as your colleagues.&amp;nbsp; This information is collected by a WSS profile synchronization timer job. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;DG (Distribution Group) Memberships &lt;/STRONG&gt;are examined for suggestions.&amp;nbsp; Distribution groups stored in AD are collected during the AD import. &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Colleagues from these sources are collected and the top 20 or so are displayed as suggestions when you click "Add Colleague" on your colleague editing page.&amp;nbsp; It's not fruitful to pursue a more detailed understanding of this calculation, because the recommendation for improving the "quality" of colleagues found is the same: people associated with items you access more often are more likely to be suggested as your colleagues.&amp;nbsp; If you don't like the suggestions, you can remove individuals from the suggestion list one by one or all at once from this page, then get a new list of suggestions.&lt;/P&gt;
&lt;H4&gt;Privacy&lt;/H4&gt;
&lt;P&gt;Whoa!&amp;nbsp; Is SharePoint looking at my email?&amp;nbsp; I don't want that, how do I prevent it?&lt;/P&gt;
&lt;P&gt;First, SharePoint's not looking at your emails.&amp;nbsp; It gets information about who you sent emails to by asking Outlook for that information.&amp;nbsp; Second, it will never do this without asking your permission.&amp;nbsp; You can always say no:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_3.png" mce_href="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_3.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=182 alt=image src="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_thumb.png" width=469 border=0 mce_src="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;If you say Yes, then SharePoint will assemble a list of suggested colleagues for you, and you can accept or reject these suggestions.&amp;nbsp; But even if you say No, you can still edit your colleagues to search for and add new people, and to set the privacy of who should see that they are your colleague (Everyone, My Colleagues, My Workgroup, My Manager and Only Me):&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_7.png" mce_href="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_7.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=297 alt=image src="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_thumb_1.png" width=541 border=0 mce_src="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/05526a0e7f85_CF27/image_thumb_1.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;Social Networking tools&lt;/H3&gt;
&lt;P&gt;Why did we go through all this trouble to try and figure out who your colleagues are?&amp;nbsp; Social Networking, baby!&amp;nbsp; We spent a good bit of time on the inputs and the outputs of this to make it a really useful function, instead of just paying lip service to it.&lt;/P&gt;
&lt;P&gt;The &lt;EM&gt;inputs&lt;/EM&gt; are the information about who your colleagues really are.&amp;nbsp; A simple option would have been to just provide a place for you to register your colleagues, and not go through all this supposedly intelligent guesswork.&amp;nbsp; But that would have made it almost useless, because most people are just not going to take the time to populate this list, and even fewer will maintain it as their colleagues change over time, which is natural.&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT size=3&gt;SharePoint uses the information already embedded in your company's infrastructure and the changing data you deal with on a daily basis to help you connect with the right people.&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Sounds like market-speak, but that's really the goal and I think it does an amazing job.&lt;/P&gt;
&lt;P&gt;The &lt;EM&gt;outputs&lt;/EM&gt; are the tools that SharePoint can provide based on this colleague information.&amp;nbsp; Consider some of these details:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#ea7500&gt;People Search&lt;/FONT&gt;&lt;/STRONG&gt; ranking by Social Distance.&amp;nbsp; By default, the top people returned when you search for a name will be the people you most likely want to find: people you've communicated with recently, perhaps as a participant on an email thread or a collaborator on a site, and now you want to find more information about them. &lt;BR&gt;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#ea7500&gt;In Common with You&lt;/FONT&gt;&lt;/STRONG&gt; web part on My Profile page.&amp;nbsp; When you view someone else's profile (for example, by clicking their People Search result), this web part shows you a list of people that you both may have in common.&amp;nbsp; This is useful to quickly understand business relationships that you may need to know about.&amp;nbsp; Categories shown are 
&lt;UL&gt;
&lt;LI&gt;Manager we both report under &lt;/LI&gt;
&lt;LI&gt;Colleagues we both know &lt;/LI&gt;
&lt;LI&gt;Memberships we both share &lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#ea7500&gt;Colleague Tracker&lt;/FONT&gt;&lt;/STRONG&gt; web part on MySite.&amp;nbsp; This shows you recent changes to user properties of your colleagues, effectively a newsletter of what's new with people you work with.&amp;nbsp; Information you can track includes 
&lt;UL&gt;
&lt;LI&gt;Anniversaries &lt;/LI&gt;
&lt;LI&gt;Profile property changes &lt;/LI&gt;
&lt;LI&gt;Membership changes &lt;/LI&gt;
&lt;LI&gt;New documents this person has posted &lt;/LI&gt;
&lt;LI&gt;Out of Office status &lt;/LI&gt;
&lt;LI&gt;Blog postings from this person &lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#ea7500&gt;Colleagues&lt;/FONT&gt; &lt;/STRONG&gt;web part on My Profile page.&amp;nbsp; This displays your current list of colleagues, grouped into categories that you may have applied. &lt;BR&gt;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#ea7500&gt;Memberships&lt;/FONT&gt; &lt;/STRONG&gt;web part on MySite.&amp;nbsp; This shows Distribution Lists and SharePoint Sites of which you are an explicit member.&amp;nbsp; For SharePoint Sites, it is rather specific: you must appear as an individual member of the ~Members group on the site (where ~ is the site name).&amp;nbsp; If you have access to the site through a different configuration, such as being a member of the ~Owners group, or being a member of an Active Directory Security Group that is a member of the ~Members group, this is not counted.&amp;nbsp; Otherwise, everyone would very likely see all the portal sites displayed as their memberships, and that would not be useful. &lt;BR&gt;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#ea7500&gt;Organization Hierarchy&lt;/FONT&gt; &lt;/STRONG&gt;web part on My Profile page.&amp;nbsp; This shows your manager, your peers (others who report to your manager) and your direct reports, if you have any. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;These are &lt;EM&gt;some &lt;/EM&gt;of the tools that MOSS provides for Social Networking; I've highlighted the ones that use profile data and the powerful "colleague" pattern to show meaningful relationships among people.&amp;nbsp; For a better introduction to the full set, see the product team's&amp;nbsp;&lt;A class="" href="http://blogs.msdn.com/sharepoint/archive/2007/10/24/enabling-and-managing-social-networks-for-business-use-with-microsoft-office-sharepoint-server-2007.aspx" mce_href="http://blogs.msdn.com/sharepoint/archive/2007/10/24/enabling-and-managing-social-networks-for-business-use-with-microsoft-office-sharepoint-server-2007.aspx"&gt;Enabling and Managing Social Networks for Business use with MOSS&lt;/A&gt;.&lt;/P&gt;
&lt;DIV class=wlWriterSmartContent id=scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a92c1118-4c90-4941-b4ec-057a433765ed style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tags/SharePoint" rel=tag mce_href="http://technorati.com/tags/SharePoint"&gt;SharePoint&lt;/A&gt;,&lt;A href="http://technorati.com/tags/Social%20Networking" rel=tag mce_href="http://technorati.com/tags/Social%20Networking"&gt;Social Networking&lt;/A&gt;,&lt;A href="http://technorati.com/tags/MySites" rel=tag mce_href="http://technorati.com/tags/MySites"&gt;MySites&lt;/A&gt;,&lt;A href="http://technorati.com/tags/People%20Search" rel=tag mce_href="http://technorati.com/tags/People%20Search"&gt;People Search&lt;/A&gt;,&lt;A href="http://technorati.com/tags/Social%20Distance" rel=tag mce_href="http://technorati.com/tags/Social%20Distance"&gt;Social Distance&lt;/A&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8447018" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Search/default.aspx">Search</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Web+Parts/default.aspx">Web Parts</category><category domain="http://blogs.msdn.com/markarend/archive/tags/MySites/default.aspx">MySites</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Social+Networking/default.aspx">Social Networking</category></item><item><title>Test With Correct Privileges</title><link>http://blogs.msdn.com/markarend/archive/2008/03/06/test-with-correct-privileges.aspx</link><pubDate>Fri, 07 Mar 2008 00:12:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8078784</guid><dc:creator>markarend</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/markarend/comments/8078784.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=8078784</wfw:commentRss><description>&lt;p&gt;When developing web parts and other components with code, it's important to remember that operations performed by code may require certain privileges.&amp;#160; During development, the code runs in the security context of the developer, who is usually a server administrator.&amp;#160; This means all operations are permitted, so access problems don't arise.&amp;#160; During testing and production, however, the security context of the code may be different because it's being invoked by testers and end-users.&lt;/p&gt;  &lt;p&gt;Therefore, all components should be tested with several end-user accounts: one would be the developer&amp;#8217;s account which is usually a server admin; that&amp;#8217;s how most people do their unit testing. But tests should also be made with an account of minimal privilege, say Visitor.&amp;#160; Some components might be doing things with the object model that will only work when an administrator invokes it. If this turns out to be the case, a technique called &amp;#8220;elevation of privilege&amp;#8221; can be used to overcome it.&amp;#160; See MSDN article &lt;a title="Article by Ted Pattison Group" href="http://msdn2.microsoft.com/en-us/library/bb466220.aspx" target="_blank"&gt;Running Commands with Elevated Privileges in Windows SharePoint Services 3.0&lt;/a&gt; for an explanation of doing this.&lt;/p&gt;  &lt;p&gt;What code needs to be tested using different privileges? &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. Code that's invoked as the result of an end-user action. An example is a custom web part that is displayed on a page. The end-user opens the page and this is what invokes the web part code under the user's security context. A counter-example is timer job code that is invoked by SharePoint.&lt;/p&gt;    &lt;p&gt;2. Code that uses the SharePoint API. This is typically where security errors arise. If a component does not use the SharePoint API, then chances are it will not need to elevate its privilege. To be entirely sure, it should be tested at minimum privilege, but this criterion can be used to prioritize testing of other components higher.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;How can a developer test with different accounts?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The simplest approach is to create three accounts &amp;quot;Test Visitor,&amp;quot; &amp;quot;Test Member,&amp;quot; and &amp;quot;Test Owner&amp;quot; in Active Directory and then to add these accounts to matching groups on the test sites.&lt;/p&gt;    &lt;p&gt;First, the developer must decide in what security contexts the component is supposed to work. For example, most end-user web parts should work for users signed on as Test Visitor. On the other hand, an stsadm extension is only invoked by a server admin and should not be tested with a minimum privilege account.&lt;/p&gt;    &lt;p&gt;&amp;quot;Sign on as different user&amp;quot; can be used to choose one of the test accounts as appropriate; however, in some cases, this approach does not seem to &amp;#8220;stick&amp;#8221; based on browser state or browsing behavior (e.g. browsing to My Site when browser is configured for automatic logon). The best way to ensure that the desired account is used is to configure the browser to always prompt for credentials, then to open a new browser window to begin testing. Then, re-run all unit tests that exercise the component directly (not, say, the deployment of the component).&lt;/p&gt; &lt;/blockquote&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:9087756e-a110-4edd-baa3-5f9e1bf807da" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Minimum%20privilege" rel="tag"&gt;Minimum privilege&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Web%20part%20security" rel="tag"&gt;Web part security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Code%20Access%20Security" rel="tag"&gt;Code Access Security&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8078784" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Security/default.aspx">Security</category></item><item><title>Using Reflector to See SharePoint's "Source" Code</title><link>http://blogs.msdn.com/markarend/archive/2008/02/28/using-reflector-to-see-sharepoint-s-source-code.aspx</link><pubDate>Fri, 29 Feb 2008 00:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7937568</guid><dc:creator>markarend</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/markarend/comments/7937568.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=7937568</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;FONT color=red&gt;Important Note:&lt;/FONT&gt; Customers are advised to review the end user license agreement (EULA) for the relevant Microsoft products before using this tool.&amp;nbsp; This blog entry does not authorize or endorse any use of Microsoft products that is not addressed specifically by&amp;nbsp;the product's EULA.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Do you sometimes use a "reflector" program to examine SharePoint source code? This can be necessary to:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Understand out how SharePoint is doing something, to find what elements can be customized. &lt;/LI&gt;
&lt;LI&gt;Understand what members to override in classes you create that inherit from SharePoint classes. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The de facto standard program for doing this is &lt;A title="Lutz Roeder's famous tool now maintained by Red-Gate software" href="http://www.red-gate.com/products/reflector/" mce_href="http://www.red-gate.com/products/reflector/"&gt;Lutz Roeder's Reflector&lt;/A&gt;. The MSDN &lt;A href="http://msdn.microsoft.com/msdnmag/issues/04/07/MustHaveTools/#S8" mce_href="http://msdn.microsoft.com/msdnmag/issues/04/07/MustHaveTools/#S8"&gt;article on ten must-have tools&lt;/A&gt; has a great description of how helpful it can be and how to use it.&lt;/P&gt;
&lt;P&gt;One thing the article doesn't tell you is where to find SharePoint's assemblies; fortunately it's not that hard. Click "Open" in Reflector, then with a little bit of browsing, most people easily find the dlls in the ISAPI directory of the "12-hive" (C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI).&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P align=justify&gt;&lt;EM&gt;Open one or more of these dlls, then browse the classes to see how SharePoint's put together… the Disassemble tool is exceedingly useful! Note: the code you see is reconstructed from MSIL, into the language of your choice (C#, VB, Delphi, C++ or Chrome)… the product teams didn't really use all those goto's!&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;However, some SharePoint namespaces seem to be missing or incomplete when viewed in Reflector. This had me baffled for quite some time, until I found the following.&lt;/P&gt;
&lt;P&gt;Some SharePoint assemblies are stored in the _app_bin directory of the web application instead of the ISAPI directory in the 12-hive. Presumably, the reason for distributing certain code into the web application's root is related to something like stability, security or scalability. But the important point is if you're using Reflector to look at SharePoint code, you may need to look here as well.&lt;/P&gt;
&lt;P&gt;This is especially true for a namespace like Microsoft.SharePoint.ApplicationPages. Two assemblies contribute members to this namespace: 12\ISAPI\Microsoft.SharePoint.dll and Inetpub\...\_app_bin\Microsoft.SharePoint.ApplicationPages.dll. If you just reflect the one in ISAPI, you'll see very few members; the ones you typically want to look at are in _app_bin!&lt;/P&gt;
&lt;H3&gt;SharePoint DLL locations&lt;/H3&gt;
&lt;P&gt;Here's a list of all the SharePoint assemblies and where they appear.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;12\ISAPI&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Microsoft.Office.Excel.Server.Udf.dll &lt;BR&gt;Microsoft.Office.Excel.Server.WebServices.dll &lt;BR&gt;Microsoft.Office.Policy.dll &lt;BR&gt;Microsoft.Office.Server.dll &lt;BR&gt;Microsoft.Office.Server.Search.dll &lt;BR&gt;microsoft.office.workflow.tasks.dll&lt;/P&gt;
&lt;P&gt;Microsoft.SharePoint.dll &lt;BR&gt;microsoft.sharepoint.portal.dll &lt;BR&gt;Microsoft.SharePoint.Portal.SingleSignon.dll &lt;BR&gt;Microsoft.SharePoint.Portal.SingleSignon.Security.dll &lt;BR&gt;Microsoft.SharePoint.Publishing.dll &lt;BR&gt;Microsoft.SharePoint.Search.dll &lt;BR&gt;Microsoft.SharePoint.Security.dll &lt;BR&gt;microsoft.sharepoint.WorkflowActions.dll&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#808080&gt;Not .NET assemblies (can't reflect): &lt;BR&gt;OWSSVR.DLL &lt;BR&gt;SHTML.DLL &lt;BR&gt;SSOCLI.DLL&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Inetpub\wwwroot\wss\VirtualDirectories\&amp;lt;web app&amp;gt;\_app_bin&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Microsoft.Office.DocumentManagement.Pages.dll &lt;BR&gt;Microsoft.Office.officialfileSoap.dll &lt;BR&gt;Microsoft.Office.Policy.Pages.dll &lt;BR&gt;Microsoft.Office.SlideLibrarySoap.dll &lt;BR&gt;Microsoft.Office.Workflow.Pages.dll &lt;BR&gt;Microsoft.Office.WorkflowSoap.dll&lt;/P&gt;
&lt;P&gt;Microsoft.SharePoint.ApplicationPages.dll&lt;/P&gt;
&lt;P&gt;stssoap.dll&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;H3&gt;Obfuscation tips&lt;/H3&gt;
&lt;P&gt;Sometimes, not too often, when Reflector is disassembling source code for you, it will show "This item is obfuscated and can not be translated" instead of code. I think the product team did this for some of the more "sensitive" areas of the code (such as LogInAsAnotherUser) and also on a bit of a random basis, perhaps to prevent fully reverse engineering the product. In any case, by changing the translation language to IL in Reflector, you might get enough information from the MSIL code to answer the question that drove you there in the first place. For example, sometimes I just need to know what modules are being called, or what strings are being used to find other resources in the 12-hive; these are still visible in MSIL.&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri&gt;&lt;FONT color=#ff0000&gt;Important Note:&lt;/FONT&gt; Customers are advised to review the end user license agreement (EULA) for the relevant Microsoft products before using this tool.&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-TOP: 0px" id=scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4cfdc91a-dd90-4232-a912-95ef3d37c17a class=wlWriterSmartContent&gt;Technorati Tags: &lt;A href="http://technorati.com/tags/SharePoint" rel=tag mce_href="http://technorati.com/tags/SharePoint"&gt;SharePoint&lt;/A&gt;,&lt;A href="http://technorati.com/tags/MOSS+2007" rel=tag mce_href="http://technorati.com/tags/MOSS+2007"&gt;MOSS+2007&lt;/A&gt;,&lt;A href="http://technorati.com/tags/Development" rel=tag mce_href="http://technorati.com/tags/Development"&gt;Development&lt;/A&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7937568" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/API/default.aspx">API</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Development/default.aspx">Development</category></item><item><title>MySite Pages and Architecture</title><link>http://blogs.msdn.com/markarend/archive/2008/02/22/mysite-pages-and-architecture.aspx</link><pubDate>Sat, 23 Feb 2008 07:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7853842</guid><dc:creator>markarend</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/markarend/comments/7853842.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=7853842</wfw:commentRss><description>&lt;P&gt;MySites are very interesting on many levels.&amp;nbsp; When you start to think about how to architect, deploy or customize them, you may encounter some initial confusion and a lack of detailed information.&amp;nbsp; For instance, did you know that your MySite's Home page and the My Profile page are in completely&amp;nbsp;different site collections?&amp;nbsp; What's up with that?&lt;/P&gt;
&lt;P&gt;The reason is that&amp;nbsp;a My Profile page is provided for every user in the portal regardless of whether they have a MySite, or even if MySites is disabled.&amp;nbsp; Actually,&amp;nbsp;a single page renders every MyProfile page: &lt;U&gt;http://mysite/person.aspx&lt;/U&gt;. This page has code that displays a "Home" tab linking to the user's MySite at &lt;U&gt;http://mysite/personal/userid/default.aspx&lt;/U&gt; if it exists.&amp;nbsp; The Home tab makes it &lt;EM&gt;appear&lt;/EM&gt; that these two pages are&amp;nbsp;part of&amp;nbsp;the same site.&amp;nbsp; But the URLs hint at the truth: the My Profile page is on&amp;nbsp;one site collection, while the user's MySite Home page is on another.&lt;/P&gt;
&lt;P&gt;You knew&amp;nbsp;each MySite is hosted in its own site collection, right?&amp;nbsp; When a MySite is created for a user (see below), that user is added to the Owners group for the new site collection, and is also added to the Site Administrators list.&amp;nbsp; This user has full power over their MySite.&amp;nbsp; To customize that is a bit difficult, but possible.&lt;/P&gt;
&lt;P&gt;I created a Visio diagram that depicts the relationships between the pages, where profile information is used on them, and how the links between them interact.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Screenshot (click to download the diagram)&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A title="MySite Pages + Architecture.vsd" href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=ReferenceTopics&amp;amp;DownloadId=840" target=_blank mce_href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=ReferenceTopics&amp;amp;DownloadId=840"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=362 alt="MySite page relationships" src="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/MySitePagesandArchitecture_1442B/image6.png" width=399 border=0 mce_src="http://blogs.msdn.com/blogfiles/markarend/WindowsLiveWriter/MySitePagesandArchitecture_1442B/image6.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What happens when you browse to &lt;U&gt;http://mysite/&lt;/U&gt;?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Whenever you browse to &lt;U&gt;http://mysite/&lt;/U&gt;, you're redirected to &lt;U&gt;http://mysite/personal/userid/default.aspx&lt;/U&gt; through a few steps:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 12pt 0in 10pt 10.1pt" 10.1pt? 10pt 0in 12pt MARGIN:&gt;&lt;U&gt;http://mysite/default.aspx&lt;/U&gt; inherits from Microsoft.SharePoint.Portal.WebControls.MySiteHostHomePage.&amp;nbsp; This assembly authorizes the user against the MySite shared service rights (can be enabled/disabled by users or groups), then emits an HttpResponse.Redirect to either /_layouts/MySite.aspx or /_layouts/AccessDenied.aspx, accordingly.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 12pt 0in 10pt 10.1pt" 10.1pt? 10pt 0in 12pt MARGIN:&gt;&lt;U&gt;/_layouts/MySite.aspx&lt;/U&gt; inherits from Microsoft.SharePoint.Portal.WebControls.CreatePersonalSpace.&amp;nbsp; This assembly&amp;nbsp;examines the user profile property &lt;STRONG&gt;Personal site&lt;/STRONG&gt;.&amp;nbsp; &lt;/DIV&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 12pt 0in 10pt 10.1pt"&gt;If the Personal site property is blank, CreatePersonalSpace creates a new MySite site collection for this user, then stores its relative URL&amp;nbsp;(e.g. "/personal/userid/")&amp;nbsp;in the Personal site property.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 12pt 0in 10pt 10.1pt"&gt;CreatePersonalSpace then emits an HttpResponse.Redirect to the URL in the Personal site property.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 12pt 0in 10pt 10.1pt"&gt;You arrive at &lt;U&gt;http://mysite/personal/userid/default.aspx&lt;/U&gt;, where "mysite" is the URL of the web application hosting your MySites, and "userid" is your user id.&lt;/DIV&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 12pt 0in 10pt 10.1pt"&gt;Note, other configurations could change this URL, such as the Personal Site Location ("personal") and the Site Naming Format (whether "userid" should include your domain.)&amp;nbsp; These settings are found on the SSP Admin page "My Site settings."&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;Customizing MySite&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Steve Peschka has the best information for &lt;A title="Link to the SharePoint Product Team's blog" href="http://blogs.msdn.com/sharepoint/archive/2007/03/22/customizing-moss-2007-my-sites-within-the-enterprise.aspx" target=_blank mce_href="http://blogs.msdn.com/sharepoint/archive/2007/03/22/customizing-moss-2007-my-sites-within-the-enterprise.aspx"&gt;customizing MySites&lt;/A&gt;, including how to set&amp;nbsp;a custom&amp;nbsp;master page automatically for all new MySites being created... this one's not obvious!&amp;nbsp; Steve has a very clever approach that uploads an XML file to each new MySite, containing instructions on what should be modified.&amp;nbsp; Then, a control in the custom master page reads the XML file and performs the customizations.&amp;nbsp; He explains why this approach is necessary.&lt;/P&gt;
&lt;P&gt;His XML spec for customizations provides several things you can do, such as removing/adding web parts and&amp;nbsp;modifying QuickLaunch links.&amp;nbsp; He doesn't provide a way to change the permissions of the owner... look for another blog posting from me on how to do that when you want to restrict the rights of&amp;nbsp;each MySite's owner.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;See also&lt;BR&gt;&lt;/STRONG&gt;To enable/disable MySites, &lt;/EM&gt;&lt;A id=ctl00___ctl00___ctl02___Results___postlist___EntryItems_ctl01_PostTitle href="http://blogs.msdn.com/markarend/archive/2007/04/26/managing-mysite-creation-and-usage.aspx"&gt;&lt;EM&gt;Managing MySite Creation and Usage&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;.&lt;BR&gt;If MySites are disabled, &lt;/EM&gt;&lt;A id=ctl00___ctl00___ctl02___Results___postlist___EntryItems_ctl00_PostTitle href="http://blogs.msdn.com/markarend/archive/2007/11/08/where-is-my-picture-stored-what-if-mysites-are-off.aspx"&gt;&lt;EM&gt;Where is My Picture stored? What if MySites are off?&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7853842" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/MySites/default.aspx">MySites</category></item><item><title>Searching Resource (resx) files</title><link>http://blogs.msdn.com/markarend/archive/2008/01/25/searching-resource-resx-files.aspx</link><pubDate>Sat, 26 Jan 2008 02:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7248326</guid><dc:creator>markarend</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/markarend/comments/7248326.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=7248326</wfw:commentRss><description>&lt;P&gt;Often, a request comes to customize some of the text that SharePoint displays.&amp;nbsp; And often, that text is stored in one of SharePoint's resource files, so it's just a matter of finding the right one.&amp;nbsp; But I've noticed that Windows explorer doesn't do a very good job of searching inside *.resx files.&amp;nbsp; In fact it behaves as though it just skips these files.&amp;nbsp; Of course, you can open the resx files in Visual Studio to search them, but they appear in many different directories, so it can be a bit of a headache just to get them all opened.&lt;/P&gt;
&lt;P&gt;After needing to do this for about the 30th time, I decided to make searchable copies of SharePoint's resx files... easy enough, just save them all as xml.&amp;nbsp; For your convenience, here they are in one zip file.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Download: &lt;/EM&gt;&lt;A title="Link to the Releases page!" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=SearchMossResources&amp;amp;ReleaseId=68" mce_href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=SearchMossResources&amp;amp;ReleaseId=68"&gt;http://code.msdn.microsoft.com/SearchMossResources&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7248326" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Customization/default.aspx">Customization</category></item><item><title>SharePoint Lists as DataTables</title><link>http://blogs.msdn.com/markarend/archive/2008/01/25/sharepoint-lists-as-datatables.aspx</link><pubDate>Sat, 26 Jan 2008 01:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7248039</guid><dc:creator>markarend</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/markarend/comments/7248039.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=7248039</wfw:commentRss><description>&lt;P&gt;You may know that &lt;STRONG&gt;SPList&lt;/STRONG&gt; can return a &lt;STRONG&gt;DataTable&lt;/STRONG&gt; type: SPList.Items.GetDataTable().&amp;nbsp; And if you've worked with this, you may know that the DataTable you get is not databound to the list.&amp;nbsp; This means you can't update the List from changes you make to the DataTable.&amp;nbsp; In addition, if the List is empty, the DataTable you get back won't have any schema information.&amp;nbsp; I don't know if that's a bug, but it's certainly a pain.&lt;/P&gt;
&lt;P&gt;I wrote a code sample to overcome these problems by providing a new type: &lt;STRONG&gt;ListDataTable&lt;/STRONG&gt;.&amp;nbsp; Instantiate an object of this type with the URL of a list, and it behaves like a DataTable connected to the list.&amp;nbsp; You can perform Insert, Update and Delete queries on the ListDataTable, then just call Update() to save those changes back to the list.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Download: &lt;/EM&gt;&lt;A title=http://code.msdn.microsoft.com/ListDataTable href="http://code.msdn.microsoft.com/ListDataTable" mce_href="http://code.msdn.microsoft.com/ListDataTable"&gt;http://code.msdn.microsoft.com/ListDataTable&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Important Guidelines&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;"Wow, I can use SharePoint like a database? Even making join relationships between lists?"&amp;nbsp; Hold on, there, Skippy.&amp;nbsp; Yes,&amp;nbsp;it's possible, but maybe not so desirable.&amp;nbsp; Consider what you want to accomplish and why.&amp;nbsp; You can use Excel spreadsheets like a database with joined tables, too, but it's not usually a good idea.&amp;nbsp; SharePoint and Excel are designed for user interaction, not serving data to applications... so this approach may not scale arbitrarily.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Recommendation 1: use the ListDataTable type to help you manipulate data in SharePoint lists with the power and flexibility of queries.&lt;/P&gt;
&lt;P&gt;Recommendation 2: Don't forget Microsoft Access... it's a fantastic tool for manipulating SharePoint lists.&amp;nbsp; On a list's DataSheet view, click the long, thin toolbar tab to the right of the datasheet.&amp;nbsp; This opens options for linking to Access.&amp;nbsp; Or, from Access, open your SharePoint lists directly.&amp;nbsp; You can really clean up data in big lists in a hurry with this approach.&lt;/P&gt;
&lt;P&gt;And Sahil Malik has another technique for treating lists like tables: &lt;A class="" href="http://blah.winsmarts.com/2007-10-Performing_joins_between_SharePoint_lists.aspx" mce_href="http://blah.winsmarts.com/2007-10-Performing_joins_between_SharePoint_lists.aspx"&gt;creating a join using a DataView web part&lt;/A&gt; from SharePoint Designer 2007.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7248039" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Development/default.aspx">Development</category></item><item><title>Master Page stsadm commands</title><link>http://blogs.msdn.com/markarend/archive/2008/01/24/master-page-stsadm-commands.aspx</link><pubDate>Fri, 25 Jan 2008 06:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7232962</guid><dc:creator>markarend</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/markarend/comments/7232962.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=7232962</wfw:commentRss><description>&lt;P&gt;Have you ever wanted to use stsadm to view or manipulate a site's master page?&amp;nbsp; Unfortunately there are no default commands to do so.&amp;nbsp; But stsadm is easy--and fun, some might even argue--to extend.&lt;/P&gt;
&lt;P&gt;I wrote a sample project that you can use to perform the following functions:&lt;/P&gt;
&lt;LI&gt;stsadm -o &lt;B&gt;ShowMasterPage&lt;/B&gt; -url &amp;lt;site url&amp;gt; 
&lt;LI&gt;stsadm -o &lt;B&gt;SetMasterPage&lt;/B&gt; -url &amp;lt;site url&amp;gt; -masterpageurl [&amp;lt;page url&amp;gt; | Parent] 
&lt;P&gt;This can come in very handy for troubleshooting and fixing problems with some master page deployments.&amp;nbsp; The code is on MSDN's new "Code Gallery" which is very much like CodePlex, but designed for the smaller, quicker samples that don't need to be full-blown collaborative projects.&amp;nbsp; I thought I'd try it out.&lt;/P&gt;&lt;/LI&gt;
&lt;P&gt;&lt;EM&gt;Download: &lt;/EM&gt;&lt;A title=http://code.msdn.microsoft.com/masterpagecommands href="http://code.msdn.microsoft.com/masterpagecommands" mce_href="http://code.msdn.microsoft.com/masterpagecommands"&gt;http://code.msdn.microsoft.com/masterpagecommands&lt;/A&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Related links:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;TechNet has the best reference of the out-of-box &lt;A href="http://technet2.microsoft.com/Office/en-us/library/e5134b97-b629-4fc0-8733-f2a49126daee1033.mspx?mfr=true" mce_href="http://technet2.microsoft.com/Office/en-us/library/e5134b97-b629-4fc0-8733-f2a49126daee1033.mspx?mfr=true"&gt;Stsadm operations and properties&lt;/A&gt;. 
&lt;LI&gt;MSDN has the official discussion of &lt;A href="http://msdn2.microsoft.com/en-us/library/bb417382.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/bb417382.aspx"&gt;how to extend stsadm&lt;/A&gt;. 
&lt;LI&gt;Gary Lapointe has created, as of this writing, &lt;A href="http://stsadm.blogspot.com/2007/08/stsadm-commands_09.html" mce_href="http://stsadm.blogspot.com/2007/08/stsadm-commands_09.html"&gt;88 stsadm extensions&lt;/A&gt;!&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/LI&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7232962" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/STSADM/default.aspx">STSADM</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Master+Pages/default.aspx">Master Pages</category></item><item><title>Trial Period [Evaluation Period] for this product has expired</title><link>http://blogs.msdn.com/markarend/archive/2007/11/08/trial-period-evaluation-period-for-this-product-has-expired.aspx</link><pubDate>Thu, 08 Nov 2007 18:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5989303</guid><dc:creator>markarend</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/markarend/comments/5989303.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=5989303</wfw:commentRss><description>&lt;P&gt;I was &lt;EM&gt;still &lt;/EM&gt;getting this error on one of my VPCs, and found some blog entries with a little difficulty.&amp;nbsp; Thought I'd post another to make it easier to find.&amp;nbsp; One thing is, there are two possible issues that are known to cause it.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;StandaloneDCWorkaround&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If the machine you're running on is a Domain Controller, and you have installed MOSS&amp;nbsp;as "Standalone," then you need to execute a fix to avoid the expired error.&amp;nbsp; A standalone installation is one where MOSS installs its own database management system, and is not connected to an existing instance of SQL Server.&amp;nbsp; A standalone installation will always have exactly one server in the farm, not multiple servers.&lt;/P&gt;
&lt;P&gt;Microsoft has published a fix for this, available at &lt;A href="http://download.microsoft.com/download/b/1/a/b1a6dceb-92a3-4808-8dac-b4e40c90ce00/StandaloneDCWorkaround.msi" mce_href="http://download.microsoft.com/download/b/1/a/b1a6dceb-92a3-4808-8dac-b4e40c90ce00/StandaloneDCWorkaround.msi"&gt;http://download.microsoft.com/download/b/1/a/b1a6dceb-92a3-4808-8dac-b4e40c90ce00/StandaloneDCWorkaround.msi&lt;/A&gt;.&amp;nbsp; Just download this and run it on the Domain Controller where you're experiencing the problem.&amp;nbsp; (If you don't want to because&amp;nbsp;this is a Domain Controller for your organization, why did you install MOSS on it, especially in standalone mode?&amp;nbsp; Get a development server for that.)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Application Pool Identity&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;If you don't have a standalone installation, you may still get the expired error.&amp;nbsp; This answer should fix that case.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;The Identity used for your SharePoint site's Application Pool must be a Domain account with local server access.&amp;nbsp; If you're using a machine account (such as local user, or NETWORKSERVICE), it&amp;nbsp;may work&amp;nbsp;under most circumstances but give the expired error for some operations.&amp;nbsp; Therefore&amp;nbsp;if you encounter this error you&amp;nbsp;have to make sure you are using a domain account for the app pool identity.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;Note, I've&amp;nbsp;&lt;/SPAN&gt;observed that the identity of OfficeServerApplicationPool keeps reverting to NETWORKSERVICE, so I can’t use this for my MOSS web application.&amp;nbsp; Apparently this machine account does work for the Central Admin site, and SharePoint ensures that it's restored to this value if you change it.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5989303" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Configuration/default.aspx">Configuration</category></item><item><title>Self Service Site Creation</title><link>http://blogs.msdn.com/markarend/archive/2007/11/08/self-service-site-creation.aspx</link><pubDate>Thu, 08 Nov 2007 18:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5988544</guid><dc:creator>markarend</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/markarend/comments/5988544.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=5988544</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;By default, in Microsoft Office SharePoint Server 2007 (if you are using the Corporate Intranet Portal template as your default site) when you go to the “Sites” link and click the Create Site button…SharePoint creates a subsite as a member of your portal’s site collection.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is great if within your organization, you want to easily share things such as templates, site columns, content types and navigational elements. Plus security and user management is much easier using this approach.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;However some organizations will still require unique site collections since their business units are very unique and very little sharing is anticipated between groups. If that is the case, then you may instead wish the Create Site button to create site collections. To do this, you need to:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Enable Self Service Site Creation in Central Administration&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Change behavior of the Create Site button on Site Directory&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;STRONG&gt;Enable Self Service Site Creation in Central Administration&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Open the Central Administration site&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Click Application Management&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Click Self-service site management&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Select the correct web application (that step is easy to miss) &lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Select On for Enable Self-Service Site Creation and c&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;lick Ok.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;STRONG&gt;Change behavior of the Create Site button on Site Directory&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;From the portal, use the Site Actions menu, select Modify All Site &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Settings. If you are not on top level site you will need to go to Top&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt; &lt;/SPAN&gt;Level Site Settings.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Under site collection administration, select Site Directory Settings.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Select the checkbox to create new site collections from sites&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt; &lt;/SPAN&gt;directory.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;Gavin Adams&amp;nbsp;describes how to &lt;A class="" title="Restricting Self Service Site Creation" href="http://blog.gavin-adams.com/2007/09/13/restricting-self-service-site-creation/" mce_href="http://blog.gavin-adams.com/2007/09/13/restricting-self-service-site-creation/"&gt;manage permissions for Self-service site creation&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5988544" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Site+Directory/default.aspx">Site Directory</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Configuration/default.aspx">Configuration</category></item><item><title>Scripting STSADM commands</title><link>http://blogs.msdn.com/markarend/archive/2007/11/08/scripting-stsadm-commands.aspx</link><pubDate>Thu, 08 Nov 2007 18:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5988377</guid><dc:creator>markarend</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/markarend/comments/5988377.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=5988377</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;EM&gt;This posting contains tips 'n tricks for using STSADM commands within batch files.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Note, the primary Microsoft reference&amp;nbsp;for STSADM: TechNet article &lt;/FONT&gt;&lt;A href="http://technet2.microsoft.com/Office/en-us/library/188f006d-aa66-4784-a65b-a31822aa13f71033.mspx?mfr=true"&gt;&lt;FONT face="Times New Roman" color=#0000ff size=3&gt;Stsadm command-line tool (Office SharePoint Server)&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;Testing results&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;STSADM returns 0 as ERRORLEVEL in DOS when it succeeds, or -1 when it fails.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To test for success, &lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;IF %ERRORLEVEL% EQU 0&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; can be used.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;Redirecting output&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;When scripting stsadm, sometimes it’s desired to redirect output to a file, using the “&amp;gt;” operator.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This works as expected, but if stsadm displays error messages from executing its requested operation, the messages still go to the screen and not into the file.&amp;nbsp; This is because DOS has two standard output devices, stdout and stderr.&amp;nbsp; The&amp;nbsp; &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&amp;gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&amp;nbsp; operator redirects stdout only.&amp;nbsp; Fortunately, we can add another operator that will redirect stderr to stdout so that all messages go into the output file:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 15.6pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: 15.6pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;stsadm -o addsolution -filename MySoln.wsp &amp;gt;output.txt 2&amp;gt;&amp;amp;1&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&amp;gt;&amp;amp;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; is a command redirection operator.&amp;nbsp; Stderr is handle 2, and stdout is handle 1.&amp;nbsp; Therefore, &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;2&amp;gt;&amp;amp;1&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; means redirect stderr to stdout.&amp;nbsp; Since we've already redirected stdout to output.txt, then all messages will now go into this file.&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;See Microsoft article &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true"&gt;&lt;FONT face="Times New Roman" color=#0000ff size=3&gt;Using command redirection operators&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;for further applications of this and related operators.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Finally, remember that&amp;nbsp; &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&amp;gt;&amp;gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&amp;nbsp; will&lt;I style="mso-bidi-font-style: normal"&gt; append&lt;/I&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;EM&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt; &lt;/SPAN&gt;&lt;/EM&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;messages from stdout to the specified file instead of overwriting;&amp;nbsp; &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&amp;gt;&amp;gt;output.txt 2&amp;gt;&amp;amp;1&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; works to append all messages and errors.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;Asynchronous commands&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Some stsadm commands create a timer job to execute the operation so that it may be executed on multiple farm servers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Commands that use the following modifiers may behave this way:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 130.5pt; TEXT-INDENT: -94.5pt"&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;-immediate&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;Use a timer job to execute the operation on all applicable servers immediately… the job will start within one minute.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 130.5pt; TEXT-INDENT: -94.5pt"&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;–time &amp;lt;time&amp;gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;Use a timer job to execute the operation on all applicable servers at the specified&lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt; &amp;lt;time&amp;gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 130.5pt; TEXT-INDENT: -94.5pt"&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;-local&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;Execute the operation on the local server immediately; return only after operation completes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;When using &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;-immediate&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; or &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;-time&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;, stsadm will return after creating the timer job.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However, the operation itself will take a little while longer to finish its execution.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This can become a problem in scripts such as&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;stsadm -o retractsolution -name mysolution.wsp -immediate&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;stsadm -o deletesolution -name mysolution.wsp&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Here, the second command will fail because the retractsolution operation will not have been completed on all servers yet.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The simplest fix that can be recommended is to ask for human intervention:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;stsadm -o retractsolution -name mysolution.wsp -immediate&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;echo Wait for mysolution.wsp to be retracted across farm&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;pause&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;stsadm -o deletesolution -name mysolution.wsp&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Note that the stsadm command &lt;B&gt;execadmsvcjobs&lt;/B&gt; might seem to offer a clever solution, because it will cause outstanding deployments to complete synchronously.&amp;nbsp; However, this command affects &lt;I&gt;the local server only&lt;/I&gt;, so the same situation still exists on a multi-server farm.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;Customer stsadm scenario… with a challenge&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Many customers have requirements to deploy required configurations to their farm; this typically means they must deploy to several environments such as Dev, UAT and Production.&amp;nbsp; They want to script these configurations whenever possible so that the process can be automated.&amp;nbsp; Stsadm supplies operations to set some configurations, but not all.&amp;nbsp; In addition, some of the ones that it does not cover can be very tedious to configure manually, such as search scopes, profile properties and audience definitions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;In these situations, creating an stsadm extension is a great approach to setting these configurations in an automated way.&amp;nbsp; It matches the approach of scripting default stsadm commands to execute in different environments.&amp;nbsp; Also, stsadm extensions can be deployed as other customizations are deployed, using SharePoint Solution files.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;A flexible way to design these extensions to supply an import/export pair of operations.&amp;nbsp; This way, a developer can configure their SharePoint instance to have the appropriate configurations, then use the stsadm extension to export the configuration settings as an xml file.&amp;nbsp; On the UAT and Production farms, the stsadm extension can then be used to import from the xml file to make the appropriate configuration settings.&amp;nbsp; This approach allows the process to be maintained throughout production, usually without requiring the developer’s involvement for further changes.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;One challenge with this is deploying and executing the stsadm extension.&amp;nbsp; These two operations should be performed as separate steps, because the deployment must be fully completed before attempting to execute.&amp;nbsp; On a local server, a script can ensure the deployment step is complete by using the -local argument, but on a farm with multiple servers, the deployment must use -immediate, which executes as soon as possible, but asynchronously.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;To do both operations in a script, it is necessary to wait for deployment explicitly, as shown in the following example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;stsadm -o addsolution -filename ImportProfileProperties.wsp&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;stsadm -o deploysolution -name ImportProfileProperties.wsp -immediate -allowgacdeployment&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;echo Wait for ImportProfileProperties.wsp to be deployed across farm&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;pause&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;stsadm -o importprofileproperties -filename RequiredProperties.xml&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Note that the stsadm command &lt;B&gt;execadmsvcjobs&lt;/B&gt; might seem to offer a clever solution, because it will cause outstanding deployments to complete synchronously.&amp;nbsp; However, this command affects &lt;I&gt;the local server only&lt;/I&gt;, so the same situation still exists on a multi-server farm.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5988377" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/STSADM/default.aspx">STSADM</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Development/default.aspx">Development</category></item><item><title>Where is My Picture stored?  What if MySites are off?</title><link>http://blogs.msdn.com/markarend/archive/2007/11/08/where-is-my-picture-stored-what-if-mysites-are-off.aspx</link><pubDate>Thu, 08 Nov 2007 17:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5988143</guid><dc:creator>markarend</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/markarend/comments/5988143.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markarend/commentrss.aspx?PostID=5988143</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;MOSS user profiles have a property called Picture, which can store&amp;nbsp;the URL of an image file.&amp;nbsp; When this property&amp;nbsp;is filled in, other MOSS features display the user's picture at useful times: in search results, or on a MySite.&amp;nbsp; But where's the image file stored?&amp;nbsp; It depends on whether MySites are enabled or not.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;If MySites are enabled&lt;/STRONG&gt;, then the&amp;nbsp;profile editing page provides a &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;"Choose Picture" control that allows you to easily upload a picture to be associated with your profile:&amp;nbsp;just click the control, browse to a picture on your PC, and click Ok.&amp;nbsp; This control uploads the image file, stores it&amp;nbsp;into the Shared Pictures library of&amp;nbsp;your MySite, then copies its URL into the Picture property of your profile.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;EM&gt;But what if you haven't created a MySite yet, or&amp;nbsp;if MySites are disabled?&lt;/EM&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;If you haven't created a MySite yet&lt;/STRONG&gt;, then chances are you won't be on the profile&amp;nbsp;editing&amp;nbsp;page.&amp;nbsp; The typical path to get to the page where you choose a picture is to go to your MySite first.&amp;nbsp; If you have no MySite, it will be created for you at that time.&amp;nbsp; From there, click the Detail link on MySite to edit your profile information.&amp;nbsp; But it's still possible you could get to this page without going to MySite first.&amp;nbsp; In that case, either MySites are disabled (see next case), or you got here by entering the URL directly.&amp;nbsp; In that case, you'll see an error message in the upload control indicating that you don't have a MySite yet.&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;If MySites are disabled&lt;/STRONG&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;you can still browse to &lt;A href="http://mysite/Person.aspx"&gt;&lt;FONT face="Times New Roman" color=#0000ff&gt;http://mysite/Person.aspx&lt;/FONT&gt;&lt;/A&gt; to view your My Profile page, then click the Details link to edit your profile data including Picture.&amp;nbsp; This time, the &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;Picture field is still present, but the "Choose Picture" button is gone.&amp;nbsp; In its place is a plain&amp;nbsp;text field, so you can enter the URL of an image file.&amp;nbsp; This means you have to upload the image file to a site you can access, then copy its URL into this field.&amp;nbsp; This is probably not the smoothest experience for most users.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;Administrators planning to disable MySites should be aware of this, if they're also planning to allow users to edit their profile.&amp;nbsp; One choice might be to edit the behavior of profile properties via Central Admin to lock the My Picture field against edits, or even hide it completely if desired.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;EM&gt;&lt;STRONG&gt;See also&lt;BR&gt;&lt;/STRONG&gt;How MySite pages are organized: &lt;A class="" href="http://blogs.msdn.com/markarend/archive/2008/02/22/mysite-pages-and-architecture.aspx" mce_href="http://blogs.msdn.com/markarend/archive/2008/02/22/mysite-pages-and-architecture.aspx"&gt;MySite Pages and Architecture&lt;/A&gt;.&lt;BR&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-language: AR-SA"&gt;&lt;EM&gt;To enable/disable MySites: &lt;/EM&gt;&lt;A id=ctl00___ctl00___ctl02___Results___postlist___EntryItems_ctl01_PostTitle href="http://blogs.msdn.com/markarend/archive/2007/04/26/managing-mysite-creation-and-usage.aspx"&gt;&lt;EM&gt;Managing MySite Creation and Usage&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;.&lt;/P&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5988143" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markarend/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/markarend/archive/tags/MySites/default.aspx">MySites</category><category domain="http://blogs.msdn.com/markarend/archive/tags/Configuration/default.aspx">Configuration</category></item></channel></rss>