Showing posts with label SharePoint. Show all posts
Showing posts with label SharePoint. Show all posts

Saturday, October 19, 2013

Enable Publishing Feature recursively in SP 2010 using PowerShell

So now that we saw an inconsistency among multiple sites, with some having Publishing feature enabled while others not, we decided to run a script which combs through each site within a site-collection and enables this feature, if not already enabled.

Given the situation that we had approx. 25-50 sites/sub-sites in each of the 7 site-collections, this appeared fair-enough to tackle one site-collection at-a-time.

To meet this requirement, we had to perform the below 2 high-level tasks:

1. Check and enable the [SharePoint Server Publishing Infrastructure] at the root site-collection level, if not already enabled. (Can be seen from “Site collection features” on “/_layouts/settings.aspx” page).

image

2. Check and enable the [SharePoint Server Publishing] at the site-level, if not already enabled. (Can be seen from “Manage site features” on “/_layouts/settings.aspx” page).

image

Enabling these features, creates the below 4 Lists & Libraries.

image

image

Now the script:

Step 1 was achieved by the script below:

# The URL to the Site Collection
$spSite = Get-SPSite “http://siteurl/”
Write-Host "Root Site Collection: " $spSite

$PublishingSitefeature = Get-SPFeature PublishingSite
$siteCollection = Get-SPSite $siteUrl

#Check and Enable the feature on the site collection
if((Get-SPFeature $PublishingSitefeature -Site $siteCollection.Url -ErrorAction SilentlyContinue) -eq $null )
   {
       write-host -foregroundcolor Yellow "Activating the PublishingWeb feature on " $siteCollection.Url
       Enable-SPFeature $PublishingSitefeature -Url $siteCollection.Url   
       write-host -foregroundcolor Green "Activated the PublishingWeb feature on " $siteCollection.Url
   }
   else
   {
      write-host -foregroundcolor red "PublishingWeb feature already activated on : " $siteCollection.Url
   }

Step 2 was achieved by the following script:

$siteCollection | Get-SPWeb -limit all | ForEach-Object{
   if((Get-SPFeature "PublishingWeb" -Web $_.Url -ErrorAction SilentlyContinue) -eq $null )
   {
      write-host -foregroundcolor Yellow "Activating the PublishingWeb feature on " $_.Url
      Enable-SPFeature -Identity "PublishingWeb" -Url $_.Url
      write-host -foregroundcolor Green "Activated the PublishingWeb feature on " $_.Url
   }
   else
   {
      write-host -foregroundcolor red "PublishingWeb feature already activated on : " $_.Url
   }
}

But as every project is seen over-running the estimates. here too we did not have luck to our side.

After Step 1 was performed successfully, we hit the first issue when started the Step 2.

But in my case, I got the below error, and could see that only [Pages] library got created (just few mins ago) and [Images] library pre-existed ( not sure who created that 6months ago).

“Enable-SPFeature : Provisioning did not succeed. Details: Failed to create the 'Images' library. OriginalException: The feature failed to activate because a list at 'PublishingImages' already exists in this site. Delete or rename the list and try activating the feature again. At C:\Users\abcd\Documents\PS\ActivatePublishingFeatureonAllSites.ps1:86 char:23
+ Enable-SPFeature <<<< -Identity "PublishingWeb" -Url $_.Url #where the PublishingWeb is the internal name of the SharePoint Server Publishing feature + CategoryInfo : InvalidData: (Microsoft.Share...etEnableFeature:SPCmdletEnableFeature) [Enable-SPFeature], SPException
+ FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletEnableFeature”

So I deleted this [Images] library using SPD 2010.

image

image

Deleting [Pages] required me to delete the [Forms] sub-folder and then all the sub-folders and files as below within the [Forms] sub-folder:

image

The above files were deleted using SPD 2010, but couldn’t delete the [Forms] folder. So I renamed the [Pages] library to [Pages2] and tried to re-run the PS script again. But this did not solve the issue. This time I received the below error:

“Enable-SPFeature : Provisioning did not succeed. Details: Failed to create the 'Pages' library. OriginalException: There can only be one instance of this list type in a web. An instance already exists. At C:\Users\abcd\Documents\PS\ActivatePublishingFeatureonAllSites.ps1:86 char:23
+ Enable-SPFeature <<<< -Identity "PublishingWeb" -Url $_.Url #where the PublishingWeb is the internal name of the SharePoint Server Publishing feature + CategoryInfo : InvalidData: Microsoft.Share...etEnableFeature:SPCmdletEnableFeature) [Enable-SPFeature], SPException
+ FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletEnableFeature”.

The reason for this being that you cannot delete few libraries like [Pages] in a site which have the publishing feature enabled. For the case of libraries like the [Images], [Documents] or even the [Site Collection Documents], it is not possible to remove them from the lists settings page or SPD or the manage content and structure tool.

It appears that these lists and libraries have a property AllowDeletion, which has been set as False.

We can use the below script to verify this:

$web = Get-SPWeb “http://siteurl/abcd/”
$lib = $web.Lists[“Pages2”]
$lib.AllowDeletion

This returns “False” as seen below:

image

So what do we do?

PowerShell to rescue again. This allows you to set the property to “True” and then successfully delete the library.

Use the below script to set the property to “True”:

$web = Get-SPWeb “http://siteurl/abcd/”
$lib = $web.Lists[“Pages2”]
$lib.AllowDeletion = $True
$list.Update()

I could then easily use SPD or the browser to delete the [Pages] library (in my case I renamed it to [Pages2]).

Finally I re-executed my script successfully and got the feature enabled.

Friday, October 18, 2013

Excel Services error - This workbook is larger than the maximum workbook size allowed to be opened in the browser

In scenarios, where you need to develop quite large Excel PowerPivot files and deploy to SharePoint, there is are two interesting steps to be performed.

Step 1: You need to enable the ReporServer to allow doing so by adding a parameter

“maxRequestLength=100000” to the “httpRuntime” in the web.config file for Reporting Services.

This web.config file usually resides in a location similar to “C:\Program Files\Microsoft SQL Server\MSRS10_50.SQLEXPRESS\Reporting Services\ReportServer”. (Your drive letter or the path may differ based upon your install).

Once set, do an IISREST.

When this parameter is not set in the web.config, you might see an error like:

“There was an exception running the extensions specified in the config file. ---> Maximum request length exceeded.”

Step 2: In addition to Step 1, you also need to raise the default file size limit on Excel Services on SharePoint, else you get an error:

image

Cause: OOB, the maximum workbook upload size allowed in SharePoint 2010 is 10mb.

To get rid of the above error, perform the below steps:

a. Go to Central Administration => Application Management =>Manage service applications.

b. Click Excel Services Application (click the parent, not the child proxy).

c. Click Trusted File Locations.

d. Click the location. This will be an added trusted file location for the site collection or a new file location, usually like “https://”.

e. Scroll to Workbook Properties.

f. In Maximum Workbook Size, increase the file size from 10 to 50.

image

Click OK. Refresh your report page to see it load without any errors.

Saturday, July 27, 2013

SharePoint Designer Check-in error

While trying to perform a check-in on an existing checked-out page in the “Pages” library of a publishing site, I fell prey to this error.

“SharePoint Designer cannot perform this operation. The file is no longer checked out.”

Got it fix by deleting the cache files located at here:

“%APPDATA%\Microsoft\Web Server Extensions\Cache”

Saturday, July 6, 2013

Remove the Group Label from the “Group By” List Views

This had to be simple java-script, so a quick search on the internet returned me a 2011 Blog post by “Alexander Bautx” which works “AS-IS”. I had to just replace the single-quotes (‘) by deleting and inserting it back again for all of it’s existence, and that’s it. Probably it was due to the copy-paste formatting issue. I have highlighted the change below, which appears at 4 places in his code.

But this was awesome!! Kudos to Alexander.

Note: You may not need the first line reference for the jquery, if you already have it in your master page.

$(this).find("a:last")[0].nextSibling.nodeValue = '';

Sunday, May 26, 2013

Export Term Store to csv using PowerShell

This is another approach towards exporting the term stores to a CSV file format using power shell. I have tried to modify and enhance my previous post to achieve this requirement of generating a  Microsoft Excel format.

So here it is.

#creating a header-row for the csv file

