tag:blogger.com,1999:blog-17972254671400281332024-03-13T08:46:41.051-07:00Eric Sutton - It's a SharePoint LifeThe blog that gets straight to The PointSharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.comBlogger33125tag:blogger.com,1999:blog-1797225467140028133.post-7168725616005103962015-03-11T11:40:00.001-07:002015-03-11T11:48:04.755-07:00SharePoint Online Updated Feature: Limited-Access User Permission Lockdown ModeMicrosoft is at it again: Enabling features you didnt realize you needed until after a random update is applied, that leaves you banging your head against the desk for hours trying to figure out what has changed. So is the case with a recent feature update called <b>Limited-Access User Permission Lockdown Mode</b>. <br />
<br />
If you plan on setting unique permissions on a folder within a document library in Office365/SharePoint Online, you will need to disable this site feature that Microsoft has so graciously turned on for you.<br />
<br />
You will know this feature has been enabled if you get this message when trying to apply unique permissions to a folder:<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://2.bp.blogspot.com/-_ccwtnD-wX8/VQCLFKCVdoI/AAAAAAAAAL8/ZCxSseJTOUo/s1600/permissions.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-_ccwtnD-wX8/VQCLFKCVdoI/AAAAAAAAAL8/ZCxSseJTOUo/s1600/permissions.PNG" height="118" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Here is Microsoft's notification regarding this change:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-fxUTjXJgHHg/VQCLQ9YDYsI/AAAAAAAAAME/ar3_LzLdd1w/s1600/Capture.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-fxUTjXJgHHg/VQCLQ9YDYsI/AAAAAAAAAME/ar3_LzLdd1w/s1600/Capture.PNG" height="123" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And more information regarding the feature can be found here:</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="http://support.microsoft.com/kb/3039997">http://support.microsoft.com/kb/3039997</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-22012788924747213152015-02-26T10:59:00.002-08:002015-02-26T10:59:42.496-08:00How To Fix One Drive for Business Sync Issues<div>
A customer recently had an issue with syncing their SharePoint Online library with One-Drive for Business. Some of the files were syncing properly, but some were throwing errors and displaying a red X. Most of the time sync errors are caused by invalid characters or a bad file name, but this one wasn't the case. Running repair didnt work, so I went in and manually cleared out all of the One Drive cache files and reconfigured the sync library.</div>
<div>
<br /></div>
<div>
Here's how to do that:</div>
<div>
<br /></div>
<div>
<ol>
<li>Close all your Office processes like groove.exe, msouc.exe, msosync.exe, etc</li>
<li>Browse to “C:\Users\%username%\AppData\Local\Microsoft\Office\Spw” and delete all the content.</li>
<li>Go to “C:\Users\%username%\AppData\Local\Microsoft\Office\15.0\OfficeFileCache” and also delete all content from this folder.</li>
<li>After deleted everything, start OneDrive again (using “C:\Program Files\Microsoft Office\Office15\GROOVE.EXE“)</li>
<li>Configure the sync library again</li>
</ol>
<div>
Even Microsoft support couldnt provide this information to me, so hopefully this help you if you ever have a sync issue that you just cannot fix.</div>
</div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-18573662595623858922014-10-09T05:44:00.004-07:002014-10-09T07:15:11.590-07:00SharePoint Powershell Scripting: Iterating through a Site Collection to find all BLOBs that havent been modified in over a yearThis request came about during a SharePoint/Metalogix StoragePoint requirements gathering session with a customer. They wanted to know what the storage savings would be if they externalized ONLY files that havent been modified in over a year vs all files. Metalogix has a great tool affectionately called the "BLOBulator" which will analyze Content DBs (and drill down further into Site Collections), however as a free tool, there isnt much customization when it comes to filtering in criteria for said externalizations.<br />
<div>
<br /></div>
<div>
So I decided to use Powershell to iterate through a site collection of my choosing and output into a csv file. I could then do a quick calculation on all the documents to get a total size.<br />
<br />
This script works fine, except at the end it will throw an error on the dispose function. If anyone can help resolve that, please feel free to leave a comment and I'll update my post. This script can also be adjusted to run against an entire we application as well.<br />
<br />
Add this code to a text document and rename it with a .ps1 extension:<br />
<br />
<span style="font-size: x-small;"><i><b>Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue </b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b>function Get-OldDocuments([string] $SiteURL)</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b>{</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> $Site = Get-SPSite $SiteURL</b></i></span><br />
<br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> foreach ($SPWeb in $SPSite.AllWebs)</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> {</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> foreach ($SPList in $SPWeb.Lists) </b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> {</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> # Get Document Libraries</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> if ($SPList.BaseType -eq "DocumentLibrary") </b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> {</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> foreach ($item in $SPList.Items)</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> {</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> $data = @{</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> "Site" = $SPSite.Url</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> "Web" = $SPWeb.Url</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> "list" = $SPList.Title</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> "Item URL" = $item.Url</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> "Item Title" = $item.Title</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> "Item Created" = $item["Created"]</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> "Item Modified" = $item["Modified"]</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> "Size (KB)" = $item.File.Length/1KB</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> "Size (MB)" = $item.File.Length/1MB</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> }</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> # add files older than 1yr old</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> $expireDate = Get-Date </b></i></span><br />
<span style="font-size: x-small;"><i><b><span class="Apple-tab-span" style="white-space: pre;"> </span>$expireDate = $expireDate.AddYears(-1)</b></i></span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-size: x-small;"><i><b> </b></i></span></span><br />
<span style="font-size: x-small;"><i><b> if($item["Modified"] -lt $expireDate)</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> {</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> Write-Host($SPSite.Url +"/"+ $item.Url)</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> New-Object PSObject -Property $data</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> }</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> }</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> }</b></i></span><br />
<span style="font-size: x-small;"><i><b>}</b></i></span><br />
<span style="font-size: x-small;"><i><b> $SPWeb.Dispose();</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> }</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> $SPSite.Dispose() </b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b> }</b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b>#call the function </b></i></span><br />
<span style="font-size: x-small;"><i><b><br /></b></i></span>
<span style="font-size: x-small;"><i><b>Get-OldDocuments "http://sharepoint.com/site" | Export-Csv -NoTypeInformation -Path C:\temp\OldDocuments.csv</b></i></span></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-44695541519233831112014-09-18T07:09:00.003-07:002014-09-18T07:09:58.119-07:00"Save Site as Template" Option is Missing on Publishing Site in SharePoint 2013At first glance, something appears to be wrong. "Why cant you simply save the site as a template", I asked. Perhaps Microsoft (in all it's infinite wisdom) decided to remove the "save a site as a template" feature by default with publishing sites. That's okay, you can simply navigate to “<em>_layouts/savetmpl.aspx</em>” application page and save the site template, right? Wrong! This workaround does not work as expected in SharePoint 2013.<br />
<br />
The url “_layouts/savetmpl.aspx” failed on the publishing site because by default in SharePoint 2013, “<em><span style="color: red;">SaveSiteAsTemplateEnabled</span></em>” is set as “false”. Fortunately it's a very quick fix, simply change this switch to true in 3 simple steps!<br />
<br />
<ol>
<li>Open the site in SharePoint Designer</li>
<li>Click Site Options from the ribbon</li>
<li>Modify the "SaveSiteAsTemplateEnabled" and change it from "False" to "True"</li>
</ol>
The option still wont be displayed in Site Settings, but you can now you can navigate to “<em>http://sitename/_layouts/15/savetmpl.aspx</em>” and you will see the Save Site as Template Page as expected.<br />
<br />
That's All Folks! <br />
<br />
<br />
<br />
<br />
<br />SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-566992251071156662014-08-08T07:55:00.003-07:002014-08-08T07:55:49.915-07:00Iterate Through All Site Collections Within a Web Application to Change The Site Collection AdministratorIf you have many Site Collections in a single web application and you want to set or change the Primary or Secondary Site Collection Administrator without going through each and every one in Central Administration, below is the script you can save as a .ps1 file and run in Powershell. This script uses (-SecondaryOwnerAlias) to set the Secondary Site Collection Administrator. Change it to (-OwnerAlias) at line 19 to set the primary site collection admin.<br />
<br />
## Input Parameters ##<br />
[CmdletBinding()]<br />
Param(<br />
[string]$WebAppUrl=(Read-Host "Please enter a Web Application URL (Example: http://intranet)"),<br />
[string]$Account=(Read-Host "Please enter an account (Example: DOMAIN\Administrator)")<br />
)<br />
## Add SharePoint Snap-in ##<br />
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue<br />
### No need to modify these ###<br />
$WebApp = Get-SPWebApplication $WebAppUrl<br />
$AllSites = $WebApp | Get-SPSite -Limit ALL<br />
<br />
##The Script - no need to modify this section ##<br />
## Start SP Assignment for proper disposal of variables and objects ##<br />
Write-Host "Starting SP Assignment..." -ForegroundColor Green<br />
Start-SPAssignment -Global<br />
## Use a ForEach-Object loop and Set-SPSiteAdministration to set an entire web application ##<br />
Write-Host "Adding $Account to $WebAppUrl as a Site Collection Administrator..." -ForegroundColor Yellow<br />
$AllSites | ForEach-Object { Set-SPSite -SecondaryOwnerAlias $Account -Identity $_.url }<br />
## End SP Assignment for proper disposal of variables and objects ##<br />
Write-Host "Disposing of SP Objects.." -ForegroundColor Green<br />
Stop-SPAssignment -Global<br />
## Tell us it's done ##<br />
Write-Host "Finished!" -ForegroundColor GreenSharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-33869212691440764092014-08-08T07:41:00.002-07:002014-08-08T07:47:52.135-07:00How To Set SharePoint Managed Service Account Password with PowerShellHere is the scenario where this would be important:<br />
<br />
Issue Cause<br />
- During the course of regular SharePoint administration duties a deployment process was hung up. From past experience and part of the standard procedures in such situation, a SharePoint 2010 timer service was restarted and a command was run to force deployment of pending jobs.<br />
- When the jobs were forced to run, several pending jobs that were not scheduled to run were inadvertently triggered. The job that caused the issues was the automatic password change on SharePoint 2010 managed accounts. This job is typically scheduled for the 7th of every month, but is queued and marked as pending. As the password change job was queued as pending the force command kicked off the password changes. These jobs did not successfully complete and while the passwords were generated and updated in Active Directory, SharePoint was not updated.<br />
- This resulted in a password mismatch between the password in Active Directory and the password that the Web and Service Application Identities were using to run the sites. Furthermore, once the cached credentials on the IIS servers were refreshed the applications were no longer available.<br />
<br />
Issue Resolution<br />
Once the source of the problem was identified Admins needed to manually change the passwords on the affected accounts and then update the passwords in SharePoint. Since CA was not accessible, passwords needed to be changed with PowerShell:<br />
<br />
$P7 = ConvertTo-SecureString "password" -asplaintext -force<br />
<br />
Set-SPManagedAccount -Identity <account name> -ExistingPassword $P7SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-42472742134216257882014-07-16T06:10:00.000-07:002014-07-16T06:11:15.570-07:00THAT WAS EASY! How to check which Site Template was used in SharePoint 2013<br />
Don't mess with logging into the server and running powershell cmdlets. Here is the <b><i>SUPER EASY</i></b> way to check which Site Template was used in SharePoint 2013:<br />
<br />
<ol>
<li>Open your site in browser</li>
<li>Open any page</li>
<li>Right click on the page</li>
<li>Select view source</li>
<li>Search for: SiteTemplateID</li>
</ol>
List of Site Templates:<br />
#0 - GLOBAL (SetupPath=global) - "Global template"<br />
#1 - STS - "windows SharePoint Services Site", "Team Site", "Blank Site", "Document Workspace"<br />
#2 - MPS - "Basic Meeting Workspace", "Blank Meeting Workspace", "Decision Meeting Workspace", "Social Meeting Workspace", "Multipage Meeting Workspace"<br />
#3 - CENTRALADMIN - "Central Admin Site"<br />
#4 - WIKI - "Wiki Site"<br />
#7 - BDR - "Document Center"<br />
#9 - BLOG - "Blog"<br />
#20 - SPS (OBSOLETE) - "SharePoint Portal Server Site"<br />
#21 - SPSPERS - "SharePoint Portal Server Personal Space"<br />
#22 - SPSMSITE - "Personalization Site"<br />
#30 - SPSTOC (OBSOLETE) - "Contents area Template"<br />
#31 - SPSTOPIC (OBSOLETE) - "Topic area template"<br />
#32 - SPSNEWS (OBSOLETE) - "News area template"<br />
#33 - SPSNHOME (SubWebOnly) - "News Home template"<br />
#34 - SPSSITES - "Site Directory area template"<br />
#36 - SPSCOMMU (OBSOLETE) - "Community area template"<br />
#38 - SPSREPORTCENTER - "Report Center Site"<br />
#39 - CMSPUBLISHING (SetupPath=SiteTemplates\PUBLISHING) - "Publishing and Team Collaboration Site"<br />
#40 - OSRV (SetupPath=SiteTemplates\OSRV) - "Shared Services Administration Site"<br />
#47 - SPSPORTAL - "Corporate Intranet Site"<br />
#50 - SRCHCEN - "Search Center"<br />
#51 - PROFILES - "Profiles"<br />
#52 - BLANKINTERNETCONTAINER - "Internet Presence Web Site"<br />
#53 - BLANKINTERNET - "Publishing Site", "Press Releases Site", "Publishing Site"<br />
#54 - SPSMSITEHOST - "MySite Host"<br />
#90 - SRCHCENTERLITE (SetupPath=SiteTemplates\SRCHCENTERLITE) - "Search Center Lite"<br />
#6221 - PWA (SetupPath=SiteTemplates\PWA) - "Project Web Access Site"<br />
#6215 - PWS (SetupPath=SiteTemplates\PWS) - "Project Workspace"<br />
#14483 - OFFILE - "Records Repository", "Records Repository"SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-61699613295621246212014-06-19T08:12:00.000-07:002014-06-27T08:31:07.803-07:00SharePoint 2010 Admin Tip of The Day: Duplicate a large custom list on a single site for archive purposesI was recently asked by a site admin to help with archiving a FY14 list. They wanted to keep the list on the site, but use a subset of the content to create a new list called FY15. They wanted to retain all the views, time stamps, etc. The list was quite large. It had over 4000 items and had too many columns, including lookups, calculations, multi-select and multi-line fields for me just to do a datasheet to datasheet copy or an excel export. Of course this would also not retain the created by, date, etc, so it really wasnt a viable option. The data was also too large to include the content with the 'save list as template' and duplicate it that way. So it was time for this guy to get creative!<br />
<br />
The first thing I did was export the list to a file on the server. At first, I was having problems with using powershell (kept getting a URL error and tried every variation of the switches that I could think of - but that's another blog for another time), so I opted just to use CA's backup feature.<br />
<br />
<b>Update 6/27: The format for exporting a list is as follows:</b><br />
<b><i>export-spweb -identity <URL> -path <drive location> -itemurl lists/<listname></i></b><br />
<br />
Once the list was exported, I imported it into a test site that I created on the same web application. I didnt want to re-import into the user's site at this point because it would just overwrite the list instead of creating a duplicate. Not to mention the export/import took forever because there was so much content. I wanted to clean up the data first.<br />
<br />
Once I had the entire list moved to my test site, I deleted all the content that was no longer needed, retaining only the items that were required for the new list. This dropped it down to under 200 items; much more manageable. Now that the content was reduced significantly, I was able to save the list as a template with content, and simply use that template to create the new list in the original site. Voila. Done. Where's the EASY button?<br />
<br />
But you know, this got me thinking: what if the site content was still too large to create a list template with content? If I tried to re-export and import the new list into the original site, would I run into a duplicate GUID issue even if I rename the list name & URL? I couldnt find much information online, and I wasnt sure, so there was nothing to do but test and document my results.<br />
<br />
Back in my test site, the first thing I did was export the newly cleaned up list. This was now my original control list. I then opened the test site using SharePoint Designer and renamed the original list and its URL. I then went back to the test site in the browser to make sure the URL and the title of the original list was now changed. I also modified the data enough so I could tell if it was overwritten. I then re-imported the list to the site. <br />
<br />
Will SharePoint overwrite the original list anyway because of the GUID or will it put it in as a new list since the URL and name has changed. All bets in!<br />
<br />
You want to know what happened? Drum roll Please.......<br />
<br />
The SharePoint import brought it in as a new list. The test was successful.<br />
<br />
So if you need to duplicate a list that is huge and you cant do the list template with content way of things, this is good to know. Enjoy!<br />
<br />
<br />
As always, your feedback and comments are welcome in the section below.SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-56338255671619706222014-05-29T05:55:00.006-07:002014-05-29T05:55:46.714-07:00Password complexity gets complicated with AD TrustsI came across an issue recently in a customer's SharePoint 2010 farm. We were performing our annual service account password changes and ran into an issue. The people picker in our DMZ stopped working and the service account that handles that authentication kept getting locked out. Unless the account was already cached in the user information list, new user accounts could not be queried and the address book feature was broken as well.<br />
<br />
Because we have a AD trust set up, we have to run the following command to restore the credentials:<br />
<br />
<b><i>stsadm -o setproperty -pn peoplepicker-searchadforests -pv "forest:web.net,domain1\svcacct1,password; forest:web.dmz,domain2\svcacct2,password" -url http://yourwebsite </i></b><br />
<br />
Even after running this, the people picker still did not work. It got me thinking about the complexity of the password. We actually had semi-colons and commas in the password for one of these service accounts, so when the command was run, it was picking up these special characters as part of the command, instead of part of the password.<br />
<br />
After changing the password to remove these special characters, I was able to re-run the command and the password took successfully. We then unlocked the accounts, performed an IISRESET, and BAM! the people picker again started working.<br />
<br />
So keep in mind when choosing the complexity of your passwords. We want to be secure, but there are some instances where special characters should be avoided. My preference is to not use the following characters for service account passwords, particularly if you like to use powershell cmdlets:<br />
<br />
<b>$</b> - can be mistaken for a variable<br />
<b>;</b> - is often used in a string to separate sections<br />
<b>,</b> - same as above<br />
Lastly, I try to avoid capital Os because they can get mistaken for a zero.<br />
<br />
Hopefully this helps.SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-16797857515001476312014-05-13T06:20:00.000-07:002014-05-13T06:20:05.568-07:00SharePoint Wiki Library View Issue<br />
A coworker encountered something very strange a few days ago, and I thought it warranted a blog post. He was migrating documents from a SharePoint 2010 document library into a SharePoint 2013 library. He noticed that after he moved the files, when he would click on the link to the new library, the default view would actually show up as a wiki page, instead of simply listing the contents of library. He tied changing the default view and playing around with the library settings, but nothing helped.<br />
<br />
When I took a look at it, I noticed that there was a document that was moved to the library called "home.html". That's when it clicked.<br />
<br />
In SharePoint 2013, if you are using a wiki page library and there is a page in the library called "home" or "default", the wiki will default to opening this page from all site contents, instead of the all pages list view.<br />
<br />
This would also apply to the Site Pages library. If you have a page stored with the name "default", it will automatically pull this page up instead of the library. Simply rename this file to something else, and the link to the site pages will work correctly again.<br />
<div>
<br /></div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-89985545707569819802014-03-27T11:35:00.002-07:002014-03-31T06:44:03.346-07:00SharePoint 2010: Migrating a Sub-Site to a Different (existing) Site CollectionI decided to write this blog post because I screwed up today. Yes, even good guys have bad days and nobody is perfect, even though to our customers and clients we appear to be. So, slightly embarrassed for my mistake, I'm putting this out there so others can hopefully learn form this incident and avoid creating more problems and work for yourself.<br />
<br />
I was asked by a customer to move some sub-sites from one site collection to another. The reasoning was because he was running out of space in his storage quota and wanted to move these sites to a different content database. This is not a big effort usually. It's actually quite simple using powershell.<br />
<br />
First step is you export the original site per this technet article (<a href="http://technet.microsoft.com/en-us/library/ff607895(v=office.15).aspx">http://technet.microsoft.com/en-us/library/ff607895(v=office.15).aspx</a>):<br />
<br />
<b>Export-SPWeb <URL> -Path c:\site_export.cmp -NoFileCompression</b><br />
<br />
Once the file is created, you simply import the site to the new location (<a href="http://technet.microsoft.com/en-us/library/ff607613(v=office.15).aspx">http://technet.microsoft.com/en-us/library/ff607613(v=office.15).aspx</a>):<br />
<br />
<b>Import-SPWeb -Identity <URL> -Path c:\location_of_export.cmp -NoFileCompression</b><br />
<br />
When you've confirmed everything looks good in the new location, you can delete the site from the original location and you're done.<br />
<br />
<b><u>BUT... HERE IS WHAT THEY DON'T TELL YOU....</u></b><br />
<br />
You can also use Import-SPWeb to import a SharePoint list too. The difference is, when you use this cmdlet to copy a SharePoint list, you simply specify the root site URL and it will create the new list or library in that location. If you use this cmdlet for a site however, you <u>MUST FIRST</u> create a placeholder site in the destination web application. If you only specify the root URL, it <u>WILL OVERWRITE</u> that site, instead of creating a new sub-site.<br />
<br />
What made this issue even worse for me was, the original root site was created using a 'blank site' template (STS#1) and when I overwrote it, the site was changed to a 'team site' template (STS#0). Not a big deal, right? Wrong. When I tried to restore the site back using an export/import from an unattached backup copy of the content database, it wouldnt overwrite the site back from team site template to blank site template. Fortunately the site was more or less a placeholder, so I was able to fix it manually, but it could have been much, much worse. <br />
<br />
So take it from me, always double check your cmdlets and never assume that Microsoft will be consistent in their processes. You have been warned.SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-63235587214575752522014-03-14T05:55:00.001-07:002014-03-14T05:57:33.625-07:00What to do when a User Profile is out of sync with Active DirectoryFrequently I will get a report from a user that a user profile is out of sync or doesnt display correct information.<br />
<br />
The first thing I do is query AD to make sure that it contains the correct information. If AD is correct but the SharePoint User Profile is incorrect, you can try to force a full synchronization. But if this is not successful, here are a couple other things you can try:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<b>1) </b>Use PowerShell Cmdlet to force a sync with AD<br />
<b>Set-SPUser –Identity <domain>\<username> –SyncFromAD –Web http://<webapp></b><br />
<br />
<b>2) </b>Manually delete and immediately re-add the profile in Central Administration. This will force the profile service to query AD and populate with the correct information. There are no worries to delete the profile in UPS, because it wont delete the user from any site collections or lose any metadata. It will simply re-build their profile.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-pwbMdt7hVVg/UyL5hEwhnRI/AAAAAAAAAJs/EkAC_qQzMj0/s1600/ups.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-pwbMdt7hVVg/UyL5hEwhnRI/AAAAAAAAAJs/EkAC_qQzMj0/s1600/ups.JPG" height="222" width="640" /></a></div>
<br />
<br />
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b>3)</b> If all else fails, you will need to remove the user from SharePoint Site Collection and re-add them. Please keep in mind that this will remove them from any security groups they may have been added to. All original permissions will be lost and you will need to re-add them to each of these groups and sites manually. Use this step with <b><u>EXTREME</u></b> caution.<br />
<br />
For this, navigate to the User Information List by adding "_layouts/people.aspx?MembershipGroupId=0" to the end of your site collection URL. Select the user you wish to remove, and click Delete User from Site Collection.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-BVvHcvykczs/UyL7_VWialI/AAAAAAAAAJ0/ye02oU5Mg5s/s1600/menu.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-BVvHcvykczs/UyL7_VWialI/AAAAAAAAAJ0/ye02oU5Mg5s/s1600/menu.JPG" /></a></div>
<br />
<div>
<br /></div>
<div>
<br /></div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-35670378574545852342014-03-06T10:57:00.000-08:002014-03-06T10:57:17.037-08:00Create web applications that use classic mode authentication in SharePoint 2013In SharePoint 2013 Central Administration, you can only configure claims-based authentication when you manage web applications. If you are migrating from a SharePoint 2010 environment where classic-mode authentication is being used, you will need to first create a classic-mode web application in SharePoint 2013, migrate all content, and then upgrade to Claims-Based, to take advantage of server-to-server authentication and app authentication as well as Office Web Apps.<br />
<br />
Using SharePoint 2013 Management Shell with an account that has proper permissions to SQL and the farm, use this cmdlet:<br />
<br />
<b>New-SPWebApplication -Name "NewWebApp" -ApplicationPool "NewWebApp1.AP" -AuthenticationMethod "NTLM" -ApplicationPoolAccount (Get-SPManagedAccount "webappserviceacct") -Port 443 -Url "https://url.domain.com" -SecureSocketsLayer -DatabaseName "WSS_Content_WebApp_Root"</b><br />
<br />
For more information, visit: <a href="http://technet.microsoft.com/en-us/library/gg276326.aspx">http://technet.microsoft.com/en-us/library/gg276326.aspx</a><br />
<br />SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-6489169756754103862014-02-27T05:13:00.000-08:002014-02-27T05:13:04.274-08:00Announcing the release of Service Pack 1 for Office 2013 and SharePoint 2013It's official! Microsoft has released SP1 for Office 2013 and SharePoint 2013. More details can be found here: <a href="http://blogs.technet.com/b/office_sustained_engineering/archive/2014/02/25/announcing-the-release-of-service-pack-1-for-office-2013-and-sharepoint-2013.aspx">http://blogs.technet.com/b/office_sustained_engineering/archive/2014/02/25/announcing-the-release-of-service-pack-1-for-office-2013-and-sharepoint-2013.aspx</a><br />
<br />
Enjoy!SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-66233821160308200302014-02-26T10:45:00.000-08:002014-02-26T10:45:01.541-08:00Collapsing Multiple SharePoint 2010 Web applications into a single SharePoint 2013 Web application using Host-Named Site Collections<span style="font-family: inherit;">At a client site, I was tasked to migrate a SharePoint 2010 farm from antiquated physical hardware to a new SharePoint 2013 farm in a virtual environment. In the existing SharePoint 2010 farm, there are several web applications separating different projects. This was done to isolate them from each other and provide more granular security. As we should all know by now, Microsoft's best practices within SharePoint 2013 is to use less web applications (limit of 20 web applications per farm) and implement host-named site collections to create multiple "zones" or to use unique URL headers. <i>Side Note: If you want to learn more about <a href="http://technet.microsoft.com/en-us/library/cc262787.aspx" style="background-color: white; cursor: pointer; line-height: 18.155555725097656px; outline: none; text-decoration: none;">Software boundaries and limits for SharePoint 2013</a> , visit: <a href="http://technet.microsoft.com/en-us/library/cc262787.aspx">http://technet.microsoft.com/en-us/library/cc262787.aspx</a>).</i></span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">So began my effort to collapse multiple web applications from a SharePoint 2010 farm into a single web application in a new SharePoint 2013 farm.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><b><u>Step 1: Identify possible duplicate URLs</u></b></span><br />
<span style="font-family: inherit;">The first step is to identify all of the sites within an existing web application to see if any of them have identical URL paths. For instance there may be a site "/sites/sitecollection1" and in both web applications. I like this little PowerShell cmdlt and use it quite frequently to see how our site collections are growing on a monthly/annual basis:</span><br />
<span style="font-family: inherit;"><br /></span>
<b><i>Get-SPWebApplication https://url.domain.com | Get-SPSite -Limit All | Get-SPWeb -Limit All | Select Title, URL, ID, ParentWebID | Export-CSV C:\filename.csv -NoTypeInformation</i></b><br />
<span style="font-family: inherit;"><br /></span>
<b style="font-family: inherit;"><u>Step 2: Create Web Application</u></b><br />
<span style="font-family: inherit;">The next step is to create a new web application (if one doesn't already exist in the new farm). Depending on your authentication method, you can either use Central Administration (claims-based) or PowerShell (classic-mode). In our case, I needed to create the web application in classic mode and then convert it to claims after everything has been moved over. This was due to the fact that we were using Office Web Apps which requires claims-based authentication. Here is the cmdlet used to create the web application in classic-mode:</span><br />
<br />
<br />
<span style="font-family: inherit;"><br /></span>
<b><i><span style="font-family: inherit;">New-SPWebApplication -Name <Name> -ApplicationPool <ApplicationPool> -AuthenticationMethod <WindowsAuthType> -ApplicationPoolAccount <ApplicationPoolAccount> -Port <Port> -URL <URL></span></i></b><br />
<b><i><span style="font-family: inherit;"><br /></span></i></b>
<i><span style="font-family: inherit;">Side Note: For more information about classic-mode authentication, visit: <a href="http://technet.microsoft.com/en-us/library/gg276326.aspx">http://technet.microsoft.com/en-us/library/gg276326.aspx</a></span></i><br />
<span style="font-family: inherit;"><br /></span>
<b><u><span style="font-family: inherit;">Step 3: Create Empty Root Site Collection</span></u></b><br />
<span style="font-family: inherit;">Next, we need to create the top-level site collection. This is a requirement for any new Web Application. Also, this will be the only site collection that shows up in the content source. Even though all other host-named site collections do not appear, by default search will automatically crawl them.</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<b><i>New-SPSite 'http://<servername>' -Name 'Portal' -Description 'Portal on root' -OwnerAlias 'domain\administrator' -language 1033 -Template 'STS#0'</i></b><br />
<div style="font-family: inherit;">
<br /></div>
<div style="font-family: inherit;">
<b><u>Step 4: Create Host-Named Site Collections</u></b></div>
<div style="font-family: inherit;">
You must use PowerShell to create a host-named site collection, although you can manage it with Central Administration after it has been created.</div>
<br />
<br />
<i><b>New-SPSite 'http://portal.domain.com' -HostHeaderWebApplication 'http://<servername>’ -Name 'Portal' -Description 'Customer root' -OwnerAlias 'domain\administrator' -language 1033 -Template 'STS#0'</b></i><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><b><u>Step 5: Migrate existing SharePoint 2010 Content Databases to new Host-Named Site Collections</u></b></span><br />
In the interest of staying on topic, I have skipped the steps that include attaching the content database(s), running the pre-upgrade check and testing the spcontent database. for more information on upgrading SharePoint 2010 databases to 2013, visit this site: <a href="http://technet.microsoft.com/en-us/library/cc303436.aspx">http://technet.microsoft.com/en-us/library/cc303436.aspx</a><br />
<br />
<b><i>Restore-SPSite -Identity <SiteCollectionURL> -Path <Backup file> [-DatabaseServer <DatabaseServerName>] [-DatabaseName <ContentDatabaseName>] [-HostHeader <Host header>] [-Force] [-GradualDelete] [-Verbose]</i></b><br />
<b><i><br /></i></b>
<i>Side Note from Author: Due to an unexpected time crunch, I decided to not collapse the web applications as part of the migration. I was hoping to be able to provide additional lessons learned and more information from actual experience, but unfortunately this is as far as I got in the production environment. Regardless, I wanted to document a few of these steps in case we decide to revisit this again in the future or on another contract.</i><br />
<span style="font-family: inherit;"><br /></span>SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-54634758523150313612014-02-05T09:13:00.000-08:002014-02-05T10:24:21.326-08:00Avoiding The Pitfalls of Installing and Configuring a SharePoint 2013 farm on Windows Server 2012 R2 - Part 1<h2>
<u>Avoiding The Pitfalls of Installing and Configuring a SharePoint 2013 farm on Windows Server 2012 R2 - Part 1</u></h2>
<span style="font-family: inherit;">There are several sources online that can assist with a new SharePoint installation, however until SP1 is released, Microsoft is not supporting installation on Windows Server 2012 R2. I have captured my lessons learned through an actual production installation that will hopefully prevent many of you the frustrations and headaches I've experienced throughout this process. I have focused more on the initial setup errors because getting over this hurdle is 90% of the effort. After this, everything is just a straight forward installation and tailored configuration to your environment that I'll put into PART TWO of this blog.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">I will assume you already have Windows 2012 R2 installed and a functioning Active Directory structure. I will not go into planning or architecture, but we'll agree that this installation/configuration will be done for a multi-tier (3) farm. I will also not address installing/configuring SQL Server in this blog <i>(see my other blog post titled: Installing SQL Server for SharePoint 2013 - coming soon)</i></span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<h3>
<span style="font-family: inherit;">STEP ONE - Setting up Initial Service Accounts</span></h3>
<br />
<br />
The following service accounts are (at a minimum) needed for installing SharePoint bits:<br />
<br />
<b>Setup & Install Account</b><br />
<br />
<ul>
<li>This account must be a domain account and is used to install and configure SharePoint </li>
<li>This account must be member of Local Administrators Group on the server </li>
<li>This account must be assigned “dbcreator” and “securityadmin” server roles on SQL Server</li>
</ul>
<br />
<br />
<b>Farm Account </b><br />
<br />
<ul>
<li>This account must be a domain account and is used to access databases and administering </li>
<li>All the permissions required for this account will be automatically granted after completing SharePoint Farm SharePoint Farm Configuration Wizard</li>
</ul>
<div>
<i>In the next part of this blog, I will address additional service accounts that will be needed for further configuration and customization of SharePoint 2013.</i></div>
<br />
<br />
<span style="font-family: inherit;"><br /></span>
<br />
<h3>
<span style="font-family: inherit;">STEP TWO - Adding Server Roles & Features</span></h3>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">If you have an Internet connection, use these cmdlets to add the necessary server roles and features for front-end web servers and application servers in the farm.</span><br />
<div>
<i><span style="font-family: inherit;">(estimated time: 30-45 minutes per server)</span></i><br />
<span style="font-family: inherit;"><br /></span>
<br />
<div>
<span style="font-family: inherit;">Online method (as described in <a href="http://support.microsoft.com/kb/2765260">http://support.microsoft.com/kb/2765260</a>): </span></div>
<div>
<div>
<br /></div>
<div>
<span style="font-family: inherit;">Open an elevated Windows PowerShell prompt on the SharePoint server (that is, Run as Administrator), and execute the following commands:</span></div>
<div>
<span style="font-family: inherit;"><br /></span>
<b><span style="font-family: inherit;">Import-Module ServerManager</span></b><br />
<span style="font-family: inherit;"><b><br /></b><b>Add-WindowsFeature NET-WCF-HTTP-Activation45,NET-WCF-TCP-Activation45,NET-WCF-Pipe-Activation45</b></span><br />
<span style="font-family: inherit;"><b><br /></b><b>Add-WindowsFeature Net-Framework-Features,Web-Server,Web-WebServer,Web-Common-Http,Web-Static-Content,Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-App-Dev,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Health,Web-Http-Logging,Web-Log-Libraries,Web-Request-Monitor,Web-Http-Tracing,Web-Security,Web-Basic-Auth,Web-Windows-Auth,Web-Filtering,Web-Digest-Auth,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Mgmt-Tools,Web-Mgmt-Console,Web-Mgmt-Compat,Web-Metabase,Application-Server,AS-Web-Support,AS-TCP-Port-Sharing,AS-WAS-Support, AS-HTTP-Activation,AS-TCP-Activation,AS-Named-Pipes,AS-Net-Framework,WAS,WAS-Process-Model,WAS-NET-Environment,WAS-Config-APIs,Web-Lgcy-Scripting,Windows-Identity-Foundation,Server-Media-Foundation,Xps-Viewer<i> </i>-source d:\sources\sxs</b></span><br />
<b><br /></b><a href="http://1.bp.blogspot.com/-B6d2zpS-_7k/UvEvOon82qI/AAAAAAAAAIk/9xdei5Jhivk/s1600/sp13_prereq.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="color: black; font-family: inherit;"><img border="0" src="http://1.bp.blogspot.com/-B6d2zpS-_7k/UvEvOon82qI/AAAAAAAAAIk/9xdei5Jhivk/s1600/sp13_prereq.JPG" height="268" width="640" /></span></a><span style="font-family: inherit;"><i></i></span><br />
<span style="font-family: inherit;"><i><span style="font-family: inherit;"><i><br /></i></span></i></span>
</div>
<div>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">The reason I recommend using PowerShell in this instance is because when you use the PrerequisiteInstaller.exe, it will execute this Windows PowerShell code to install the Roles and Features to configure Windows Server 2012 for SharePoint 2013. Part of the Windows PowerShell code for Add-WindowsFeature installation installs the Windows NET-Framework-Core feature that is the Microsoft .NET Framework 3.5. This feature installation requires binaries and other files that are not included in a default installation of Windows Server 2012. because of this, you may get an error using the GUI and will need to point to the installation source files Windows 2012 R2.</span><br />
<span style="font-family: inherit;"><br /></span>
<u><span style="font-family: inherit;">Note:</span></u><br />
<i><span style="font-family: inherit;">If the server does not have an Internet connection, the PrerequisiteInstaller.exe cannot continue past the "Configuring Application Server Role, Web Server (IIS Role)" phase, and you may receive the following error message:</span></i><br />
<i><span style="font-family: inherit;"><br /></span></i></div>
<div>
<i><span style="font-family: inherit;">The 0x800F0906 error code indicates that the computer cannot download the required files from Windows Update. In Windows Server 2012 and Windows 8, the .NET Framework 3.5 is a Feature on Demand. The metadata for Features on Demand are included in Windows Server 2012 and in Windows 8. However, the binaries and other files that are associated with the feature are not included. When you enable this feature, Windows tries to contact Windows Update to download the missing information to install the feature. The network configuration and how computers are configured to install updates in the environment can affect this process. Therefore, you may encounter errors when you first install such features. </span></i><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">For more information about error codes that may occur when you try to install the .NET Framework 3.5 in Windows 8 or in Windows Server 2012, see the following Microsoft Knowledge Base article:<br /><a href="http://support.microsoft.com/kb/2734782">2734782</a> Error codes when you try to install the .NET Framework 3.5 in Windows 8 or in Windows Server 2012</span></div>
<div>
<span style="font-family: inherit;"><br /></span>
<br />
<h3>
<span style="font-family: inherit;">STEP THREE - Install the Prerequisites</span></h3>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Normally just running the PrerequisitesInstaller.exe will work, however in our environment, we had the servers configured to use WSUS instead of Windows Update, so I was getting the following error:</span><span style="background-color: white; font-family: inherit; line-height: 23px;"><b>SharePoint 2013 Pre requisites install fail, Error: The tool was unable to install Application Server Role, Web Server (IIS) Role</b>. This is more or less the same error you will receive in the previous section, except for a different (but same) reason.</span><br />
<span style="background-color: white; font-family: inherit; line-height: 23px;"><br /></span>
<br />
<div style="background-color: white; border: 0px; line-height: 23px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit;">If you come across this issue, there are 2 ways to solve the issue. If it's an issue with connecting to Windows Update, you may need to set the following Local Policy:</span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;">1. Windows Start</span><span style="font-family: inherit; line-height: 23px;"><br /></span><br />
<span style="font-family: inherit; line-height: 23px;"><br /></span>
<span style="font-family: inherit; line-height: 23px;">2. Run MMC</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-0BBU4025O2c/UvJuknpiFVI/AAAAAAAAAI8/2viIosTqJ5M/s1600/pre1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-0BBU4025O2c/UvJuknpiFVI/AAAAAAAAAI8/2viIosTqJ5M/s1600/pre1.png" height="81" width="400" /></a></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;">3. Click File, Add/Remove Snap-in…</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/--K8CwQiBZN0/UvJukihG-BI/AAAAAAAAAJY/TsvJuDEBrPg/s1600/pre2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/--K8CwQiBZN0/UvJukihG-BI/AAAAAAAAAJY/TsvJuDEBrPg/s1600/pre2.png" height="171" width="200" /></a></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;">4. Select Group Policy Object Editor and ADD it</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-ykfh7S_q0OY/UvJukgRzoDI/AAAAAAAAAJE/pdRsuC3L5qA/s1600/pre3.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-ykfh7S_q0OY/UvJukgRzoDI/AAAAAAAAAJE/pdRsuC3L5qA/s1600/pre3.png" height="222" width="320" /></a></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="line-height: 23px;"><br /></span><span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;">5. Navigate to Administrative templates / System</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-xi_hpT0QOc0/UvJuk6h1nyI/AAAAAAAAAJQ/a1R0P6doM-0/s1600/pre4.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-xi_hpT0QOc0/UvJuk6h1nyI/AAAAAAAAAJQ/a1R0P6doM-0/s1600/pre4.png" /></a></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="line-height: 23px;"><br /></span><span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;">6. Select and edit “Specify Settings for optional component installation and component repair”</span><br />
<span style="font-family: inherit; line-height: 23px;">Enable and select “Contact Windows Update directly to download repair content instead of Windows Server Update Services (WSUS)”</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-qoPp2QM1V2o/UvJulJyfbaI/AAAAAAAAAJU/NPQqIYe0s1U/s1600/pre5.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-qoPp2QM1V2o/UvJulJyfbaI/AAAAAAAAAJU/NPQqIYe0s1U/s1600/pre5.png" height="302" width="400" /></a></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<br style="font-family: inherit; line-height: 23px;" />
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;"><br /></span></div>
<div style="background-color: white; border: 0px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit; line-height: 23px;">7. Re run the prerequisite installation</span></div>
<div style="background-color: white; border: 0px; line-height: 23px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: inherit;">If this still doesnt work, your only other option is to manually install the prerequisites:</span></div>
<div style="background-color: white; border: 0px; line-height: 23px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
</div>
<div style="border: 0px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
</div>
<span style="font-family: inherit;">1. Download all prerequisites from the Internet and save it on local disk of the server, e.g. C:\SP2013Prereqs</span><br />
<br />
<a href="http://download.microsoft.com/download/9/1/3/9138773A-505D-43E2-AC08-9A77E1E0490B/1033/x64/sqlncli.msi" sl-processed="1" style="border: 0px; font-family: inherit; margin: 0px; padding: 0px; vertical-align: baseline;" target="_blank">SQL Server 2008 R2 SP1 Native Client</a><br />
<a href="http://download.microsoft.com/download/8/F/9/8F93DBBD-896B-4760-AC81-646F61363A6D/WcfDataServices.exe" sl-processed="1" style="border: 0px; font-family: inherit; margin: 0px; padding: 0px; vertical-align: baseline;" target="_blank">Microsoft WCF Data Services 5.0</a><br />
<a href="http://download.microsoft.com/download/9/1/D/91DA8796-BE1D-46AF-8489-663AB7811517/setup_msipc_x64.msi" sl-processed="1" style="border: 0px; font-family: inherit; margin: 0px; padding: 0px; vertical-align: baseline;" target="_blank">Microsoft Information Protection and Control Client (MSIPC)</a><br />
<a href="http://download.microsoft.com/download/E/0/0/E0060D8F-2354-4871-9596-DC78538799CC/Synchronization.msi" sl-processed="1" style="border: 0px; font-family: inherit; margin: 0px; padding: 0px; vertical-align: baseline;" target="_blank">Microsoft Sync Framework Runtime v1.0 SP1 (x64)</a><br />
<a href="http://download.microsoft.com/download/0/1/D/01D06854-CA0C-46F1-ADBA-EBF86010DCC6/r2/MicrosoftIdentityExtensions-64.msi" sl-processed="1" style="border: 0px; font-family: inherit; margin: 0px; padding: 0px; vertical-align: baseline;" target="_blank">Windows Identity Extensions</a><br />
<a href="http://download.microsoft.com/download/A/6/7/A678AB47-496B-4907-B3D4-0A2D280A13C0/WindowsServerAppFabricSetup_x64.exe" sl-processed="1" style="border: 0px; font-family: inherit; margin: 0px; padding: 0px; vertical-align: baseline;" target="_blank">Windows Server AppFabric</a><br />
<a href="http://download.microsoft.com/download/7/B/5/7B51D8D1-20FD-4BF0-87C7-4714F5A1C313/AppFabric1.1-RTM-KB2671763-x64-ENU.exe" sl-processed="1" style="border: 0px; font-family: inherit; margin: 0px; padding: 0px; vertical-align: baseline;" target="_blank">CU 1 for AppFabric 1.1 (KB2671763)</a></div>
<div>
<br />
<span style="font-family: inherit;">2. Install all prerequisites directly from the prerequisites folder in the download sequence, </span><strong style="border: 0px; font-family: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">EXCEPT</strong><span style="font-family: inherit;"> AppFabric and CU 1 for AppFabric.</span></div>
<div>
<br />
<span style="font-family: inherit;">3. AppFabric requires special configuration using following statement from command line:</span><b>WindowsServerAppFabricSetup_x64.exe /i CacheClient","CachingService","CacheAdmin /gac</b></div>
<div>
<b><br /></b><span style="background-color: white;">4. Install AppFabric1.1-RTM-KB2671763-x64-ENU</span></div>
<div>
<br />
<span style="background-color: white;">5. Restart your server</span><br />
<ol>
</ol>
<br /></div>
<div>
At this point, you should be able to install the SharePoint Server 2013 bits on all web-front ends and application servers without any errors.<br />
<br />
<br />
<i>(see my next blog post titled: Avoiding The Pitfalls of Installing and Configuring a SharePoint 2013 farm on Windows Server 2012 R2 - Part 2 - coming soon)</i><br />
<br />
<br /></div>
</div>
</div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-51701795014357268942014-01-17T09:09:00.006-08:002014-01-17T09:26:50.648-08:00Underscores: SharePoint 2010 Search Worst Enemy or Just a Lesson in FutilityThis is a really interesting topic. I'm hoping that I get some feedback on this blog post based on others experience with SharePoint Search. <br />
<div>
<br /></div>
<div>
At a customer site, we have been troubleshooting a search problem where users were not getting any search results from within a site or a list/library, even when you could clearly see the name of the document contained within it. We are confident that the Search Service is properly configured (because it is working fine on other sites within the farm) and we confirmed that it is running regular incremental crawls.<br />
<div>
<br /></div>
<div>
The more we dug into the issue, we discovered that it appeared that it had something to do with underscores in the name. It was quickly apparent that any file under a folder that had an underscore, would not show up in the search results. This made us question how Microsoft designed their search (why would names with underscores be ruled out?), so we created two test site collections (one created with an underscore in the site name and a second without) so we could test out the search in the following 3 scenarios:</div>
<div>
<ol>
<li>Create a Document Library with an underscore in the name (underscore_library)</li>
<li>Create a Document Library with no underscore (regularlibrary)</li>
<li>Create a Document Library with a space in the name (space library)</li>
</ol>
<div>
Within each of those document libraries, we created 3 folders:</div>
</div>
<div>
<ol>
<li>Folder with an underscore in the name (underscore_folder)</li>
<li>Folder with no underscore (folder1)</li>
<li>Folder with a space in the name (space folder)</li>
</ol>
<div>
And within each of those folders, we created two test documents:</div>
</div>
<div>
<ol>
<li>Document with an underscore in the name (document_1)</li>
<li>Document with no underscore (document1)</li>
</ol>
<div>
We then ran a full crawl and searched at the site level for a keyword contained within the document.</div>
</div>
<div>
<br /></div>
<div>
Wouldn't you know... all our search results showed up? But we thought it was a problem with the underscores, how could this be???</div>
<div>
<br /></div>
<div>
Ok, we thought, maybe it's one of those things that just needs to get kicked once in a while.. you know... <b><i>Have you tried turning it OFF and back ON again?</i></b></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-QT_f0IfgWXM/UtlgyYqwFOI/AAAAAAAAAII/WDxm4mIfAzQ/s1600/4463d682735d1cb300ce7e5032c9128e3dd4a553f5a2fc44273e07f8a3ae07bd.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-QT_f0IfgWXM/UtlgyYqwFOI/AAAAAAAAAII/WDxm4mIfAzQ/s1600/4463d682735d1cb300ce7e5032c9128e3dd4a553f5a2fc44273e07f8a3ae07bd.jpg" height="273" width="320" /></a></div>
<div>
<br /></div>
<div>
So we decided to run a full crawl on the content source for the user's sites and just like that, all search results then showed up! I was both elated and disappointed at the same time. I was happy because the user's search results were now being displayed (and we could mark this ticket closed).. but I was disappointed because this blog post that I had been writing (and the effort to create test site collections) was for naught.</div>
<div>
<br /></div>
<div>
Even though this did the trick for the issue at hand, the question then becomes, what event or change happened to the site and/or the content that would cause it to not get picked up in the incremental? We did experience a SAN crash last year (after this data was originally created) and this caused us to have corrupted databases that needed to be repaired, but we were not sure this was the reason these files were not getting picked up by the index. We were at a loss, but I guess sometimes you just have to accept that a "reboot" will often times fix weird Microsoft problems like this and just move on. No sense burning off a bunch of brain cells to figure every little thing out. It works - you're a hero - now move along.</div>
<div>
<br /></div>
<div>
I'm always open to ideas, suggestions or perhaps your own experience with similar funky search issues like this one. I decided to still post this to hopefully remind everyone that sometimes the best solution is the easiest.</div>
<div>
<br /></div>
<div>
If you want to learn more about planning for crawling and federation in SharePoint 2010, we referred to this technet article: <a href="http://technet.microsoft.com/en-us/library/cc262926.aspx">http://technet.microsoft.com/en-us/library/cc262926.aspx</a></div>
<div>
<br /></div>
<div>
Until next time... stay thirsty my friends!</div>
<div>
<br /></div>
<div>
<br /></div>
</div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-47215100043903522202014-01-16T12:15:00.002-08:002014-01-16T12:15:26.668-08:00SharePoint 2010 Search Issue: No Search Results for Users in a One-way Trust Domain ScenarioI just wanted to write a quick blog post about an issue we experienced this week in our enterprise SharePoint 2010 environment while it was still fresh in my head. <br />
<br />
Even though our search service is configured properly and successfully crawling all the necessary content sources, we were getting complaints from our end-users that they were not getting any search results. I could performed the same search query they were on the same site and I would get all the results. So why is this happening?<br />
<br />
Well, this is the point in time where all good SharePoint admins reach in their toolbox and pull out the biggest hammer they can find. That's right, we did a <a href="http://www.google.com/" target="_blank">Google</a> search (or <a href="http://www.bing.com/" target="_blank">Bing</a> if you're not into the whole brevity thing).<br />
<br />
Anyway, we stumbled on <a href="http://www.mattstratton.com/tech-tips/configuring-sharepoint-2010-search-in-a-one-way-trust-scenario/" target="_blank">THIS</a> blog from Matt Stratton dated June 1, 2010. He explains how to configure SharePoint 2010 Search in a one-way trust scenario. This described our environment to a "T". <br />
<br />
So we dug a little more.... Then we found this article: <a href="http://support.microsoft.com/kb/2344518">http://support.microsoft.com/kb/2344518</a><br />
<br />
EUREKA!<br />
<br />
Once we ran the script and performed a full crawl, these users tested their sites again and search was working correctly. They received results from their site search and everyone in the kingdom was happy.<br />
<br />
The End!SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-88312948263904335822014-01-13T09:58:00.003-08:002014-01-13T09:58:23.312-08:00How To Extract a Farm Solution from SharePoint 2010<span style="font-family: inherit;">I found this useful today. I need to decompile a solution that was created by someone else and globally deployed to our production farm. I did not have the original .wsp file, so I had to extract it from SharePoint using these 3 lines of code:</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<pre class="csharpcode" style="background-color: #ced5db; color: #333333; line-height: 18.149999618530273px;"><span style="font-family: inherit;">$farm = Get-SPFarm
$file = $farm.Solutions.Item(<span class="str">"global.deploy.solution.wsp"</span>).SolutionFile
$file.SaveAs(<span class="str">"c:\temp\</span></span><span style="font-family: inherit; line-height: 18.149999618530273px;">global.deploy.solution.</span><span class="str" style="font-family: inherit; line-height: 18.149999618530273px;">wsp"</span><span style="font-family: inherit; line-height: 18.149999618530273px;">)</span></pre>
<div style="color: #333333; line-height: 18.149999618530273px;">
<span style="background-color: white; font-family: inherit;"><br /></span></div>
<div style="color: #333333; line-height: 18.149999618530273px;">
<span style="background-color: white; font-family: inherit; line-height: 18.149999618530273px;">Note that in order to run this command, you need to be a member of the Farm Administrators group and have permission to the configuration database.</span></div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-7950761521466964842014-01-06T09:00:00.002-08:002014-01-10T05:56:39.024-08:00Migrating a Single Sub-Site from a MOSS 2007 Farm to an existing SharePoint 2010 Farm<span style="font-family: inherit;">I was recently tasked to migrate a single sub-site from a degraded MOSS 2007 farm to an existing SharePoint 2010 farm. The existing MOSS 2007 sub-site is contained within a single content database, in a single site collection with over 2500 other sub-sites. The task was to migrate just the one single sub-site, so here are the steps I took to accomplish this move, using the Database Attach method.</span><br />
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<ol>
<li><span style="font-family: inherit;">Create a new content database in the MOSS 2007 farm. This was accomplished through SharePoint 3.0 central Administration. It's a pretty straight-forward process. I did this so I had a clean database to move that only had the data I needed.</span></li>
<li><span style="font-family: inherit;">Create a new site collection in the new content database within MOSS 2007. Again, a straight-forward process using SharePoint 3.0 Central Administration. I mimicked the managed path that I wanted to use in the SharePoint 2010 environment.</span></li>
<li><span style="font-family: inherit;">Open Command Prompt and change directory to <b>%COMMONPROGRAMFILES%\Microsoft shared\web server extensions\12\bin</b>, then run the following STSADM command to export the content of the site:<br /><b>stsadm -o export -url <Old Site URL> -filename <export file name.cab> -includeusersecurity -versions 4 </b>(to include all versions)</span><div style="text-align: center;">
<i><span style="color: red; font-family: inherit;"><b>More information about stsadm export/import can be found <a href="http://technet.microsoft.com/en-us/library/cc262465(v=office.12).aspx" target="_blank">HERE</a></b></span></i><br />
<div style="text-align: left;">
It's important to make sure you have enough available disk space for the backup files. You can verify the size of the site by opening it up in SharePoint Designer (2007 in this case) and clicking <b>Site > Reports > Site Summary</b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
If you get an error during the export process (Error: Unknown compression type in a cabinet folder), it means you have insufficient disk space available. Please keep in mind that it will write temp files to the C drive, so make sure you have at least 2-3x the total storage needed, or save the back up files to a different drive to split off the load.</div>
</div>
</li>
<span style="color: #99cc00;"><span style="color: black;"><span style="font-family: inherit;"><br /></span></span></span>
<li><span style="font-family: inherit;">Once the content has been exported, use the following STSADM command to import the content of the site to the new site collection on the new content database:<br /><b>stsadm -o import -url <New Site URL> -filename <export file name.cab> -includeusersecurity</b></span></li>
</ol>
<span style="font-family: inherit;"><br />At this point, we have isolated just the content we need into a new MOSS 2007 content database, which will make the move much easier than it was before we started. If you run into any problems with the above steps, make sure the account you are using has the necessary permissions. </span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">Before we create a backup of the 2007 content database and move it to the new 2010 farm, we will need to run the Pre Upgrade Check and f<span style="background-color: white;">ix any issues reported before moving on to the next step</span>:<br /><b>stsadm -o preupgradecheck</b></span></div>
<div>
<b><span style="font-family: inherit;"><br /></span></b></div>
<div>
<span style="font-family: inherit;">Once the database is ready, it's time to create a backup the database and copy it over to the new SQL instance:</span></div>
<div>
<ol>
<li><span style="font-family: inherit;"><span style="background-color: white;">Open </span><b style="background-color: white;">Microsoft SQL Server Management Studio </b><span style="background-color: white;">for the 2007 instance</span><span style="background-color: white;">. Right-click on the content database and select </span><b style="background-color: white;">Tasks</b><span style="background-color: white;"> > </span><b style="background-color: white;">Backup...</b></span></li>
<li><b style="background-color: white;"><span style="font-family: inherit;"><span style="font-weight: normal;">Enter the </span><b>Backup Name,</b><span style="font-weight: normal;"> select </span><b>Destination</b><span style="font-weight: normal;">, and click </span><b>OK</b><span style="font-weight: normal;"> to start.</span></span></b></li>
<li><b style="background-color: white;"><span style="font-weight: normal;"><span style="font-family: inherit;">Copy this backup file to the SharePoint 2010 SQL server.</span></span></b></li>
</ol>
<div>
<span style="font-family: inherit;">After the database is in the new environment, restore, test and mount the database to SharePoint 2010:</span></div>
</div>
<div>
<ol>
<li><span style="font-family: inherit;"><span style="background-color: white;">Restore the SharePoint 2007 backup to SharePoint 2010 SQL Server. Open </span><b style="background-color: white;">Microsoft SQL Server Management Studio</b><span style="background-color: white;">. Right-click on </span><b style="background-color: white;">Databases</b><span style="background-color: white;"> and select </span><b style="background-color: white;">Restore Database...</b></span></li>
<li><b style="background-color: white;"><span style="font-family: inherit;"><span style="font-weight: normal;">Enter the new </span><b>database name</b><span style="font-weight: normal;">, making sure that you don't overwrite the original content database. Select the </span><b>Source</b><span style="font-weight: normal;"> and click </span><b>OK</b><span style="font-weight: normal;"> to start. </span></span></b><span style="background-color: white;"><span style="font-family: inherit;">If the </span>database<span style="font-family: inherit;"> is showing "offline", be sure to bring it online before moving to the next step.</span></span></li>
<li><b style="background-color: white;"><span style="font-weight: normal;"><span style="font-family: inherit;">Next, test the database against the existing SharePoint 2010 web application. If there are any errors, make sure to correct them before mounting the SP2007 content database.<br /><strong><span style="color: #99cc00;"><span style="color: black;">Test-SPContentDatabase -Name <DatabaseName> -WebApplication <URL></span></span></strong></span></span></b></li>
<li><b style="background-color: white;"><strong><span style="color: #99cc00;"><span style="color: black;"><span style="font-family: inherit;"><span style="font-weight: normal;">If there are no errors (or the errors have been fixed), use the Mount-SPContentDatabase cmdlet. This cmdlet also upgrades the SP2007 content to SP2010.</span><br style="font-weight: normal;" /><strong><span style="color: #99cc00;"><span style="color: black;">Mount-SPContentDatabase <ContentDb> -WebApplication http://SiteName</span></span></strong></span></span></span></strong></b><span style="font-family: inherit;">If the database was moved from a different environment, you may need to change the site collection administrators in order to see the Site Settings menu</span></li>
<li><span style="font-family: inherit;">Verifiy the data is moved properly and perform visual upgrade.</span></li>
</ol>
</div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-4399012802511593592013-12-16T12:25:00.002-08:002013-12-16T12:25:14.199-08:00Using InfoPath 2010 and Cascading Drop-down boxes to Create a Conference Room Scheduling SystemIn late 2012, a customer asked me to create a custom conference room scheduling system. The out-of-the-box template included in SharePoint 2010 did not fully meet their requirements. They wanted the system to collect room requests while allowing the end-user the ability to choose the appropriate room based on a certain criteria such as location, room capacity and available features and services. This was fairly straight forward and a great use-case for SharePoint 2010 using InfoPath list forms. I also implemented some SharePoint Designer 2010 workflows to create custom email notifications and to create/assign a calendar item for each new room request.<br />
<br />
The first thing I did was collect the requirements. They were as follows:<br />
<br />
<ol>
<li>Create a reservation-based system for 13 unique conference rooms</li>
<li>The system needs to allow an administrative group to approve each conference room request</li>
<li>The requester should be able to select available rooms based on:</li>
<ol>
<li>Room Seating Configuration</li>
<li>Maximum Seating Capacity</li>
</ol>
<li>The requester should also be able to request additional equipment, furnishings, security and services as well as catering (if available to the selected room)</li>
<li>The system should automatically email individuals and groups depending on selections</li>
</ol>
<div>
The next thing I did was get a list of all the conference rooms and their maximum capacity per seating configuration. In several cases, a single conference room could have several seating configurations and each of those configurations had different maximum capacities. For this, I needed to create a Master Conference Room list as a single reference point. This list contained the following columns which will be used later in the form design phase: </div>
<div>
<ul>
<li>Name - this was for the common name of the conference room</li>
<li>Maximum Room Capacity - this was for the absolute maximum capacity the room could hold regardless of seating configuration</li>
<li>Seating Configuration Type - this was for the type of seating configuration</li>
<li>Maximum Configuration Capacity - this was for the maximum capacity for a selected configuration</li>
<li>Food and Beverage - this was a Yes/No field used to indicate whether a particular conference room allowed food or beverages</li>
<li>Status - This was a 2 choice field which allowed the admin to make a certain room or configuration active or inactive depending on if it was available, etc</li>
<li>Video Teleconferencing - this was also a Yes/No field to indicate whether video conferencing was available in that particular conference room</li>
</ul>
</div>
<div>
I also needed to create a few supplementary lists to populate additional choice fields:</div>
<div>
<ul>
<li>AV Equipment - this list contained all available Audio/Visual equipment</li>
<li>AV Services - this list contained all available Audio/Visual services</li>
<li>Food and Beverage - this list contained all Food/beverage services</li>
<li>Furnishings - this list contained additional room furnishings</li>
</ul>
<div>
Once all these supporting lists were created, I was able to connect them as data sources in my InfoPath form. In this particular application, I needed to reference the conference room list several times, so for each call to the list, I created a new connection:</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-wDuLuMrajBA/Uq9R-kFzgpI/AAAAAAAAAGk/ID3I3MLihjM/s1600/ofas11.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-wDuLuMrajBA/Uq9R-kFzgpI/AAAAAAAAAGk/ID3I3MLihjM/s1600/ofas11.JPG" height="373" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
I started building the system with a generic task list and then modified the list using InfoPath 2010:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-gIIgMMnab5A/Uq9IX6B7OSI/AAAAAAAAAFo/oup_Gcv-vE8/s1600/ofas5.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-gIIgMMnab5A/Uq9IX6B7OSI/AAAAAAAAAFo/oup_Gcv-vE8/s1600/ofas5.JPG" height="68" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
I started with collecting the basic information. These fields included Full Name, Phone Number, Email, Organization, Meeting Name, Start Date/Time and End Date/Time:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-pPUeu5ZOlt8/Uq9IreyYEcI/AAAAAAAAAFw/QVhygp51nn8/s1600/ofas1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-pPUeu5ZOlt8/Uq9IreyYEcI/AAAAAAAAAFw/QVhygp51nn8/s1600/ofas1.jpg" height="305" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
I added choices manually to the "Organization" Drop-Down List Box from within InfoPath, instead of setting up a lookup list for that column. </div>
<div>
<br /></div>
<div>
I also created an InfoPath rule to automatically set the End Time/Date to 1 hour later once the Start Date/Time was entered:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-bHXRfKjX900/Uq9KeaZCGoI/AAAAAAAAAF8/OwalxQbKQjo/s1600/ofas6.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-bHXRfKjX900/Uq9KeaZCGoI/AAAAAAAAAF8/OwalxQbKQjo/s1600/ofas6.JPG" height="243" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
At this point, is where some of the cool stuff starts happening. I designed a simple call-out bar that gives the end-user some quick steps on how to fill out the rest of the form. </div>
<div>
<br /></div>
<div>
Step 1: Select the Room Setup Configuration:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-5HnKV4U7RPo/Uq9LU6-DoqI/AAAAAAAAAGI/grrTIM_DT98/s1600/ofas7.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-5HnKV4U7RPo/Uq9LU6-DoqI/AAAAAAAAAGI/grrTIM_DT98/s1600/ofas7.JPG" height="400" width="331" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
For this step, I have created a new external data source to the Master Conference Room list that I created to contain all of the conference rooms available along with the specific details for each room (ConferenceRooms_Setup). In this data connection, I only selected the columns that For the value of this particular drop-down, I only want to show the Setup Type column from that list and only display unique display names (since there were multiple entries for each conference room based on its unique configurations). I also created a filter on the external data connection to ONLY display entries of that list where the "Status" column (from the external conference room list) is equal to "active" so the rooms that were not available (or not yet ready for reservations would not be included. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-WyTxuPc9QPM/Uq9OxOzbt7I/AAAAAAAAAGQ/CwLmpjX1f7s/s1600/ofas8.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-WyTxuPc9QPM/Uq9OxOzbt7I/AAAAAAAAAGQ/CwLmpjX1f7s/s1600/ofas8.JPG" height="400" width="338" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
The last thing I did for this particular field is, I created a few rules which will come into play later. These rules basically blank out the capacity, conference room and food/bev fields so we are not left with artifacts in those fields as this selection changes. This will make more sense later as I start to show how I displayed/hid sections of the form based on selections made by the end-user.</div>
<div>
<br /></div>
<div>
Step 2: Choose Configuration Capacity:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-wYIB40-lCRk/Uq9PnQWkOoI/AAAAAAAAAGY/YBntVTjqgb4/s1600/ofas9.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-wYIB40-lCRk/Uq9PnQWkOoI/AAAAAAAAAGY/YBntVTjqgb4/s1600/ofas9.JPG" height="400" width="332" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
For this step, I have again created a new external data source to the Master Conference Room list (ConferenceRooms_Capacity). For the value of this particular drop-down, I only want to show the Maximum Capacity for the Configuration Type they selected in Step 1. This is where the fun begins! When selecting the Entries, I filtered the data so that the MaxCapacity field only displayed the entries equal to the MaxCapacity associated with the SetupType selected in Step 1. The image below shows almost all of the dialogue boxes needed to configure this but I'm sure it looks quite confusing:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-qxXIh1YysVc/Uq9SeShnToI/AAAAAAAAAGs/o1mmDTw9iwo/s1600/ofas10.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-qxXIh1YysVc/Uq9SeShnToI/AAAAAAAAAGs/o1mmDTw9iwo/s1600/ofas10.JPG" height="576" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
This ultimately resulted in only displaying in the drop-down box ONLY the capacities which matched the configuration type selected in step 1. I also had to create rules similar to what I did in Step 1 so that it blanked out any associated fields so that as the selection changes, we didnt leave incorrect artifacts in those fields.</div>
<div>
<br /></div>
<div>
Step 3: Select Available Conference Room</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-9ujTRK13wZU/Uq9T6Lk9sZI/AAAAAAAAAG4/N_oFsixosdQ/s1600/ofas12.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-9ujTRK13wZU/Uq9T6Lk9sZI/AAAAAAAAAG4/N_oFsixosdQ/s1600/ofas12.JPG" height="400" width="331" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
For this step, I once again created a new external data source to the Master Conference Room list (ConferenceRooms_Rooms). For the value of this particular drop-down, I only want to show the Conference Rooms for the Maximum Capacity they selected in Step 2. This one is even more complex than the last. For this field, I only wanted to display the name of the conference room that met the first two criteria. This required filtering the drop-down so that it displayed ONLY those items where the Maximum Capacity was greater than or equal to the Capacity selected in Step 2 AND the setup is equal to the configuration selected in Step 1:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-ZYD3vRUpKQ0/Uq9WDKFBIDI/AAAAAAAAAHE/48FOw3APp48/s1600/ofas13.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-ZYD3vRUpKQ0/Uq9WDKFBIDI/AAAAAAAAAHE/48FOw3APp48/s1600/ofas13.JPG" height="316" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
This results in only being able to select those conference rooms that met the above criteria. I also created rules on this field that blanked out additional selections as well as populating data based on this final selection.</div>
<div>
<br /></div>
<div>
If a user wants to go back and re-select any of the 3 fields, the rules are in place to blank out the rest of the options so there are no incorrect artifacts, or they can continue with their original selection.</div>
<div>
<br /></div>
<div>
But the fun doesn't stop there! Yes.. there's more.....</div>
<div>
<br /></div>
<div>
Now that the conference room is selected, we also have the requirement to be able to also request equipment, services, etc. One of the most important selection is whether the conference room we selected allows food/bev. Based on the selection made in the Conference Room drop-down, I either need to allow or disable the food selection. For that choice, I have set up a rule that looks back to the external conference room list and if the conference room they selected in Step 3 has its FoodBev column marked false, then disable this field:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-S1EozY3Zbyw/Uq9ZJcFKx1I/AAAAAAAAAHQ/gWFd0A4y1Co/s1600/ofas15.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-S1EozY3Zbyw/Uq9ZJcFKx1I/AAAAAAAAAHQ/gWFd0A4y1Co/s1600/ofas15.JPG" height="364" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
There also some other cool things I did with hidden sections. For instance if an Audio Conference was selected in the AV Services field, additional fields opened up that allowed them to populate the bridge and passcode. Also, Video Conferencing was only available in 3 of the conference rooms, so that field was disabled unless the appropriate conference room was selected in Step 3. Lastly, if Food and Bev was allowed in the conference room they selected, additional fields would open up, including the Food and beverages section, the name of the In-house caterer POC, and the Alcohol Waiver which could be opened, printed, signed, scanned and attached back to the request:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-I8ox11xgF3w/Uq9auONS45I/AAAAAAAAAHc/nZLvsaswRag/s1600/ofas14.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-I8ox11xgF3w/Uq9auONS45I/AAAAAAAAAHc/nZLvsaswRag/s1600/ofas14.JPG" height="640" width="564" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
The last part of the form contained a few more services with hidden options and a section to approve/reject the request. Each section shown in the image below would be either displayed or hidden based on other choices. Again, all of these choices needed to be manually cleared out if any of the selections above changed, so that's where those rules came into play that I talked about earlier:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-k8tQUMeUeXs/Uq9cDsheblI/AAAAAAAAAHk/silUUVp2vhE/s1600/ofas16.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-k8tQUMeUeXs/Uq9cDsheblI/AAAAAAAAAHk/silUUVp2vhE/s1600/ofas16.JPG" height="622" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
With the form working the way I wanted it, having accomplished almost all of the requirements, the only thing left was creating a custom workflows using SharePoint Designer to create the email notification and the calendar event (if approved). These are pretty straight forward so i wont go into detail here about how they were created.</div>
<div>
<br /></div>
<div>
Cascading drop-down fields is a very useful tool with InfoPath 2010. In this post, I have shown how to can take a selection, filter the results into another drop-down, and then make an additional selection to narrow the results down even further. This completely accomplished the goal and provided my customer with a very robust conference room scheduling system.</div>
<div>
<br /></div>
<div>
PS: Here are a couple good references to creating cascading drop-down fields if you want to look more into it. These are more specific to just creating cascading drop-downs, so the description and the example is probably easier to understand:</div>
<div>
<br /></div>
<div>
<a href="https://www.nothingbutsharepoint.com/sites/eusp/Pages/infopath-cascading-drop-down-screencast.aspx">https://www.nothingbutsharepoint.com/sites/eusp/Pages/infopath-cascading-drop-down-screencast.aspx</a></div>
<div>
<br /></div>
<div>
<a href="http://blogs.msdn.com/b/bharatgupta/archive/2013/03/07/create-cascading-dropdown-in-browser-enabled-infopath-form-using-infopath-2010.aspx">http://blogs.msdn.com/b/bharatgupta/archive/2013/03/07/create-cascading-dropdown-in-browser-enabled-infopath-form-using-infopath-2010.aspx</a></div>
<div>
<br /></div>
<div>
If you have any questions or need additional clarification, explanation feel free to post your comments in the section below. Enjoy!</div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com2tag:blogger.com,1999:blog-1797225467140028133.post-78386152141422802542013-12-16T07:44:00.001-08:002013-12-16T07:44:42.527-08:00SharePoint Eric's Holiday List of Unlikely Christmas MoviesFor the last few years, I have been gathering a list of unlikely Christmas movies. It all came about because around this time of the year, my family watches movies to get us into the holiday season, and frankly some of the more "standard" Christmas movies are a bit played out. Sure, there are some of my personal favorites like '<a href="http://www.imdb.com/title/tt0085334" target="_blank">A Christmas Story</a>', '<a href="http://www.imdb.com/title/tt0097958" target="_blank">National Lampoon's Christmas Vacation</a>', '<a href="http://www.imdb.com/title/tt0319343" target="_blank">Elf</a>' and '<a href="http://www.imdb.com/title/tt0307987" target="_blank">Bad Santa</a>', but I wanted to find a list of movies that you wouldn't necessarily think of as "Christmas Movies", but would pleasantly surprised when you watched it. The only real criteria to this list is it couldn't have a holiday related title and it must take place around Christmas time.<br />
<br />
So without further adieu, here is my top 20 unlikely Christmas movies (in no particular order). <br />
<br />
Happy Holidays!<br />
<br />
<br />
<ol>
<li><a href="http://www.imdb.com/title/tt0087363" target="_blank">Gremlins</a></li>
<li><a href="http://www.imdb.com/title/tt0083929" target="_blank">Fast Times at Ridgemont High</a></li>
<li><a href="http://www.imdb.com/title/tt0095016" target="_blank">Die Hard</a></li>
<li><a href="http://www.imdb.com/title/tt0086465" target="_blank">Trading Places</a></li>
<li><a href="http://www.imdb.com/title/tt0099487" target="_blank">Edward Scissorhands</a></li>
<li><a href="http://www.imdb.com/title/tt0102057" target="_blank">Hook</a></li>
<li><a href="http://www.imdb.com/title/tt0156323" target="_blank">Screwed</a></li>
<li><a href="http://www.imdb.com/title/tt1300854" target="_blank">Iron Man 3</a></li>
<li><a href="http://www.imdb.com/title/tt0103776" target="_blank">Batman Returns</a></li>
<li><a href="http://www.imdb.com/title/tt0081505" target="_blank">The Shining</a></li>
<li><a href="http://www.imdb.com/title/tt0079470" target="_blank">Monty Python's Life of Brian</a></li>
<li><a href="http://www.imdb.com/title/tt0093409" target="_blank">Lethal Weapon</a></li>
<li><a href="http://www.imdb.com/title/tt0094862" target="_blank">Child's Play</a></li>
<li><a href="http://www.imdb.com/title/tt0093748" target="_blank">Planes, Trains and Automobiles</a></li>
<li><a href="http://www.imdb.com/title/tt0373469" target="_blank">Kiss Kiss Bang Bang</a></li>
<li><a href="http://www.imdb.com/title/tt0089927" target="_blank">Rocky IV</a></li>
<li><a href="http://www.imdb.com/title/tt0110955" target="_blank">The Ref</a></li>
<li><a href="http://www.imdb.com/title/tt0116908" target="_blank">Long Kiss Goodnight</a></li>
<li><a href="http://www.imdb.com/title/tt0097428" target="_blank">Ghostbusters II</a></li>
<li><a href="http://www.imdb.com/title/tt0099785" target="_blank">Home Alone</a></li>
</ol>
<br />
<br />
So if you're like me and looking for non-traditional holiday movies, go ahead and add these to your watch list this holiday season. <br />
<br />
If you know of any I should add to my list, please feel free to mention it in the comments section below.<br />
<br />SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com2tag:blogger.com,1999:blog-1797225467140028133.post-23707791022889689422013-12-12T06:20:00.002-08:002013-12-12T06:20:12.669-08:00UAG Connection Errors When Using Internet Explorer 11<span style="font-family: Arial, Helvetica, sans-serif;">Ok, this isnt exactly a SharePoint issue, but it was something that came up while supporting an external SharePoint collaboration site. I was contacted by my customer recently because they were having issues connecting to a public-facing web site. Previously they were able to open the page and log in, but after upgrading to IE11, they started receiving the following error. </span><span style="font-family: Arial, Helvetica, sans-serif;">This error is only present when using IE11, not in Chrome or Firefox</span><span style="font-family: Arial, Helvetica, sans-serif;">:<br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<a href="http://2.bp.blogspot.com/-FJNRzLIEDlc/UqnBgoXY_6I/AAAAAAAAAE8/UAiKeU2QbKM/s1600/errorUAG.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="217" src="http://2.bp.blogspot.com/-FJNRzLIEDlc/UqnBgoXY_6I/AAAAAAAAAE8/UAiKeU2QbKM/s400/errorUAG.jpg" width="400" /></span></a><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">We were able to narrow the problem down to the UAG (Unified Access Gateway) and there has been an update (SP4) that supposedly addresses this issue: </span><a href="http://blogs.msdn.com/b/testingspot/archive/2013/11/27/forefront-unified-access-gateway-2010-sp4-released.aspx" style="font-family: Arial, Helvetica, sans-serif;"><i>http://blogs.msdn.com/b/testingspot/archive/2013/11/27/forefront-unified-access-gateway-2010-sp4-released.aspx</i></a><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Until the UAG is updated, here is a work-around:</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">1) Launch Internet Explorer and go to tools menu and compatibility view settings. Add the site to compatibility view<br /></span><br />
<a href="http://3.bp.blogspot.com/-w_stddIZLu4/UqnCuw6ZTBI/AAAAAAAAAFE/F4V4ne_rz_Q/s1600/uagcomp.bmp" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="400" src="http://3.bp.blogspot.com/-w_stddIZLu4/UqnCuw6ZTBI/AAAAAAAAAFE/F4V4ne_rz_Q/s400/uagcomp.bmp" width="337" /></span></a><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">2) Hit the F12 key to open the Developer tools on the bottom of the screen<br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-9aGRemEKno0/UqnETfsuY9I/AAAAAAAAAFQ/7q_pmwkKl-Y/s1600/f12_1.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" src="http://3.bp.blogspot.com/-9aGRemEKno0/UqnETfsuY9I/AAAAAAAAAFQ/7q_pmwkKl-Y/s1600/f12_1.bmp" /></span></a></div>
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: Arial, Helvetica, sans-serif;">3) Change the user agent option to Internet Explorer 9 or 10<br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-KNsRQ_oNkIM/UqnETdF5W-I/AAAAAAAAAFU/b_oi2D55vo8/s1600/f12_2.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" src="http://1.bp.blogspot.com/-KNsRQ_oNkIM/UqnETdF5W-I/AAAAAAAAAFU/b_oi2D55vo8/s1600/f12_2.bmp" /></span></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Now you should be able to browse back to the site and login with your credentials.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com1tag:blogger.com,1999:blog-1797225467140028133.post-78212380906566742482013-11-20T06:18:00.001-08:002013-11-20T06:19:58.552-08:00A Few Good SharePoint 2010 Tips & TricksFrequently I come across some neat tips and tricks in SharePoint that help either support my end user base or help with administration. I wanted to post a few of them here, not only for my own recollection but also to hopefully help someone out in the Inter-Webs.<br />
<div>
<br /></div>
<div>
The first is some text you can add to the end of your site URL that takes you to a hidden Web Parts Maintenance Page. This is a great trick if you are having issues with a web part on a page, or if an end-user has tried to insert multiple copies of the same web part. This will also show you if anyone has chosen to "hide" the web part from the page (which might be causing a problem) instead of deleting it.</div>
<div>
<br /></div>
<div>
Simply add "?contents=1" to the end of the URL of the page, for example:</div>
<div>
<b>http://yourweb.com/sites/home.aspx?contents=1 </b></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-MgexUDqkzVs/Uoy-rDFqzZI/AAAAAAAAAEg/JUb8ytK-AoE/s1600/webpart.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-MgexUDqkzVs/Uoy-rDFqzZI/AAAAAAAAAEg/JUb8ytK-AoE/s1600/webpart.JPG" height="115" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br />
<br />
<br />
<br />
My next trick came about when someone in leadership asked me to provide a list of all the site collections. We have hundreds spread across multiple content databases. Powershell is one of those things that's incredibly useful for all levels of SharePoint Administrators. In the following commandlet, you will get a list of all the site collections for a particular content database:</div>
<div>
<br /></div>
<div>
<b>Get-SPSite -Limit All -ContentDatabase contentdbname | select url, @{label="Size";Expression={$_.usage.storage}} </b></div>
<div>
<br /></div>
<div>
Along the same lines is a good commandlet to run if you ever want to export all sites within a web application. Again, we have thousands of sites across hundreds of site collections and many content databases, so this gives you a nice spreadsheet of all the sites:</div>
<div>
<br /></div>
<div>
<b>Get-SPWebApplication http://yoursite.com | Get-SPSite -Limit All | Get-SPWeb -Limit All | Select Title, URL, ID, ParentWebID | Export-CSV C:\localhost.csv -NoTypeInformation</b></div>
<div>
<br /></div>
<div>
The final trick I'll post today is a way to see an entire list of all users that have ever logged into your SharePoint web application. It is a hidden User Information List that comes in handy if you ever have any discrepancies with a user not displaying a proper name or if you simply want to remove them from the entire site collection.</div>
<div>
<br /></div>
<div>
Simply add "/_catalogs/users/simple.aspx" to the end of the root site URL. This will display the User Information list, for example:</div>
<div>
<b>http://yourweb.com/_catalogs/users/simple.aspx</b></div>
<div>
<br /></div>
<div>
I hope these help you in your SharePoint Adventures. I will post more of these as I come across them.</div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0tag:blogger.com,1999:blog-1797225467140028133.post-77381142031213154102013-10-17T12:58:00.002-07:002013-10-17T12:58:54.806-07:00Site Owner Unable to Edit a Page in SharePoint Designer Due to an Inherited Master PageOk SharePointers.. I'm wring this blog post to recap a tricky work-around I came up with as result of a Microsoft "feature" in SharePoint 2010. Here are the details, the problem and finally the solution I came up with. perhaps this "out-of-the-box" kind of thinking may help you if you encounter the same situation.<br />
<br />
<u><b>The Set Up:</b></u> Currently on my contract, we have several farms, one of which is an internal portal that is used for employee only collaboration. It requires an Active Directory account and the layout of the environment consists of a main Site Collection for each bureau and sub sites created for each different department below that as they are requested.<br />
<br />
<u><b>The Problem:</b></u> A site owner contacted me unable to edit a site page using SharePoint Designer. he sent me the following screenshots (names have been blurred to protect the innocent):<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://3.bp.blogspot.com/-uN2AaevNvSE/UmA-dMUxaFI/AAAAAAAAAEA/9Fq2_gOC1XY/s1600/spderror1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-uN2AaevNvSE/UmA-dMUxaFI/AAAAAAAAAEA/9Fq2_gOC1XY/s1600/spderror1.png" height="236" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-JLc-s4XV7NA/UmA-lVKFz5I/AAAAAAAAAEI/UQIXt3AqbLU/s1600/spderror2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-JLc-s4XV7NA/UmA-lVKFz5I/AAAAAAAAAEI/UQIXt3AqbLU/s1600/spderror2.png" height="146" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
What this error tells us is that the user does not have permissions to the custom master page that we are using on the site collection. Since it is a sub site that inherits it's master page from the top level site collection, we are having a permissions issue. <br />
<br />
<b><u>The Details:</u></b> As you will read in this
Microsoft support article: <a href="http://support.microsoft.com/kb/2592376">http://support.microsoft.com/kb/2592376</a><br />
<div class="MsoNormal">
<o:p></o:p></div>
<i>Overall, a user needs to be a
member of one of the following groups at the site collection level to be able
to use SharePoint Designer and modify SharePoint content:</i><i>•Site Collection Administrators</i><i>•Designers</i><i>•Owners</i><br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Since I cannot give this site owner site collection admin, owner or designer permissions to my top-level master page library, and I was unable to get the site to recognize the sub site's master page library in the master page settings, the user was getting the error above. Simply creating a new site collection for the user and migrating the data was too much effort, so I had to be a bit tricky with how to make this work. </div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><u>The Solution:</u></b> I created a new folder in the top-level master page library and broke inheritance to the folder, giving him designer permissions. I took a copy of the master page and placed it in that folder, then set the site (and all sub-sites) to inherit this new master page. He now had the necessary permissions to open site page and edit the content without the master page error, and I was able to maintain security by not allowing him elevated access to the real master page library.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
I'm not sure if this is the best way, but this fix took all of 5 minutes to do and the user had all the functionality he needed and was back in business without any impact to the end-user look & feel (or needing to migrate content from one site to a new site collection). If anyone has any other suggestions or perhaps a better way of being able to get the sub site to recognize it's own master page library (using the "_catalogs/masterpage/Forms/AllItems.aspx" string), please feel free to post a comment in the section below.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Enjoy!</div>
SharePoint Erichttp://www.blogger.com/profile/00079863240019670993noreply@blogger.com0