Monday, August 25, 2014

SSRS cmdlets not available: The term 'Install-SPRSService' is not recognized as the name of a cmdlet...

If you get "Install-SPRSService : The term 'Install-SPRSService' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again." trying to enable Reporting Services on SharePoint 2013, the following are possible causes:
  1. You are on a "regular" Windows PowerShell window instead of a SharePoint Management Shell one, or Reporting Services in SharePoint integrated mode is not installed ("Install Reporting Services SharePoint Mode for SharePoint 2013").
  2. Service Pack 1 for SQL Server 2012 is not installed on Reporting Services. According to "Software requirements for business intelligence in SharePoint Server 2013" SP1 is needed for Reporting Services in SharePoint integrated mode on SharePoint 2013.Only after I installed SP1 on SSRS the SSRS cmdlets became available.

Friday, April 11, 2014

My SharePoint PowerShell Scripts

  1. Get the template name and ID for a web site:
    (Get-SPWeb http://website) | select WebTemplate, WebTemplateID
    A list of templates names and ID's can be found here: http://technet.microsoft.com/en-us/library/ff607979(v=office.14).aspx.

Thursday, April 10, 2014

How to Install SharePoint 2013 Project Templates on Visual Studio 2012


  1. Download and install Web Platform Installer: http://www.microsoft.com/web/downloads/platform.aspx.
  2. Close all VS instances or the setup will fail.
  3. On the Web PI select "Microsoft Office Developer Tools for Visual Studio 2012".
After that open VS and the SharePoint 2013 templates should be on the New Project dialog, under Installed | Templates | <language> | Office/SharePoint | SharePoint Solutions.

Monday, March 24, 2014

SharePoint 2013: Configure user profile synchronization service

On the default SharePoint 2013 configuration, the User Profile Synchronization Service (UPSS) is not enabled, so alerts are created but don't work because users don't have a valid e-mail address. Supposing user e-mails are somehow already loaded on AD, here what's you gonna do to configure user profile synchronization:
  1. Follow the article "Synchronize user and group profiles in SharePoint Server 2013" (http://technet.microsoft.com/en-us/library/ee721049(v=office.15).aspx). Notice that the synchronization account must be Farm Admin, and local admin on the box running the UPSS instance.
  2. Use ADSI Edit on the DC to give "Replicate Directory Changes" permission to the synchronization account on the container where your users are.
  3. My test domain had no Exchange or other similar mail server program, so the AD attribute "proxyAddress" was blank. By default SharePoint loads an user e-mail address from this attribute, so I had to remap SharePoint "Work E-Mail" property to the "mail" attribute on AD (which I already had filled). Then run a full synchronization (an incremental one did not load the values).
Cheers,

GB

Wednesday, November 13, 2013

Saving InfoPath form back to subfolder in SharePoint library


Recently I needed to save an InfoPath 2007 ( :-P ) form back to its original location. The original location was on a subfolder inside a SharePoint form library, and the subfolder was created dynamically during form creation time, named based on some data that was not available on the form itself. So there was no way (at least I didn’t see one) I could create a form submit connection that enabled me to save the form back to where it was.

I’ve Googled for a solution and the only one that looked ok was to include the form URL as a field on the form itself, so I could retrieve it later when saving the form back to the SharePoint library. But since the form is running inside SharePoint, and it is an item in a list, I thought I might give it a try to the SharePoint Server API inside the form code behind, and it worked! I used SPWeb.GetListItem() to retrieve the item in SharePoint corresponding to the form, and then used the item’s properties to retrieve its location:

     public void FormEvents_Submit(object sender, SubmitEventArgs e)
     {
         // Retrieves reference to the form in the SharePoint library based on its URL
         SPListItem item = SPContext.Current.Web.GetListItem(this.Uri);
         // Saves the form. There must be a connection on the form named “SaveFile”, pointing to the
         // SharePoint library. In the following code the connection generates the file name, but if the file
         // name must be generated at run-time, it can be set through FileSubmitConnection.FileName
         FileSubmitConnection spConnection = (FileSubmitConnection)this.DataConnections["SaveFile"];
         spConnection.FolderUrl = item.Web.Url + item.File.ParentFolder.ServerRelativeUrl;
         spConnection.Execute();
         e.CancelableArgs.Cancel = false; // Tells InfoPath that form submit was ok
     }

Friday, December 23, 2011

Queue names restrictions on Azure Storage

We got the exception “One of the request inputs is out of range” using a queue to link web and worker roles on Azure. Of course my little prof-of-concept test with code copy-and-pasted from the Azure Tranning Kit ran ok, but the (almost) same code on my app did not. After some time I noticed that the exception was generated when I used upper-case letters on the queue name. Well, the rules for naming queues on Azure are here, but basically they are:

  1. Names can be made of letters, digits and the dash char (-).
  2. First and last chars must be letters ou digits. Consecutive dashes are not allowed.
  3. All letters must be lower case. (Come on, man. You have this kind of restriction and it’s not documented on the API help? Put it in the CloudQueueClient constructor, or in CloudQueueClient.GetQueueReference(), which receives the name of the queue, or at least in CloudQueue.CreateIfNotExists(), since this method creates the queue… :-P)
  4. The queue name length must be between 3 and 63 chars.

Wednesday, July 20, 2011

ReportViewer: Another Reason to “Sys.ArgumentNullException: Value cannot be null. Parameter name: panelsCreated[..]”

If you are stuck with a blank screen when using the ReportViewer control that ships with Visual Studio 2010, check if you provided values for all the parameters in the report. We created a report using {CTRL+C CTRL+V} on an existing report, and the second report used only 3 of the 4 parameters on the original report. We did not provide any value to the last parameter, and it had no default value configured, so the ReportViewer rendered a blank panel on the web form, and generated the following JavaScript error:

Sys.ArgumentNullException: Value cannot be null. Parameter name: panelsCreated[1]

When we edited the report's RDLC file (I could not find the "Report Parameters" menu option that should be under the “Report” menu in Visual Studio, so I opened the RDLC file using Visual Studio XML Editor), and took off the unused parameter defition, the ReportViewer rendered ok. Thanks to this post for pointing me to the right direction.