SharePoint Experts, Information Architects, Expert Witness

We provide consulting in a broad array of business and technology from architecture to design to deployment of global systems with a focus on surfacing data in the enterprise. Specialists in Microsoft, we are a premier provider of SharePoint Expertise (including 2016 and Office 365). We also provide Expert Witness/Legal Expert in eDiscovery, source discovery, patent infringement, piracy and more! We also have established SICG DLDS s.a. - our counterpart in Costa Rica that specializes in water systems (http://www.crwatersolutions.com) - Contact me direct: david_sterling@sterling-consulting.com or call 704-873-8846 x704.

Search This Blog

Loading...

Friday, January 6, 2017

Restoring SharePoint site default groups

Occasionally, a default group for a SharePoint site collection can get deleted. When it does, it means that non-owners cannot invite others to the site and you might receive an error in places:

 “The groups required to manage users for your site are missing

You'll most likely see this under Access request settings (Site Settings > Site Permissions > Access request settings in the ribbon).

Getting the default groups back is not very obvious but as it turns out, it is quite simple. Simply open the site in question and change the URL to:

<site url>/_layouts/permsetup.aspx

This will open up the People and Groups page with the default groups:



Click the OK Button and the groups will be restored!

Saturday, December 17, 2016

Creating Site Templates in SharePoint 2016 and SharePoint Online (including Publishing sites!)

Like many of you, I was dismayed to find that SharePoint Online can't be used to create templates and have always not liked being able to save a Publishing Site as a template.

In SPO, Microsoft says that since they automatically turn on Publishing that it cannot be done and that turning off publishing (which has to be done for the entire site collection) won't fix it because there are other features that are enabled. If you test it out, you'll find this to be the case.

In SP on premise, Microsoft disables the option to save publishing sites, however use either Workaround below and it does!

WARNING 1: If you try to save a site with content, most commonly a publishing site, it will FAIL if there is too much content. Best to save with a near-empty site!

WARNING 2: When you save a publishing site as a template using Metadata Navigation, the Navigation will be screwed up when you create a site from the template. It has to be reset to fix it through Site Settings > Navigation.

So - two ways to set the property to enable saving as a template:

Workaround 1:
http://blogs.msdn.microsoft.com/how24/2013/06/13/save-sharepoint-2013-publishing-site-as-a-template/

* THIS works in the on premise version.

Another way to get around it is through SharePoint Designer:

Workaround 2:
http://community.bamboosolutions.com/blogs/sharepoint-2013/archive/2014/05/12/how-to-enable-save-site-as-template-in-sharepoint-2013-using-sharepoint-designer.aspx

* THIS works in the online version.

ANOTHER way to set the property in SharePoint Online is through the SharePoint Online Management Shell (setting the Property Bag):

$SiteUrl = "https://somesite.sharepoint.com/"
$context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl)
$sUserName = "someone@somedom.com"
# Prompt for Password:
$sPassword = Read-Host -Prompt "Enter your password: " -AsSecureString
# Set the Site URL:
$spoCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($sUsername, $sPassword) 
$context.Credentials = $spoCredentials
$web = $context.Site.RootWeb
$web.AllProperties["SaveSiteAsTemplateEnabled"] = "true"
$web.Update()

* This doesn't always work on Publishing Sites so I'd suggest using the Designer method.

However, I found that these solutions don't always work, particularly in SharePoint Online. There are hidden features (i.e. can't be turned on through the UI) that prevent the template from working in other site collections. I did however finally find a way to get it to work using the SharePoint Online Management Shell. By running the following script on the site collection, it enables all of the features you need to get the templates to work.

Once this script is run, you can go to the site you want to make a template of and simply alter the URL - so:

https://somesite.sharepoint.com/sitename

Enter:

https://somesite.sharepoint.com/sitename/_layouts/15/savetmpl.aspx

Kudos to the following post:
https://gallery.technet.microsoft.com/office/How-to-enable-a-SharePoint-5bb614c7

Here's the script - simply set the account name and the URL path to the site collection accordingly.

===========================================================
NOTE: You have to get a copy of the DLL's necessary for the following lines:

Add-Type -Path "C:\temp\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\temp\Microsoft.SharePoint.Client.Runtime.dll"

If you have an on-premise copy, you get get them from the ISAPI folder:
c:\program files\common files\microsoft shared\web server extensions\15\ISAPI

OR download them from here:

https://www.microsoft.com/en-us/download/details.aspx?id=35585
===========================================================

To use a template, you have to enable these features at the TOP LEVEL site collection; that is, say you create a template in Collection 1, you have to enable these features to use the template in Collection 2. 

$host.Runspace.ThreadOptions = "ReuseThread"
#Definition of the function that allows to enable a SPO Feature
function Enable-SPOFeature
{
param ($sSiteColUrl,$sUserName,$sPassword,$sFeatureGuid) 
try
{
#Adding the Client OM Assemblies 
Add-Type -Path "C:\temp\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\temp\Microsoft.SharePoint.Client.Runtime.dll"
#SPO Client Object Model Context 
$spoCtx = New-Object Microsoft.SharePoint.Client.ClientContext($sSiteColUrl) 
$spoCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($sUsername, $sPassword) 
$spoCtx.Credentials = $spoCredentials
Write-Host "----------------------------------------------------------------------------" -foregroundcolor Green
Write-Host "Enabling the Feature with GUID $sFeatureGuid !!" -ForegroundColor Green
Write-Host "----------------------------------------------------------------------------" -foregroundcolor Green
$guiFeatureGuid = [System.Guid] $sFeatureGuid
$spoSite=$spoCtx.site 
$spoSite.Features.Add($sFeatureGuid, $true, [Microsoft.SharePoint.Client.FeatureDefinitionScope]::None) 
$spoCtx.ExecuteQuery() 
$spoCtx.Dispose() 
}
catch [System.Exception]
{
write-host -f red $_.Exception.ToString() 
}
}

# Required Parameters

# Modify Username above with your administrator credentials:
$sUserName = "someone@somedom.com"

# Prompt for Password:
$sPassword = Read-Host -Prompt "Enter your password: " -AsSecureString


$sSiteColUrl = "https://somesite.sharepoint.com"
# Modify feature ID as needed (this one is MobileExcelWebAccess needed to use templates):
$sFeatureGuid= "e995e28b-9ba8-4668-9933-cf5c146d7a9f"
# Enable it (MobileExcelWebAccess): 
Enable-SPOFeature -sSiteColUrl $sSiteColUrl -sUserName $sUserName -sPassword $sPassword -sFeatureGuid $sFeatureGuid 
# Library and Folder Based Retention - LocationBasedPolicy Feature
$sFeatureGuid= "063c26fa-3ccc-4180-8a84-b6f98e991df3"
# Enable it (LocationBasedPolicy): 
Enable-SPOFeature -sSiteColUrl $sSiteColUrl -sUserName $sUserName -sPassword $sPassword -sFeatureGuid $sFeatureGuid 
# Site Policy - ProjectBasedPolicy Feature
$sFeatureGuid= "2fcd5f8a-26b7-4a6a-9755-918566dba90a"
# Enable it (ProjectBasedPolicy): 
Enable-SPOFeature -sSiteColUrl $sSiteColUrl -sUserName $sUserName -sPassword $sPassword -sFeatureGuid $sFeatureGuid 
# Three-state workflow - IssueTrackingWorkflow Feature:
$sFeatureGuid= "fde5d850-671e-4143-950a-87b473922dc7"
# Enable it (IssueTrackingWorkflow): 
Enable-SPOFeature -sSiteColUrl $sSiteColUrl -sUserName $sUserName -sPassword $sPassword -sFeatureGuid $sFeatureGuid 
# SitePageResources Feature
$sFeatureGuid= "ff77ac56-88d0-4147-b865-e84f5f03fc42"
# Enable it (SitePageResources): 
Enable-SPOFeature -sSiteColUrl $sSiteColUrl -sUserName $sUserName -sPassword $sPassword -sFeatureGuid $sFeatureGuid 

Opening Documents in a New Window (SharePoint Online 2013/2016)

Ever wanted SharePoint Online Documents to open in a new window?

As many have needed to, some want to be able to open documents from SharePoint Online in a new window instead of the same window - useful when you have to edit a number of documents at the same time.

I looked for several solutions - most didn't work however, I found one that did after making a few tweaks.

This minor modification enables you to set it on a library by library basis or you can save the library as a template once the script is put in a set place. Once you add it to the library view page, it applies TO ALL Views in the library.

NOTE: This does make a change to the way a library works - when you add a content editor web part to a library view, it HIDES the Files/Library tabs! Thanks for the bug but there is a work around.