"termStore `t" + "termGroup `t" + "termGroup-LastModifiedDate `t" + "termSet `t" + "termSet-LastModifiedDate `t" + "termSetGUID `t" + "terms `t" + "termsGUID `t" + "terms-LastModifiedDate" >> C:\ExportTermStore.csv

$termSet = Get-SPTaxonomySession -Site http://mydomain/sites/cthub
$termStore = $termSet.TermStores[0]
$termStore.Groups | FT -Autosize Name
$termGroup = $termStore.Groups["myTermStoreGroupName"]   #This is the case when we know the name of the group and want just that. We can also have a foreach instead, to loop-through each of the TermStore Group. I chose the first.
$termStore = $termStore.Name #saving the termStore “Name” in the variable $termStore
$termGroup.TermSets | FT -Autosize Name

foreach ($termGroups in $termGroup.TermSets)
{
  foreach ($termSets in $termGroups.Terms)
  {
    foreach ($terms in $termSets.Terms)
    {
      $termStore + "`t" + $termGroups.Name + "`t" + $termGroups.LastModifiedDate + "`t" + $termSets.Name + "`t" + $termSets.LastModifiedDate + "`t" + $termSets.ID + "`t" + $terms.Name + "`t" + $terms.ID + "`t" + $terms.LastModifiedDate >> C:\ExportTermStore.csv
    }
  }
}

Saturday, April 20, 2013

Formatting Texts in a SharePoint List Item columns

This could be an old-school  thought of wanting to apply different formats to the values stored in list columns.

Well, one can definitely go a number of ways to achieve that, but here’s an approach when an end-user can drop some code in a calculated field to achieve this very easily and more precisely, getting to a number of different formatting styles.

Format 1: Displaying a Hyperlink Text in a calculated column

Create three columns in a list as below:

Column1: [ActualURL] of type “Single line of text”. (We will store values like “http://neerajch.blogspot.com” in this column)

Column2: [URLTitle] of type “Single line of text”. (We will store values like “NeerajCh” in this column)

Column3: [HyperlinkHTML] of type “Calculated”.

Type the below in the Formula box:

=CONCATENATE("<DIV><a href='",ActualURL,"'>",URLTitle,"</a></DIV>")

Select “Number (1, 1.0, 100)” in the [Data Type returned from this formula] section.

Leave the “Automatic” in [Number of Decimal Places].

That’s it. Hit OK and create one new list entry with values mentioned above. [Title] can be anything.

You should see something like this. Hurray !!!

image

Now that “Concatenated” formula piece can be a real handy and fruitful, if used wisely. Let’s see another small example.

Format 2: Displaying a Hyperlink Text in a calculated column as BOLD

With the same configurations for the list columns as above, we modify the formula to include <b> & </b> tags within the <DIV>.

=CONCATENATE("<DIV><b><a href='",ActualURL,"'>",URLTitle,"</a></b></DIV>")

And now you see something like this:

image

Wow, I know, you must be smiling. Smile Nothing great here!! Just plain HTML. And that is my intent.

Let the things be as simple as they can be, for this has to be done by an end user not a developer/designer.

So the end users now have a great handy tool and can make it even powerful, if they can extract more complex HTMLs from their peer developers and embed here.

Saturday, March 23, 2013

Export Term Store to xml using PowerShell

This seemed so obvious while using Central Admin, but soon I realized that there is so much left for SharePoint team at Microsoft to accomplish.

I needed to discuss the Site Taxonomy with my colleagues during our weekly call, when suddenly I found myself searching for the script that would do the magic.

TechNet has this:

http://social.technet.microsoft.com/wiki/contents/articles/17874.sharepoint-2010-how-to-manage-the-term-store-via-powershell.aspx

Gary LaPointe has this:

http://blog.falchionconsulting.com/index.php/2012/03/exporting-and-importing-sharepoint-2010-terms/

Thanks to the above. This was sufficient for me to quickly get my script in-place:

Export-SPTerms  -Group (Get-SPTaxonomySession -Site "http://mydomain/sites/cthub").TermStores[0].Groups[2] -OutputFile "D:\CTHubExport\site_terms.xml" –Verbose

You probably will need to work with the parameters for TermStores[0] & Groups[2] to see that you are correctly referring to your Term Store and the needed Group within the TermStore.

This generated a beautifully formatted xml file.

Saturday, February 23, 2013

Change position of the “Add new announcement” link

This wasn’t a surprise when it was thrown at me with “Please do not spend much time researching, if you have not already done it in past.”.

The question from the stake-holders was “Does anyone know how to move the ‘add new item’ link at the bottom of lists to the top of the list? (it becomes hard to see and requires scrolling down when many items are added to a list).”

Since I had done that very recently, I came up with a quick solution for her as below:

image

The above highlighted link was moved to top as shown below:

image

This was easily achieved by placing some JQuery code within a hidden content editor on the page this was needed. Although this would move every “Add New…” links on that page, but my stake-holder had no issue with that. She wanted just that. Bingo !!!

Here’s is what you need to use:

<script language="javascript" type="text/javascript">
      $(document).ready(function () {
             $("td.ms-addnew").parent().parent().parent().each(function () {
             $(this).insertBefore($(this).prev());
      });
});

</script>

Saturday, January 19, 2013

Display “Upload Document” button on any web part page

So my client got a little too fancy about having a way to upload documents from anywhere on “a site”, to a particular document library available within that site.

Referring to the SharePoint way of uploading documents as below, I was made to run for a solution that would allow them to add this functionality to any web part page.

image

This wasn’t that bad of a thought. Well, at the end it got out to be quite straight forward, if you are happy and comfortable with java-script.

This is what was done, to allow them quickly add a script in a content editor and display a huge button like this:

image

Now the code:

<div class="ms-uploadbtnlink">
  <button onclick="javascript:OpenNewFormUrl(&#39;Documents/Forms/upload.aspx&#39;);return false;" type="submit">
    <nobr>
     <img alt="Upload Document" src="/_layouts/Images/uploaddoc.png"/>&#160;<span>Upload Document</span>
    </nobr>
  </button>
</div>

Thanks for reading!

Sunday, November 25, 2012

Displaying custom User Name in the Welcome Menu

I have seen so much content about approaching this problem in several ways, which to me are kind of solutions that they either:

-Force you to spend un-necessary long man-hours,

-Write too much of custom codes (writing user controls, etc.),

-Makes you try to understand the Welcome.ascx user control (really?? why? Microsoft has already done that).

So eventually, I ended up writing this post for the benefit of all.

SharePoint is an awesome “PLATFORM”, yes, I call it a platform. Not a Tool, or Application or a CRM or a portal, or a …. and the list goes on. By calling it a platform, I am encapsulating all of them together.

So, with so many stuff already provided out-of-box, we only need to know how to leverage them in a best possible manner to our benefits.

By leveraging, I also mean utilizing the excellent work that is being done by one of the Microsoft’s biggest community, the SharePoint community. You’ll find tons & tons.

The one such work that I am referring to is the SharePoint Services Library on CodePlex. Please find it here.

By using this, I have gotten to get this working in the most minimal way that I could find. Below are the pieces of the code that you would need to get your Welcome menu read aloud “Welcome Tango Charlie”. Pre-requisites being that you have a properly configured User Profile (and of course, if your name is Tango Charlie).

Okay, so we are going to modify our SP 2010 Master Page and place some lines of code in the <head> section.

Step 1: You may download the .js file and insert a script reference to the SPServices library within your <head>…</head> tags:

<script type="text/javascript" src="/_layouts/scripts/jquery-1.4.2.js"></script>
<script type="text/javascript" src="/_layouts/scripts/jquery.SPServices-0.7.2.min.js"></script>

Pre-requisites:

a) You should make sure that you have a JQuery script references before referring to SPServices.

b) Refer the SPServices on CodePlex as the JQuery version requirements are strict for what version of SPServices you are using.

Step 2: Place the below script anywhere within your <head>…</head> tags as long as they follow the tags mentioned in Step 1.

<!-- Format the Welcome Menu -->
<script language="javascript" type="text/javascript">
        $(function() {
            var userFirstName = $().SPServices.SPGetCurrentUser({
                fieldName: "FirstName",
                debug: true
            });

            var userLastName = $().SPServices.SPGetCurrentUser({
                fieldName: "LastName",
                debug: true
            });
           
            var displaySection = $('span.ms-welcomeMenu').children('a.ms-menu-a').children('span');
            var textToShow = 'Welcome ' + userFirstName + ' ' + userLastName;
            // Set the text back to the Welcome Menu
            displaySection.text(textToShow);

          });

</script>

And that’s it. You have your name displayed with the “Welcome” prefix.

Try playing with the combinations/permutations of [fieldName: "FirstName"] and [fieldName: "LastName"] to get different text to display. Good Luck.

Friday, November 23, 2012

No item exists at http://servername/sitename/pagename.aspx?ID=88. It may have been deleted or renamed by another user

So, We have upgraded our MOSS 2007 to SharePoint 2010. One of the other challenges that we have been facing after this Database Attach process is that the links having query string parameters have started to fail (Surprisingly…..this error appears randomly on different links). The error it generates is : “No item exists at http://servername/sitename/pagename.aspx?ID=88. It may have been deleted or renamed by another user”

Well, as soon as I searched for this error, I got to see this Microsoft Support article having a resolution to this issue. You can find it here: http://support.microsoft.com/kb/972225

According to Microsoft, this is a know issue and this is what they suggest:

Change the query string parameter from ID to CustomID. Then change the details page from QueryString(ID) to QueryString(CustomID). Once this is done the page will display with no errors.”

So, when I changed my link URLs to “http://servername/sitename/pagename.aspx?BID=88” everything worked fine.

But here are a couple of questions that has kept me wondering, and I am still looking for an answer to them:

#1. My 2007 sites work perfectly with this piece of code. So does that mean, this issue has been introduced in SP 2010?

#2. Even in 2010, not all the links with query string parameters (?ID=nn) are failing. Some seem to work. This seems very weird. Any answers to this?

Friday, November 2, 2012

Setting up SharePoint 2013 Development Environment - Part 5

This is the Part 5 of the series for setting up a development environment for SP 2013 on a VM. As we know, this is the latest release for the new Microsoft stack of products that involves Windows Server 2012, SQL Server 2012, Visual Studio 2012 and SharePoint Server 2013 (or SP 15).
In this part 5, we will focus on the configuration of the PowerPivot for SharePoint 2013 using the PowerPivot for SharePoint 2013 Configuration tool.

Let’s start the PowerPivot for SharePoint 2013 Configuration tool.

clip_image002

Bummer!!! – We have an Error on the very first step.

image

Why 14.0.0.0?? Please note that there are 2 versions of this tool as described here.

So we incorrectly ran the PowerPivot for SharePoint Configuration tool. (Note there is no 2013 here).

Let’s try again and run the correct version this time, PowerPivot for SharePoint 2013 Configuration tool.

Nope, still seeing the same error!

Okay, let us try to see the Configuration Tool screen right behind this error message:

image

Can this be a pointer to an incorrect version of SQL Server? Let’s verify this with the standard MSDN post here.

Here’s the image for a quick reference:

image

Hmm…. That looks weird. I have “2100.1”, whereas MSDN says “2853.0”.

Okay, got it. I actually forgot to install the SQL SP1 CTP4 feature. Let’s go back and install it now from location: (www.microsoft.com/en-us/download/details.aspx?id=34700).

image

Once the install completes, start PowerPivot for SP 2013 Configuration Tool again.

You should be able to see this screen:

image

Click Ok. Next provide the appropriate Pass-Phrase and the PowerPivot Server for Excel Services Name:

image

See here if you want to learn more about this screen.

Then Click Validate. If you provided all correct information you’ll see the validation success message, Click OK. (Else follow the details on the error screen to fix the errors)

image

Click Run; click “Yes”, if you get a warning message:

image

This should start the process:

image

Once done, this completes the configuration process and it also completes this 5 Part series that I started almost a couple of weeks back.

Now you may go back to the creation of the SP Site Collection and start exploring the whole new world!!

Wednesday, October 31, 2012

Setting up SharePoint 2013 Development Environment - Part 4

This is the Part 4 of the series for setting up a development environment for SP 2013 on a VM. As we know, this is the latest release for the new Microsoft stack of products that involves Windows Server 2012, SQL Server 2012, Visual Studio 2012 and SharePoint Server 2013 (or SP 15).
In this part 4, we will focus on Installing SharePoint Server 2013 (popularly known as SP 15).
- Start the SharePoint installation.
image
image
After restarting and initial install of the preparation tool:
clip_image002
The server restarts again to complete the pre-requisites install:
clip_image003
Next, start the SP 2013 installation again and click the next link “Install SharePoint Server”.
If you see this error screen, you must restart the server before proceeding.
clip_image005
Once restarted, start the setup again, provide the keys, and accept the License Agreement.
On the “Choose a file location” screen, note the new path that SP 2013 is going to install itself. (I was wondering why I didn’t get to choose from the Install type: “Complete” or “Stand Alone”?).
clip_image007
Click “Install Now”. Once you see the completion screen, let the check-box be selected and click Close.
clip_image009
This should start the Configuration Wizard.
Click Next. Click “Yes” on the Services restart pop-up.
clip_image010
clip_image012
Click Next. Verify the Wizard Summary and click Next. The setup takes a while before you see the completion wizard step. Click Finish. This brings up the next screen, click “Start the wizard”:
image
Choose the “SPConfigAcct” service account created earlier from the “Use existing managed account” drop down, leave all the services selected as-is and click Next.
image
image
IMPORTANT: As discussed earlier, please do not create a Site Collection at this point of time. We need to first get back to the PowerPivot configuration tools and complete the remaining steps.
So, hit “SKIP” now to come to see this screen:
image
This completes the SharePoint Server 2013 installation.
At this point of time, let’s take another snapshot of the VM.
We will now move to the Part 5 of this series, where we will get back to finishing the configurations of PowerPivot for SharePoint Integration modes, as discussed in Part 3.

Wednesday, October 24, 2012

Setting up SharePoint 2013 Development Environment - Part 3

This is the Part 3 of the series for setting up a development environment for SP 2013 on a VM. As we know, this is the latest release for the new Microsoft stack of products that involves Windows Server 2012, SQL Server 2012, Visual Studio 2012 and SharePoint Server 2013 (or SP 15).

In this part 3, we will focus on Installing SSAS with Tabular and PowerPivot for SharePoint Integration modes.

So let’s fire up the SQL install once more and continue exactly as we did earlier till you reach the step to choose the Installation Type.

Choose to perform a New Install of SQL Server 2012.

clip_image002

Click Next, Next till you see the Setup Role screen. Select the SQL Server Feature Install.

clip_image004

In the feature Selection screen, choose the Analysis Services feature and click on Next.

clip_image006

Specify a name for your SSAS Tabular instance and click on Next.

clip_image008

Define SQL Server Analysis Services service account and click on Next.

clip_image010

Choose the Tabular Mode option, add click [Add Current User] to add an administrative user account, and click on Next till you hit the install button on the last step of the wizard screen.

You should see a success message after a while:

clip_image012

We are now going to install SSAS for PowerPivot for SharePoint.

Click through the same steps as we did in the previous method for “Tabular” mode till you see the Setup Role screen.

On this screen, select the SQL Server PowerPivot for SharePoint Installation option. Also uncheck the option for “Add SQL Server Relational Engine Services to this installation”, as we already did that earlier with the Tabular mode.

clip_image014

Click Next. The feature selection screen must already have the features selected for you.

clip_image016

Click Next.

Note that the Named Instance has already been set for you “POWERPIVOT”, so let’s name the instance ID, say “POWERPIVOT” to keep things simple.

clip_image018

Specify SQL Server Analysis Services service account and click on Next.

clip_image020

Add the Current User.

Continue with the installation process, and wait until the installation completes successfully.

clip_image022

Okay, now we need to install the following SQL Server 2012 SP1 CTP4:

(www.microsoft.com/en-us/download/details.aspx?id=34700)

This is required, as this gets you the Configuration Tool needed to configure the PowerPivot for SP 2013 integration mode.

So go ahead, download and Install the CTP4.

IMPORTANT: DO NOT run “PowerPivot for SP 2013 Configuration Tool” at this time. We will come back to this once we are done with the “SP 2013 Setup, Install and Configuration Wizard” process.