Tag Archives: SMAT

SMAT – Content Database Query

While reviewing the SharePoint Migration Assessment Tool (SMAT) I noticed the high performance data gathering. Running on a farm with thousands of sites the collection of data ran quickly.

Looking more closely we can see how Content Database SQL queries are used to collect a list of compatibility issues and populate the report. These are much faster than Server Object Model (SOM) front end techniques for collecting data.

Below are sample SQL queries that SMAT uses to check SharePoint content database and identify customizations that might not be compatible with Office 365.

Cheers!

shades_smile

SMAT Download

SMAT Report Categories

Microsoft.SharePoint.Migration.Scan.Scanner

image

AlertsScanner

SELECT Distinct(WebId), SiteId 
FROM [dbo].[ImmedSubscriptions] with (nolock) 
INNER JOIN [dbo].[AllSites] with (nolock) 
ON AllSites.Id = ImmedSubscriptions.SiteId 
WHERE AllSites.BitFlags & 1 = 0 AND AllSites.BitFlags & 2 = 0 
Union 
SELECT Distinct(WebId), SiteId 
FROM [dbo].[SchedSubscriptions] with (nolock) 
INNER JOIN [dbo].[AllSites] with (nolock) 
ON AllSites.Id = SchedSubscriptions.SiteId 
WHERE AllSites.BitFlags & 1 = 0 AND AllSites.BitFlags & 2 = 0 
ORDER BY SiteId

AppsScanner

SELECT Distinct UserInfo.tp_Login AS OwnerLogin,  
UserInfo.tp_Title AS OwnerTitle,  
AppPackages.Title AS AppTitle,  
CASE      WHEN AppSourceInfo.AppSource = 1
           THEN 'Marketplace'
		   WHEN AppSourceInfo.AppSource = 2
           THEN 'CorporateCatalog'
		   WHEN AppSourceInfo.AppSource = 3
		   THEN 'DeveloperSite'
		   WHEN AppSourceInfo.AppSource = 4
		   THEN 'ObjectModel'
		   WHEN AppSourceInfo.AppSource = 5
		   THEN 'RemoteObjectModel'  
END AS AppSource, 
AppPackages.SiteId, 
AppInstallations.Id AS AppId, 
AppInstallations.WebId, 
AppInstallations.LaunchUrl, 
AppInstallations.CreationTime, 
AppInstallations.RemoteAppUrl, 
AppInstallations.SettingsPageUrl, 
Webs.Title AS WebSiteTitle, 
Webs.FullUrl AS WebURL, 
CASE WHEN (LEN(Docs.DirName) > 0 AND LEN(Docs.LeafName) > 0)
       THEN Docs.DirName+'/'+ Docs.LeafName
	   WHEN (LEN(Docs.DirName) = 0 AND LEN(Docs.LeafName) > 0)
	   THEN '/' + Docs.LeafName
	   ELSE 'No App Part Placed'  
END AS PageURL 
FROM  dbo.AppPackages WITH(NOLOCK) 
INNER JOIN dbo.AppInstallations WITH(NOLOCK)
      ON AppPackages.SiteId = AppInstallations.SiteId 
INNER JOIN dbo.AppSourceInfo WITH (NOLOCK)
      ON AppPackages.PackageFingerprint = AppSourceInfo.PackageFingerprint
	  AND AppInstallations.SourceInfoId = AppSourceInfo.SourceInfoId
	  AND AppInstallations.SiteId = AppSourceInfo.SiteId 
INNER JOIN dbo.Sites WITH (NOLOCK)
      ON AppInstallations.SiteId = Sites.Id 
INNER JOIN dbo.Webs WITH (NOLOCK)
      ON Webs.Id = AppInstallations.WebId 
INNER JOIN dbo.UserInfo WITH (NOLOCK)
      ON UserInfo.tp_SiteID= Sites.Id
	  AND UserInfo.tp_ID = Sites.OwnerID 
Left Outer Join AllWebParts With (NoLock)
      ON AllWebParts.tp_SolutionId = AppPackages.ProductId
	  AND AllWebParts.tp_SiteId = AppPackages.SiteId 
Left Outer Join Docs WITH (NoLock)
      ON Docs.Id = AllWebParts.tp_PageUrlID
	  AND Docs.SiteId = AppInstallations.SiteId
	  AND Docs.WebId = AppInstallations.WebId 