To get started, here's the script - taken & modified from
http://sharepoint.stackexchange.com/questions/116769/opening-a-document-in-a-sharepoint-2013-document-library-in-a-new-tab-using-cod - the original script from there didn't work for me so I modified it for Office 365/SharePoint Online:

<script type="text/javascript">
// OPEN DOCUMENTS IN NEW WINDOW SCRIPT
//
// Create a namespace for the functions so we don't collide with anything else:
//
var customFunctions = customFunctions || {};
//
// Create a function for customizing the Field Rendering of our display fields:
//
customFunctions.CustomizeOpenFieldInNewTab = function () {
    var fieldJsLinkOverride = {};
    fieldJsLinkOverride.Templates = {};

    fieldJsLinkOverride.Templates.Fields =
    {
        // Make sure the Your field view gets hooked up to the method defined below
        'LinkFilename': { 'View': customFunctions.GetDocumentsField },
    };
    //
    // Register the rendering template
    //   SPClientTemplates.TemplateManager.RegisterTemplateOverrides(fieldJsLinkOverride);
};
//
// Create a function for setting the proper URL to open in new window:
//
customFunctions.GetDocumentsField = function (ctx) {
    var myColumn = ctx.CurrentItem.ServerRedirectedEmbedUrl;
    var myFileName = ctx.CurrentItem.FileLeafRef;
    var editFileLink = myColumn.replace("interactivepreview", "default");
    var myIndex = myFileName.lastIndexOf(".");
    myFileName = myFileName.substring(0, myIndex);
    //
    // Change the default URL to use Open in New Window:
    //
    if (myColumn) {
        return "<a href='" + editFileLink + "' target='_blank'>" + myFileName + "</a>";
    }
    return ctx.CurrentItem.ServerRedirectedEmbedUrl;
};
//
// Call the function:
//
customFunctions.CustomizeOpenFieldInNewTab();
</script>

First, save this script to a text file - i.e. OpenInNewWindowForView.txt.

Step 1 - Create a new document library that everyone has access to - I like to call it 'Scripts' so I know what it is for. Everyone must have read access to this or it will 'break' the library view.

Step 2 - Upload the OpenInNewWindowForView.txt file into the library; once loaded, click on the file to open it - it will open in the browser window to display the text. Copy and save the URL from the browser.

Step 3 - Open the library you want to modify and select the "All Documents" view (actually modifying any view will modify it for all views).

Step 4 - Edit the page - add a Content Editor web part to the top of the page (above the view of documents).

Step 5 - Edit the Content Editor web part and in the "Content Link" of the properties, paste in the URL path you saved in Step 2 and click OK to save.

Step 6 - Stop Editing the page and you are done!

Once the script has been added, if desired, you can save the library as a template but be sure that the script is accessible from any location otherwise it won't work!

NOTE: CHANGE IN BEHAVIOR! Once the Content Editor web part has been added, it 'breaks' the library in that the "Files" and "Library" tab disappear (!). This is easily overcome however:

1) To get to the settings, you can use the Site Contents Page - mouse over the library and click the ellipsis (...) to get to Settings.

2) Simply select any document or folder in the list and the "Files" and "Library" tabs re-appear.

Tuesday, November 22, 2016

SharePoint Online Library Template Error The SPListItem being updated was not retrieved with all taxonomy fields

So you have multiple site collections in SharePoint Online and decide you want to use a List or Library template that happens to have a Taxonomy (metadata) Column that you want to add to all of your site collections.

You dutifully upload it to the List Template Gallery in a site collection and create a new one. All seems well - views, etc. all look good. But then you go to add an item and you get this:

The SPListItem being updated was not retrieved with all taxonomy fields


Ah....must be a delay or something right? Wrong. When you save a template it embeds the Site Collection ID into the template. This 'breaks' the connection with the taxonomy field because it belongs to the original site. Even though the field is defined in the content hub, the field definition is broken.

Your only choice - recreate the list/library template in each site collection. A pure pain!


Wednesday, November 16, 2016

HrcClientLauncher failure - Microsoft Office 365 Support Assistant 3.5

If working with Office 365/SharePoint Online and attempting to troubleshoot something, for example Active Directory Sync you might get an issue when trying to run the "HrcClientLauncher.exe", aka the Microsoft Office 365 Support Assistant.

The symptom is that clicking it does nothing - you get a quick flash and nothing else. If you try to click on the exe and run (even and Administrator), you get the same thing.

