SharePoint Guidance

From MSDN:

Designing and developing rich, robust Microsoft® SharePoint® applications can be challenging. The following releases are designed to help solution developers and architects make the right decisions and follow proven practices when building applications for SharePoint. Each release contains guidance documentation, source code for reference implementations, reusable library code, and Quick Starts.

Definitely worth exploring further if you looking to see how others are building on top of the product stack and what the SharePoint MVPs view as essential for developing robust applications.

Reference

stsadm, Site Collection Restore, and the “File Not Found” error

Restoring site collections with stsadm is normally a straightforward affair, requiring little to no manual intervention to get things back up and running. That is of course, unless you are restoring sites based on the Publishing Site template.

I recently wanted to take an existing site collection, make a copy of it in the same web application under a newly created managed path and have it reside in a new content database. The backup went smooth, utilizing stsadm -o backup. The creation of the new managed path went off without a hitch. The creation of a new content database and the restoration of the site collection into that database also occurred with no issues.

Browsing the site however told a different story. I was immediately greeted with a standard error page stating “File Not Found”. Browsing to other pages within the site (eg. “/_layouts/settings.aspx“) yielded the same result. After turning on the callstack/debugging and disabling the custom error page, I was greeted with the following:

File No Found Error

The problem? Each publishing page points to an incorrect page layout after the restoration. One would think that the restore via stsadm would recognize this and fix it, but it does not.

The fix? The stsadm extensions published by Gary Lapointe. The package built by Gary offers a command call gl-fixpublishingpagespagelayouturl. Verbose? Yes. Does it work? Absolutely.

After running the command and executing an iisreset, the site was once again able to be browsed and appears to be intact.

Reference

SharePoint 2010: Provisioning a new Farm with Powershell

SharePoint 2007 always required some level of scripting in it’s installation to allow for greater control of the installation process (i.e. creating database names without GUIDs). SharePoint 2010 is not any different in that scripting is still required to gain the finer control over installation. What has changed is that now PowerShell can be used in place of psconfig/stsadm. With that in mind, let’s begin.

  1. Install the SharePoint binaries on each server in your farm. Select “Complete” as the installation type. This will allow you to create a farm as opposed to a single server installation.After the install has completed, you will asked if you would like to complete the “SharePoint Products Configuration Wizard”. Do not run the wizard at this time.
  2. On the server which you wish to provision Central Administration:
    1. Open the  ”SharePoint 2010 Management Shell” (right-click and select “Run as administrator”). The shell will load with a message that the local farm is not accessible. This is expected as we have only installed the binaries.
    2. Run the following command to create the initial configuration/content database for the farm.
      New-SPConfigurationDatabase –DatabaseName “SharePoint2010_Config” –DatabaseServer “SharePoint2010SQL” –AdministrationContentDatabaseName “SharePoint2010_Content_Admin” –Passphrase (ConvertTo-SecureString “Pass@word1” –AsPlaintext –Force) –FarmCredentials (Get-Credential)
      
    3. After the initial creation of the farm, close and reload the “SharePoint 2010 Management Shell”. You should no longer receive any error messages.
    4. Install the help files.
      Install-SPHelpCollection -All
      
    5. Secure the resources used by the server (files and registry).
      Initialize-SPResourceSecurity
      
    6. Install and provision the farm services.
      Install-SPService
      
    7. Install the features on the server.
      Install-SPFeature –AllExistingFeatures
      
    8. Provision Central Administration.
      New-SPCentralAdministration -Port 1234  -WindowsAuthProvider "NTLM"
      
    9. Install the application content.
      Install-SPApplicationContent
      
    10. Optional: Disable the loopback check. If this is a development install, outright disabling the check should be fine. For production environments, the loopback check should be left in place and BackConnectionHostNames should be used in its place. See KB 896861.
      New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck"  -value "1" -PropertyType dword
      
  3. On each additional server that you wish to converge in the farm:
    1. Open the  ”SharePoint 2010 Management Shell” (right-click and select “Run as administrator”). The shell will load with a message that the local farm is not accessible. This is expected as we have only installed the binaries.
    2. Connect the server to the farm with the following command:
      Connect-SPConfigurationDatabase -DatabaseName "SharePoint2010_Config" -DatabaseServer "SharePoint2010SQL" -Passphrase (ConvertTo-SecureString "Pass@word1" -AsPlaintext -Force)
      
    3. Install the help files.
      Install-SPHelpCollection -All
      
    4. Secure the resources used by the server (files and registry).
      Initialize-SPResourceSecurity
      
    5. Install and provision the farm services.
      Install-SPService
      
    6. Install the features on the server.
      Install-SPFeature –AllExistingFeatures
      
    7. Install the application content.
      Install-SPApplicationContent
      
    8. Optional: Disable the loopback check. If this is a development install, outright disabling the check should be fine. For production environments, the loopback check should be left in place and BackConnectionHostNames should be used in its place. See KB 896861.
      New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck"  -value "1" -PropertyType dword
      

Reference

InfoPath 2007 Contact Selector – Require a selection

Updated: Click here for an example of how to achieve the same functionality without any code.

The following solution will require a Full Trust form with code, but will allow for a Contact Selector to be placed on a browser-based InfoPath form which will consistently validate, requiring the selection of a user as well as allowing for only one selection.

The code:

public void supervisorEmployeeID_Changed(object sender, XmlEventArgs e)
{
     try
     {
          int supervisorCount = e.Site.SelectChildren(XPathNodeType.Element).Count;

          if (this.Errors.GetErrors("_supervisorCountError").Length > 0)
               this.Errors.Delete("_supervisorCountError");

          if (supervisorCount > 1)
               this.Errors.Add(e.Site, "_supervisorCountError", "You can only select one Manager");
          else if (supervisorCount < 1)
               this.Errors.Add(e.Site, "_supervisorCountError", "You must select a Manager");
     }
     catch { }
}

The above is meant to serve as a reference and should be self-explanatory.