WHERE (UserInfo.tp_SiteAdmin = 1
      AND Sites.Deleted= 0
      AND Webs.DeleteTransactionId= 0x)
      AND Sites.BitFlags & 1 = 0
	  AND Sites.BitFlags & 2 = 0 

BrowserFileHandlingScanner

SELECT AD.SiteId, AD.DirName + N'/' + AD.LeafName as FilePath, AD.TimeCreated, AD.TimeLastModified, (UI.tp_Title + '['+UI.tp_Login+']') as Editor 
FROM AllDocs AS AD with (nolock) 
INNER JOIN AllSites as Sites with (nolock)
      ON Sites.Id = AD.SiteId 
INNER JOIN AllUserData as AUD with (nolock)
      ON (AD.DocLibRowID = AUD.tp_ID
      and Sites.Id = AUD.tp_SiteID      and AD.ListID = AUD.tp_ListId) 
INNER JOIN UserInfo as UI with (nolock)
      ON (AUD.tp_Editor = UI.tp_ID
      AND Sites.Id = UI.tp_SiteID)	  
WHERE (AD.LeafName LIKE '%.htm' or AD.LeafName LIKE '%.html')
      AND AD.SetupPath IS NULL
      AND AD.ListId IS NOT NULL
      AND AD.IsCurrentVersion = 1
      AND LEN(AD.DeleteTransactionID) <= 0
      AND Sites.BitFlags & 1 = 0
      AND Sites.BitFlags & 2 = 0
      AND AUD.tp_IsCurrent = 1 
ORDER BY SiteId 

CheckedOutFilesScanner

SELECT SiteId, '/' + DirName + '/' + LeafName as FilePath 
FROM [dbo].[AllDocs] AS Docs with (NOLOCK) 
INNER JOIN [dbo].[AllSites] with (NOLOCK) 
ON AllSites.Id = Docs.SiteId 
WHERE CheckoutUserId is not null AND CheckoutExpires is null AND AllSites.BitFlags & 1 = 0 AND AllSites.BitFlags & 2 = 0 
GROUP BY SiteId, '/' + DirName + '/' + LeafName 

CustomizedPagesScanner

 SELECT SiteId,
          CASE WHEN Len(DirName) = 0
		  THEN '/' + LeafName
		  ELSE '/' + DirName + '/' + LeafName
          END as FilePath 
FROM [dbo].[AllDocs] with (NoLock) 
INNER JOIN [dbo].[AllSites] with (nolock)
      ON AllSites.Id = AllDocs.SiteId 
WHERE DeleteTransactionId = 0x
      AND Level = 1
      AND SetupPath IS NOT NULL
      AND (DocFlags & 64) <> 0
      AND AllSites.BitFlags & 1 = 0
      AND AllSites.BitFlags & 2 = 0 
Group By SiteId, DirName, LeafName 
Order By SiteId, DirName, LeafName 

CustomProfilePropertyMappingScanner

SELECT Count(PV.[PropertyID]) AS CountPropertyUsed, PL.PropertyName 
FROM {0}.[UserProfileValue] AS PV with(nolock) 
INNER JOIN {0}.[PropertyList] AS PL with(nolock)
      ON PV.PropertyID = PL.PropertyID 
GROUP BY PV.PropertyID, PropertyName
     SELECT PropList.PropertyName AS PropertyName,  
PropList.[Length] AS PropertyLength,  
PropMap.DCAttribute AS PropertyMapping                                                                 
FROM {1}.[ADImportPropertyMapping] AS PropMap WITH (NOLOCK) 
INNER JOIN {1}.[PropertyList] AS PropList WITH (NOLOCK) 
ON PropMap.PropertyID = PropList.PropertyID 
INNER JOIN [dbo].[ADImportDCMapping] AS DCMapping WITH (NOLOCK) 
ON DCMapping.DCId = propmap.DCId 
WHERE DCMapping.ConnectionName = '{0}' 
GROUP BY DCMapping.DCName, PropMap.DCAttribute, PropList.PropertyName, PropList.[Length] 

EmailEnabledListsScanner

SELECT [tp_SiteId] as SiteID,  
[tp_WebId] as WebID, 
[tp_ID] as ListId 
FROM [AllLists] with (nolock) 
INNER JOIN [AllSites] with (nolock) 
ON AllLists.tp_SiteId = AllSites.Id 
WHERE LEN(tp_EmailAlias) > 0 
AND AllLists.tp_DeleteTransactionId = 0x 
AND AllSites.BitFlags & 1 = 0 
AND AllSites.BitFlags & 2 = 0 
GROUP BY tp_SiteId, tp_WebId, tp_ID

EmailEnabledListsScanner2010

SELECT [SiteId] as SiteID,  
[tp_WebId] as WebID, 
[tp_ID] as ListId 
FROM [AllLists] with (nolock) 
INNER JOIN AllWebs  with (nolock)
ON AllWebs.Id = alllists.tp_webid
INNER JOIN [AllSites] with (nolock) 
ON AllWebs.SiteId = AllSites.Id 
WHERE LEN(tp_EmailAlias) > 0 
AND AllLists.tp_DeleteTransactionId = 0x 
AND AllSites.BitFlags & 1 = 0 
AND AllSites.BitFlags & 2 = 0 
GROUP BY SiteId, tp_WebId, tp_ID

FileVersionsScanner

SELECT adv.SiteId, Count(adv.Id) as VersionCount, DirName + N'/' + LeafName as FilePath 
FROM [dbo].[AllDocVersions] as adv with (nolock) 
INNER JOIN [dbo].[AllDocs] as ad with (nolock) 
ON ad.Id = adv.Id 
INNER JOIN [dbo].[AllSites] with (nolock) 
ON AllSites.ID = ad.SiteId 
WHERE AllSites.BitFlags & 1 = 0  
AND AllSites.BitFlags & 2 = 0 
Group By adv.SiteId, adv.Id, DirName, LeafName 
Having Count(adv.Id) > {0}

InfoPathScanner

SELECT SiteId, WebId, DirName, LeafName, AllDocs.Id as DocId 
FROM AllDocs (nolock) 
INNER JOIN AllSites with (nolock) 
ON AllSites.Id = AllDocs.SiteId 
WHERE Extension = 'xsn' 
AND DeleteTransactionId = 0x 
AND HasStream = 1 
AND AllSites.BitFlags & 1 = 0 
AND AllSites.BitFlags & 2 = 0 
ORDER BY SiteId, WebId, DirName 

IRMEnabledLibraryScanner

 SELECT lists.SiteId, lists.WebId, lists.Title as ListTitle 
FROM (SELECT tp_Flags & 0x8000000000 as IRMEnabled,
             tp_SiteId as SiteID,
             tp_WebId as WebID,
             tp_Title as Title
			 FROM [AllLists] with (nolock)) lists 
INNER JOIN [AllSites] with (nolock)
      ON lists.SiteId = AllSites.Id 
WHERE lists.IRMEnabled <> 0
      AND AllSites.BitFlags & 1 = 0
      AND AllSites.BitFlags & 2 = 0 
ORDER BY SiteId 

LargeExcelFilesScanner

SELECT AD.SiteId, AD.DirName + N'/' + AD.LeafName as FilePath, AD.Size / (1024 * 1024) as FileSizeInMB 
FROM AllDocs AS AD with(nolock) 
INNER JOIN AllSites with (nolock)
      ON AllSites.Id = AD.SiteId 
WHERE AD.LeafName LIKE '%.xlsx'
      AND AD.Size / (1024 * 1024) > {0}
      AND BitFlags &1 = 0
      AND BitFlags &2 = 0
      AND AD.IsCurrentVersion = 1
      AND LEN(AD.DeleteTransactionID) <= 0 
Group By AD.SiteId, AD.DirName, AD.LeafName, AD.Size 

LargeListsScanner

SELECT AllLists.tp_SiteId as SiteId, AllLists.tp_WebId as WebId, AllListsAux.ListId 
FROM [AllListsAux] with (nolock) 
INNER JOIN [AllLists] with (nolock)
      ON AllListsAux.ListID = AllLists.tp_ID 
INNER JOIN [AllSites] with (nolock)
      ON AllListsAux.SiteId = AllSites.Id 
WHERE AllListsAux.ItemCount > {0}
      AND AllLists.tp_DeleteTransactionId = 0x
      AND AllSites.BitFlags & 1 = 0
      AND AllSites.BitFlags & 2 = 0 
GROUP BY tp_SiteId, tp_WebId, ListId 

LargeListsScanner2010

SELECT [AllWebs].SiteId as SiteId, AllLists.tp_WebId as WebId, AllListsAux.ListId FROM [AllListsAux] with (nolock) INNER JOIN [AllLists] with (nolock) ON AllListsAux.ListID = AllLists.tp_ID INNER JOIN [AllWebs] with (nolock) ON AllLists.tp_WebId = [AllWebs].Id INNER JOIN [AllSites] with (nolock) ON [AllWebs].SiteId = [AllSites].Id WHERE AllListsAux.ItemCount > 5000 AND AllLists.tp_DeleteTransactionId = 0x AND AllSites.BitFlags & 1 = 0 AND AllSites.BitFlags & 2 = 0 GROUP BY SiteId, tp_WebId, ListId

LargeSitesScanner

SELECT [Id] as SiteId, [DiskUsed]/Power(1024,3) as SizeInGB 
FROM [dbo].[AllSites] with (nolock) 
Where [DiskUsed]/Power(1024,3) > {0}
      AND BitFlags & 1 = 0
      AND BitFlags & 2 = 0

LockedSitesScanner

SELECT Id  
FROM AllSites with (nolock) 
WHERE BitFlags & 1 > 0  
AND BitFlags & 2 > 0 

LongODBUrlsScanner

DECLARE @Length256 AS int = 256-{0} 
DECLARE @Length260 AS int = 260-{0} 
DECLARE @Length270 AS int = 270-{0} 
 SELECT  AllDocs.SiteId,          DirName,
 LeafName                             
FROM [dbo].[AllDocs] with (NoLock) 
INNER JOIN [dbo].[AllSites] with (nolock)
          ON AllDocs.SiteId = AllSites.Id 
INNER JOIN [dbo].[AllWebs] with (nolock)
          ON AllSites.RootWebId = AllWebs.Id 
WHERE (LEN(DirName) > @Length256
          OR LEN([DirName] + N'/' + [LeafName]) > @Length260)
          AND AllSites.BitFlags & 1 = 0
          AND AllSites.BitFlags & 2 = 0
          AND AllWebs.WebTemplate = 21 
SELECT  NavNodes.SiteId,
          LEN(Url) AS UrlLength,
          Eid AS NodeId,
          WebId 
FROM [dbo].[NavNodes] with (NoLock) 
INNER JOIN [dbo].[AllSites] with (nolock)
          ON AllSites.Id = NavNodes.SiteID 
INNER JOIN [dbo].[AllWebs] with (nolock)
          ON AllSites.RootWebId = AllWebs.Id 
WHERE LEN(Url) > @Length260
          AND AllSites.BitFlags & 1 = 0
		  AND AllSites.BitFlags & 2 = 0
          AND AllWebs.WebTemplate = 21 
 SELECT  Perms.SiteId,
 LEN(ScopeUrl) AS ScopeUrlLength,
 ScopeUrl,
 WebId 
FROM [dbo].[Perms] with (NoLock) 
INNER JOIN [dbo].[AllSites] with (nolock)
          ON AllSites.Id = Perms.SiteID 
INNER JOIN [dbo].[AllWebs] with (nolock)
          ON AllSites.RootWebId = AllWebs.Id 
WHERE LEN(ScopeUrl) > @Length260
          AND AllSites.BitFlags & 1 = 0
		  AND AllSites.BitFlags & 2 = 0
          AND AllWebs.WebTemplate = 21 
 SELECT  Deps.SiteId,
 LEN(Deps.FullUrl) AS FullUrlLength,
 LEN(DepDesc) AS DepDescLength,
 Deps.FullUrl,
 DepDesc 
FROM [dbo].[Deps] with (NoLock) 
INNER JOIN [dbo].[AllSites] with (nolock)
       ON AllSites.Id = Deps.SiteID 
INNER JOIN [dbo].[AllWebs] with (nolock)
          ON AllSites.RootWebId = AllWebs.Id 
WHERE (LEN(Deps.FullUrl) > @Length260
          OR LEN(DepDesc) > @Length270)
          AND AllSites.BitFlags & 1 = 0
		  AND AllSites.BitFlags & 2 = 0
          AND AllWebs.WebTemplate = 21

NonDefaultMasterPageScanner

SELECT w.SiteID,
      w.ID as WebID,
      w.Title,
      w.MasterUrl,
      w.CustomMasterUrl 
FROM AllWebs w with (nolock) 
Inner JOIN AllSites s with (nolock)
      ON s.Id = w.SiteId 
WHERE       ((w.WebTemplate = 54 or w.WebTemplate = 21)
          and (w.MasterUrl not like '%_catalogs/masterpage/mysite15.master'
		  or w.CustomMasterUrl not like '%_catalogs/masterpage/mysite15.master'))
		  or      ((w.WebTemplate <> 54 and w.WebTemplate <> 21)
          and (w.MasterUrl not like '%_catalogs/masterpage/seattle.master'
		  or w.CustomMasterUrl not like '%_catalogs/masterpage/seattle.master'))
		  AND s.BitFlags & 1 = 0
		  AND s.BitFlags & 2 = 0 

SandboxSolutionScanner

SELECT DISTINCT SOLUTIONS.SITEID, 
SOLUTIONS.SOLUTIONID, 
SOLUTIONS.NAME, 
SOLUTIONS.HASH, 
SOLUTIONS.HASASSEMBLIES, 
SOLUTIONS.STATUS, 
SITEINFO.SITECOLLECTIONURL, 
ALLDOCS.TIMECREATED, 
ALLDOCS.TIMELASTWRITTEN, 
USERINFO.TP_LOGIN AS 'USERLASTWRITTEN', 
CASE       WHEN SOLUTIONS.HASASSEMBLIES = 1 THEN 'CUSTOM CODE'
       WHEN SOLUTIONS.HASASSEMBLIES = 0 AND SOLUTIONFILES.SOLUTIONFILEPATH LIKE '%Onet.xml' THEN 'SITE TEMPLATE'
       ELSE 'DESIGN PACKAGE' 
END AS SOLUTIONTYPE 
FROM SOLUTIONS WITH (NOLOCK) 
INNER JOIN (SELECT DISTINCT SITES.ID AS SITEID,
              CASE
			  WHEN SITES.HOSTHEADER IS NOT NULL AND PARENTWEBS.FULLURL='' THEN SITES.HOSTHEADER
			  WHEN SITES.HOSTHEADER IS NOT NULL THEN SITES.HOSTHEADER + '/' + PARENTWEBS.FULLURL
			  ELSE '/' + PARENTWEBS.FULLURL END AS SITECOLLECTIONURL
			  FROM ALLWEBS AS CHILDWEBS WITH (NOLOCK)
			  INNER JOIN  ALLSITES AS SITES WITH (NOLOCK) ON CHILDWEBS.SITEID = SITES.ID
			  INNER JOIN  ALLWEBS AS PARENTWEBS WITH (NOLOCK) ON SITES.ROOTWEBID = PARENTWEBS.ID
			  WHERE SITES.DELETED = CONVERT(BIT, 0)
			  AND CHILDWEBS.DELETETRANSACTIONID = 0X
			  AND PARENTWEBS.DELETETRANSACTIONID = 0X
			  AND SITES.BITFLAGS & 1 = 0
			  AND SITES.BITFLAGS & 2 = 0
			  ) AS SITEINFO 
ON SITEINFO.SITEID=SOLUTIONS.SITEID AND SITEINFO.SITEID IS NOT NULL 
INNER JOIN ALLDOCS ALLDOCS WITH (NOLOCK) 
ON  ALLDOCS.SITEID = SOLUTIONS.SITEID 
AND ALLDOCS.DIRNAME = (CASE
      WHEN SITEINFO.SITECOLLECTIONURL = '/' THEN '_CATALOGS/SOLUTIONS'
      ELSE (SUBSTRING(SITEINFO.SITECOLLECTIONURL,2,LEN(SITEINFO.SITECOLLECTIONURL)-1)+ '/_CATALOGS/SOLUTIONS')
      END) 
AND ALLDOCS.LEAFNAME = SOLUTIONS.NAME 
INNER JOIN ALLUSERDATA ALLUSERDATA WITH (NOLOCK) 
ON  ALLUSERDATA.TP_SITEID = ALLDOCS.SITEID 
AND ALLUSERDATA.TP_LISTID = ALLDOCS.LISTID 
AND ALLUSERDATA.TP_ID = ALLDOCS.DOCLIBROWID 
INNER JOIN USERINFO USERINFO WITH (NOLOCK) 
ON  USERINFO.TP_SITEID = ALLUSERDATA.TP_SITEID 
AND USERINFO.TP_ID = ALLUSERDATA.TP_EDITOR    
LEFT OUTER JOIN SOLUTIONFILES WITH (NOLOCK) 
ON SOLUTIONFILES.SOLUTIONID = SOLUTIONS.SOLUTIONID 
AND SOLUTIONFILEPATH LIKE '%Onet.xml' 
WHERE SOLUTIONS.SOLUTIONGALLERYITEMID > 0 
ORDER BY SITEID 

UnsupportedWebTemplatesScanner

SELECT [SiteId], Webs.[Id], Webs.[FullUrl], [Title], [WebTemplate] 
FROM [Webs] with (nolock) 
INNER JOIN [Sites] with (nolock)
      ON Sites.Id = Webs.SiteId 
WHERE Sites.BitFlags & 1 = 0
      AND Sites.BitFlags & 2 = 0
      AND WebTemplate NOT IN ({0}) 
ORDER BY SiteId 

WorkflowRunning2010Scanner

SELECT WF.SiteId, WF.WebId, WF.ListId, WF.ItemID, WFA.Name as WorkflowName, UserInfo.tp_Login as WorkflowInitiator 
FROM [dbo].[Workflow] as WF with (nolock) 
Inner Join [dbo].[WorkflowAssociation] as WFA with (nolock)  
On WF.TemplateId = WFA.Id 
INNER JOIN[dbo].[AllSites] with(nolock) 
ON AllSites.Id = WFA.SiteId                     
Inner Join [dbo].UserInfo with (nolock) 
On WF.Author = UserInfo.tp_ID and WF.SiteId = UserInfo.tp_SiteID 
Where InternalState | 2 = 2 /*InternalState is only Running*/ 
AND AllSites.BitFlags & 1 = 0 
AND AllSites.BitFlags & 2 = 0 

WorkflowRunning2013Scanner

 /*Gets all the webs that have a wfsvc list that indicates the site has 2013 workflows.*/ 
SELECT AllLists.tp_SiteID as SiteID, AllLists.tp_WebID as WebID 
FROM [AllLists] with (nolock) 
INNER JOIN [AllListsAux] with (nolock)
      ON AllLists.tp_ID = AllListsAux.ListID 
INNER JOIN [AllSites] with (nolock)
      ON AllSites.Id = AllLists.tp_SiteId 
WHERE AllLists.tp_Title = 'wfsvc'
       AND AllListsAux.ItemCount > 0
	   AND AllSites.BitFlags & 1 = 0
       AND AllSites.BitFlags & 2 = 0

Hot NEW download – SharePoint Migration Assessment Tool (SMAT)

Microsoft recently published SMAT (SharePoint Migration Assessment Tool) to scan your on-prem SharePoint 2013/2016 farm and prepare for Office 365 migration by reporting on potential issues.   Below are details on the command line usage and report contents.    Migration Assessment Scan Report provides 28 categories and granular site URL level detail into CSV.    Below are descriptions on each category with workaround and migration impact.

Lots of great detail here!  shades_smile

 

Download ZIP

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

 

Command Line Usage

SMAT.exe [-o] [-t] [-sv] is a command line application with three parameters:

  -o    Output folder to store logs and reports generated by this tool.

        If it already exists, all content will be overwritten.

        Default value is \Log folder in the current directory.

-t    Maximum number of threads to run in parallel. The minimum is 1, the maximum is the total number of processors for the machine.

        Default value is half of the available processors for the machine.

-sv  Skips pre-flight checks.

 

Screenshot

image

 

Migration Assessment Scan

http://aka.ms/SharePoint_Migration

https://support.office.com/en-us/article/Migration-Assessment-Scan-Reports-Roadmap-5bf2619b-14fd-421c-8b84-869743f1eca2?ui=en-US&rs=en-US&ad=US

The command line EXE will generate a report (Migration Assessment Scan) which provides detail on several categories of potential SharePoint on-prem to Office365 migration issues.   These are classified into 28 sections:

 

Add-Ins

Migrating SharePoint add-ins (formerly called apps) isn’t supported in the target environment. The site content will be migrated, but the add-ins will not. As a result, once the site is migrated, the add-ins will need to be reinstalled. If you purchased the add-in, you will need to reclaim the license from the add-in store.

 

Alerts

The migration tooling does not support migrating alerts. Alerts are created on items, lists, and libraries to notify a user of when content changed. This report provides visibility into the alerts that are currently configured in the source environment. If users would like to be notified of content changes after the migration, they will need to configure the alerts on the new environment.   As a result of alerts not migrating, we provide a lot of raw data associated with the alerts should the need arise to recreate the alerts post migration.

 

BCS

Business Connectivity Services (BCS) was introduced in SharePoint 2010 as an improvement to the Business Data Catalog created for Office SharePoint Server 2007. BCS enables SharePoint to access data from external data systems such as SAP, ERP, and CRM, in addition to other data-driven applications that are exposed through Windows Communication Foundation (WCF) services or Open Data (OData) endpoints.

 

Browser File Handling

The Browser File Handling settings on the Web Applications in SharePoint impact how you can browse certain file types. The source environment allowed you to change this setting from Strict to Permissive. The Permissive setting enables you to open all file types within the browser. However, in the target environment, the Strict setting is enforced and cannot be modified. As a result, you may find some file types will not open in the browser post migration. For example, *.htm and *.html files in document libraries will no longer open in the browser. Users will be prompted to download the files.

Checked-out files

Migration reads the source SharePoint farm using an account that has Full Read access to the environment. If a file is checked out by a user, the migration tooling is not able to read the checked out file. However, the migration tooling will see the last checked in version of the file instead. To avoid losing data, users should check-in their files prior to their site migrating.

Custom Profile Property Mappings

In the source environment, it was possible to add additional profile property mappings to the User Profile Service Application via a standard change request (CR). The profile property mappings enable SharePoint to pull in profile property values from data sources outside of SharePoint. For example, you could map a profile property to an attribute in Active Directory. During a profile sync, SharePoint populated the user’s profile with the value from Active Directory. Another scenario was to leverage Business Connectivity Services (BCS) to populate profile property values from a database or web service.

The target environment leverages Azure Active Directory (AAD) to populate the SharePoint profile values. SharePoint will synchronize the most common profile data from Azure Active Directory into SharePoint. The target environment does not support extending the AAD schema and configuring additional profile property mappings. If you need to populate data that is not provided by the out of the box profile property mappings, it is required to write a program that will push the values you want into the profile properties in the service. The following article provides guidance on updating profile property values leveraging the Client Side Object Model (CSOM).

http://blogs.msdn.com/b/vesku/archive/2014/11/07/sharepoint-user-profile-properties-now-writable-with-csom.aspx

 

Customized Pages

Customized files are out of the box SharePoint files that have been modified by a user. A common example is using a tool like SharePoint Designer to open a site and modify the default.aspx file of a site. During migration, these pages will be reverted to their uncustomized state.

Any file modified by the SharePoint System Account is excluded from the scan report.

Customized Profile Pages

In the source environment, viewing a user’s profile is managed by a page hosted in the My Site Host named Person.aspx. For example, clicking on a colleague’s name in a document library or from their OneDrive for Business will take you to the person.aspx page to view the user’s profile.

Post migration to the target environment, the profile experience is managed by the Delve service. There is currently a limitation in that the Delve profile page cannot be modified. This scan report will show you any customizations that have been made to the Person.aspx page in the source environment. This data can be used to understand any impact with the move to the target environment with regards to the profile experience.

Additional Information link: https://support.office.com/article/How-can-I-find-people-and-information-in-Office-Delve-5b8bffdd-a50a-430a-8570-09b39481887c

 

Email Enabled Lists

…TBA …

 

File Versions

Versions have historically impacted the length of a migration for a given site in a linear fashion. The more versions you have, the longer it will take to migrate a given site. On the target platform, versioning is enabled for all lists and libraries and the default configuration is a maximum of 10 versions per item. To align with this default configuration, migrations will bring over the last 10 versions of a given item.

If you have a business reason to keep more than this number of versions and the report indicates you have a large number of versions across your environment, you will need to provide the business justification. The 500GB per week estimate will not hold true for site collections that contain a large number of versions.

Full Trust Components (FTC)

…TBA …

InfoPath

InfoPath enables developers to build custom forms for accepting user input in a variety of locations throughout SharePoint. As part of the migration to the target environment, there are certain aspects of InfoPath forms that are not supported in the target environment.   InfoPath forms (XSN files) will be migrated, but some forms may not function without remediation.

IRM Enabled Lists

IRM settings associated with lists and libraries are not migrated. The following process is required to enable the migration tooling to properly handle IRM protected libraries. This process ensures that the content is transferred and accessible post migration.

  1. Disable IRM on the source and target list.

  2. Migration tooling will copy the files from the source and place them in the target.

  3. Enable IRM on the source and target list.

Large Excel Files

The maximum limit for opening XLSX files in the browser is 10MB in the target environment. This setting is configurable in the source environment which may result in a change in behavior for your users. If you attempt to open a file larger than 10MB from a SharePoint site, it will prompt you to open the file in the Excel client application.

Large List Views

On the source environment it is possible to configure list view throttling so there are a set number of hours per day where the throttle on views is lifted. On the target platform, the stated product list limits is in place continuously (24×7). This may result in some of your list views being throttled. 

The lists and their data will be migrated. However, the list views called out in the scan report may not be viewable post migration without performing remediation.

Large Lists

Lists over 20,000 items have historically caused issues with the migration tooling, making the ability to predict the time it takes to migrate sites that contain a larger list to be problematic. If you have large lists that must be migrated to the new platform please work with your Microsoft migration contact to ensure they are aware of your large list requirements, as attempting to migrate the larger lists will require special care when planning the migration event.

List data is migrated. However, the larger the list the more unpredictable the migration process has proven

 

Large Sites

Migrations occur in 500GB waves. This enables site owners to validate their sites post migration and allows Microsoft to predict the migration schedule. As a result, the maximum site collection size that is in scope is 500GB.

Sites over 500GB are out of scope for migration due to the impacts this has to predicting a migration schedule and delivery of the migration.

 

Locked Sites

When a site is configured as “No Access” in SharePoint, the site is inaccessible by both users and the system. As a result, the various pre-migration scans are configured to ignore any site that is configured as “No Access”; aka Locked.

Locked sites cannot be migrated to the target environment, as the migration tooling is unable to read the site contents.

 

Long OneDrive URLs

When you’re moving a OneDrive site from your source to the target environment, the OneDrive URL will change formats. On the source platform the OneDrive sites are in the format of https://onedrive.contoso.com/personal/domain_user. On the target platform, the Domain_User portion of the URL will change to use the UPN for the user. This will look similar to https://onedrive.contoso.com/personal/user_contoso_com.

The migration of the source content resulting in the long URLs will fail. This will cause migration jobs to fail, which will prolong the migration project unnecessarily.

 

Master Pages

During migration, the default master page will be set on all sites that are migrated. This ensures that the site will render once the migration is complete as the content migration will not have a dependency on any custom master pages. If you have custom master pages assigned to sites, you will need to set the Master Page property on the new site after the migration has completed.

The custom master page files (*.master) will be migrated to the new platform as long as they are in the Master Page Gallery in the site. However, the setting on the destination site will be set to the default master page. This process ensures the site will render after the migration.

 

Sandbox Solution

…TBA…

 

Secure Store

Secure Store Service is a shared service that provides storage and mapping of credentials, such as account names and passwords. It enables you to securely store data that provides credentials required for connecting to external systems and associating those credentials to a specific identity or group of identities.

Secure Store applications are not migrated to the target environment.

Unsupported Site Templates

Every SharePoint site is based on a site template. In the SharePoint source environment, it was possible to create site collections using a variety of default templates as well as templates deployed via Full Trust Code (FTC). However, the only target site collections that are supported for migration are the Team Site and Personal Site templates. The Personal Site Template is used for creating OneDrive for Business sites.

Any site collection that is using a site template other than Team Site or Personal Site will be mapped to a Team Site during migration.

TeamSite (STS#1)

Personal Site (SPSPERS#21)

 

Web Application Policies

In the source environment, there are discreet web applications for Team, Portal, Partner, and MySite (OneDrive). SharePoint OnPremise allows the use of web application policies to grant or deny blanket-level permissions to entire web applications. These permissions override any permissions set at the site collection, site, list/library, or item level.

The target environment uses a single web application to host all site collections.

We do not currently offer a permission feature that applies uniquely to specific root site names and all child items together.

None of the web application policies are migrated to the target environment.

 

Workflow Associations 2010 / 2013

The migration tooling is able to migrate the Workflow Definitions from the SharePoint source to the target environment. However, any in progress workflow instances are not migrated. As a result, in progress workflows are reset to appear as if they were never started on the destination.

The result of this will be the loss of all running workflow instances.

To avoid unnecessary workflow restarts it is best to complete in-flight workflows before the migration event when your content is moved to the target environment.

Once the migration to the target environment is complete, users will need to restart any workflows that were still in flight.

 

Workflow Running Solutions 2010  / 2013

The migration is unable to migrate workflows that are in progress. If a workflow on a site or item is In Progress, it will appear as if the workflow was never started on the item prior to migration. If you have business critical workflows that are in progress prior to migration, it is recommended to finish the workflow prior to migration.

Workflow definitions will migrate, however in progress workflow information will not be migrated.

Communicate with end users that in progress workflows will need to be restarted after migration.

Return to Top ▲Return to Top ▲