Problem is simple - you MUST use Internet Explorer to run this - the HrcClientLauncher program is simply trying to start a download of the Support Assistant and it will not work in other browsers.

Hope that helps someone!

Friday, October 28, 2016

SharePoint 2013/2016/Online (Office 365) Importing Term Set Errors

I've come across a few common issues with importing term sets so I figured I'd share some of them here for others.

The most common error is:

Not all terms were imported successfully. Please see the server log for more information

Causes:

1) You have a comma (or the delimiter you used) somewhere in your terms
2) You have blank lines in your import file
3) You have a special character in a term, for example an accented word

BTW - the "server log" is the SharePoint server log (c:\program files\common files\microsoft shared\web server extensions\15\logs). However, you might not find much of the information useful.

The best way to figure out what the problem is is to export the term set via PowerShell and compare it to the original import. I'd recommend Stuart Roberts script which seems to work nicely and doesn't export ALL of them, just a group:

http://www.stuartroberts.net/index.php/2012/05/28/export-metadata-terms/

The one from Microsoft:

https://gallery.technet.microsoft.com/office/PowerShell-for-SharePoint-a838b5d0

BTW - for the Microsoft version, you need to do it from the SharePoint Management Shell or add the following snippet to the top of the file (under the Site Url/Output folder variables):

===================================
function Add-Snapin {
if ((Get-PSSnapin -Name Microsoft.Sharepoint.Powershell -ErrorAction SilentlyContinue) -eq $null) {
$global:SPSnapinAdded = $true
Write-Host "Adding Sharepoint module to PowerShell" -NoNewline
Add-PSSnapin Microsoft.Sharepoint.Powershell -ErrorAction Stop
Write-Host " - Done."
}

Write-Host "Adding Microsoft.Sharepoint assembly" -NoNewline
# Add-Type -AssemblyName "Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
# Disable the above line and enable the line below for SharePoint 2013
Add-Type -AssemblyName "Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
Write-Host " - Done."
}
Add-Snapin

===================================
Snip courtesy of Stuart Roberts.

Another issue is when you try to import a large term set (> 2000 items) and after a period of time, SharePoint displays an error (Sorry, something went wrong):


For some reason, you cannot import more than 2000 items even though you can have up to 30,000 in one term set. The problem here is doing the import via the UI (Central Administration). It appears that either the page or the session times out when it hits that limit.

The only way to do a large term set is using PowerShell. This script is found here:

https://gallery.technet.microsoft.com/office/PowerShell-script-to-241e2d4d

WARNING: The example shown in the script is NOT correct - the script shows:

##For example : Use the following command to import Languages CSV to Default Site collection group of the site
##ImportTermSet "http://www.contoso.com" "Languages" ".\ImportTermSets\Languages.csv" "" $false

What's missing is the Term Set Group, so it should look something like this:

##ImportTermSet "http://www.contoso.com" "Languages" ".\ImportTermSets\Languages.csv" "MyGroup" $false










Saturday, October 22, 2016

SharePoint Term Set Import doesn't import description and Using Term Set Other Labels

SharePoint Term Set Import Description Doesn't Load

So importing the other day, was reminded of a problem from a while ago - it is clearly a bug and a pain so added this so others might be wary.

When using Term Sets, it can be very handy to import them via CSV - easily laid out in Excel and in fact, they give you the file format to use.

What they don't tell you is that the import is shaky:
1) I've had instances where some terms are not imported and no error reported.
2) There's no way to add 'other labels' (see below), something I love to use.
3) As some of you probably know, it often reports an import error even though all of the terms are created.

At any rate - back to the bug. When defining a term, I always put a full description; turns out this works fine as long as you do not have more than one term! If you have a 2nd term, the description is NOT imported! So for example:


The description (the State name) will not be included. Your only alternative is to decide what you want to type in by hand. There is no way to do a 'partial' import or update.

What a pain!

------

Using Term Set Other Labels

Many of my clients are not familiar with using the term set 'other labels' (a lot of SharePoint Consultants too!). Other labels are a way to allow users enter multiple names as they might know a particular term, but store only the true Term.

For example, assume you have a department called Information Systems Management, it has a department number of 1201 and most everyone calls it simply IT. For search purposes, etc. you decide you want the term 'Information Systems Management' used but some like to use the number and some like to use IT - you'd simply add them as follows:


Now when uploading/entering the field, the user can use any of them - by name:


By number:



By acronym: