Tag Archives: SharePoint 2007
Incoming Email 2007 to 2013 Upgrade – Errors occurred processing message
After upgrading from SharePoint 2007 to 2013, I experienced a problem with receiving incoming emails on migrated sites from SP 2007. ULS logs showed incoming email attempting to process EML files but then quickly failing with “Message ID:” but not the EML file name or alias. After extensive testing we found that SPSite objects were “locked” for exceeding Sandbox Resource Points. Toggling the “BitFlags” value allowed us to clear the “Resource Exceeded” and allow incoming email to process.
Also, we disabled a few Timer Jobs which calculate Sandbox Resource points (and were re-establishing the SPSite lock). With both BitFlags cleared to “0” and timer jobs disabled everything ran smoothly.
ULS Failure
02/17/2015 16:46:12.69 OWSTIMER.EXE (0x0C54) 0x1C4C SharePoint Foundation E-Mail 6871 Information The Incoming E-Mail service has completed a batch. The elapsed time was 00:00:00. The service processed 2 message(s) in total. Errors occurred processing 2 message(s): Message ID: Message ID:
BitFlag.ps1
param($bitflag)
# Test input number and display full composition (each true/false flag)
$bitflag
(1..50) |% {$test = [Math]::Pow(2, $_); $found=($test -band $bitflag); 1 | select {$test},{$found}}
[AllSites].[dbo].[BitFlags] Composition
Table [AllSites]
Column [BitFlags]
Failed Site have Decimal Value: 12582912
Failed Site have Hexadecimal Value: 0xC00000
V_SF_RESOURCEMAXSENT
V_SF_RESOURCEMAXLOCK
Details:
V_SF_WRITELOCK 0000000000000001 00000000000000000001 no
V_SF_READLOCK 0000000000000002 00000000000000000002 no
V_SF_FOUNDATIONLOCK 0000000000000004 00000000000000000004 no
V_SF_DISKLOCK 0000000000000008 00000000000000000008 no
V_SF_BWLOCK 0000000000000010 00000000000000000016 no
V_SF_NONPAYMENTLOCK 0000000000000020 00000000000000000032 no
V_SF_VIOLATIONLOCK 0000000000000040 00000000000000000064 no
V_SF_DISKLOCKMSGSENT 0000000000000080 00000000000000000128 no
V_SF_BWLOCKMSGSENT 0000000000000100 00000000000000000256 no
V_SF_USERLOCKMSGSENT 0000000000000200 00000000000000000512 no
V_SF_DISKWARNINGSENT 0000000000000400 00000000000000001024 no
V_SF_BWWARNINGSENT 0000000000000800 00000000000000002048 no
V_SF_LARGESITE 0000000000001000 00000000000000004096 no
V_SF_MAYHAVESITEALERTS 0000000000008000 00000000000000032768 no
V_SF_TRIMAUDITLOG 0000000000010000 00000000000000065536 no
V_SF_READONLYLOCK 0000000000020000 00000000000000131072 no
V_SF_PRESCANNED 0000000000040000 00000000000000262144 no
V_SF_USERACCOUNTRESTRICTION 0000000000080000 00000000000000524288 no
V_SF_USERSOLUTIONACTIVATED 0000000000100000 00000000000001048576 no
V_SF_RESOURCEWARNSENT 0000000000200000 00000000000002097152 no
V_SF_RESOURCEMAXSENT 0000000000400000 00000000000004194304 yes
V_SF_RESOURCEMAXLOCK 0000000000800000 00000000000008388608 yes
V_SF_HASSITESCOPEDUSERCUSTOMACTIONS 0000000001000000 00000000000016777216 no
V_SF_UIVERSIONCONFIGURATIONENABLED 0000000002000000 00000000000033554432 no
V_SF_SHAREBYLINKENABLED 0000000004000000 00000000000067108864 no
V_SF_USERDEFINEDWORKFLOWSDISABLED 0000000010000000 00000000000268435456 no
V_SF_HTTPSHOSTHEADERSITEURLSCHEME 0000000020000000 00000000000536870912 no
V_SF_UNUSED 0000000040000000 00000000001073741824 no
V_SF_SHAREBYEMAILENABLED 0000000080000000 00000000002147483648 no
Disabled Timer Jobs
- Solution Daily Resource Usage Update
- Solution Resource Usage Log Processing
- Solution Resource Usage Update
NOTE – All 3 timer job definitions above repeat per web application. In our case, we disabled 6 = 3 jobs X 2 web apps.
get-sptimerjob |? {$_.name -eq "job-solution-daily-resource-usage" -or
$_.name -eq "job-solution-resource-usage-update" -or
$_.name -eq "job-solution-resource-usage-log"}
| select name,displayname,IsDisabled,LastRunTime,scheduleReference
- Refresh the Directory Management Service if a database is restored or moved to a location where the incoming e-mail settings are not correct.
http://technet.microsoft.com/en-us/library/cc262558%28v=office.12%29.aspx - For the bitflag value –
http://blogs.technet.com/b/praveenh/archive/2013/10/31/upgrading-from-wss-2-0-to-sharepoint-2013.aspx - Configuring incoming E-mails on SP 2013
https://technet.microsoft.com/en-us/library/cc262947(v=office.15).aspx
NEW CodePlex project – SPUpgradeHelper
Today I am happy to announce https://spupgradehelper.codeplex.com/ is available for download. This project aims to smooth the “double hop” upgrade from MOSS 2007 to SP2010 to SP 2013 by reading a CSV of database targets and automating the Cmdlets needed for a consistent, repeatable, high quality, and fast process. Please leave a comment here or on CodePlex if you found this helpful. Cheers! ![]()
Project Description
Migrating MOSS 2007 to SP 2013? This script takes a CSV of databases and runs upgrade Cmdlets in bulk (DB version/Mount/Dismount/Upgrade-SPSite/Claims auth)
Upgrading MOSS to SP2013 is a tedious process with many Cmdlets, especially if you have many databases. This script aims to help automate that process.
Given a CSV with SQL instance and content database names, this script offers Cmdlets to run upgrade steps across many databases all at once. No more TXT or XLS copy and paste madness. Simply populate the CSV, get familiar with UH* Cmdlets and upgrade with ease.
Key Features
- Read CSV of databases
- Load helper functions into memory
- Enable admin to more easily run Cmdlets in bulk
- Measure time duration for each step (# minutes)
- Provide detailed LOG file of actions, result, and duration
Quick Start Guide
- Extract “SPUpgradeHelper.ZIP” to any SharePoint machine in your farm
- Run “SPUpgradeHelper.ps1” to load helper functions
- Type in full path to your CSV file (i.e. “C:\TEMP\COLLAB.CSV”)
Function Names
- UHCIaims – execute SPWebApplication function to upgrade Classic to Claims auth
- UHCompatibiIity – execute Get-SPSite for “set” of databases to show GUI version (14/15)
- UHDBVersion – execute TSQL for “set” of databases to show build number (12.0, 14.0, 15.0)
- UHDismount – execute DisMount-SPContentDatabase for “set” of databases
- UHMount – execute Mount-SPContentDatabase for “set” of databases
- UHReadCSV – load CSV file into memory with upgrade “set”, SQL instance, and database names
- UHUpgrade – execute Upgrade-SPSite for “set” of databases
NOTE – Upgrade “set” is meant for running parallel workstreams. For example, two servers with SP2010 and two servers with SP2013. That way overall upgrade can be expedited by running database set “A” through the first SP2010 and SP2013 server while database set “B” runs on the second server.
Microsoft Upgrade Process
InfoPath tip – detect Security Group with List Item permissions
Yes, everyone says InfoPath is dead … but we’re all still supporting it for a while so I wanted to share one of my favorite tips. Forms often need role based security at the field level. Table below with example security matrix.
How can InfoPath detect that? Don’t some people query SOAP ASMX? Or even a custom WSP with a custom ASMX? There is a simpler way with List Item permission.
- Create a new Custom List named “SecurityLevel” with only the default “Title” column.
- Go create the needed SharePoint Groups under Site Permissions.
- Back in “SecurityLevel” add one new item for each SharePoint Group with an identical name. Hover that item, pull down the menu, and set Item Level Permissions for that group ONLY to have “Read” on that item only.
- With InfoPath Designer edit the XSN Form Template and create a new Data Connection to the list “SecurityLevel” with auto refresh.
- Under Form Load create a rule … if count(SecurityLevel [“Analyst”]) > 0 then set field “SecurityLevel=Analyst”.
- With that in place you are ready to apply formatting rules anywhere needed that use “SecurityLevel” to determine hide/show or read/write.
Voila!
Now when a user open the InfoPath form, the data connection “SecurityLevel” will only show the items they have access to (which is the same as the SharePoint Group membership!). Works on MOSS 2007, SharePoint 2010, SharePoint 2013, and Office 365.
Hope this helps. Please leave a comment if it did. ![]()
DOWNLOAD InfoPath Form – SecurityLevel.xsn >>
How to point to a custom 404 error Web page
Recently I was working on a custom 404 page with JavaScript logic for retiring an old SharePoint farm. Replacing the “oldportal” DNS name with “newportal” helped avoid any end user 404 message by automatically handling all redirects. Microsoft has a great KB article with implementation steps. http://support.microsoft.com/kb/941329 However, I had two important changes and wanted to blog about it in case this might help others.
- Custom JavaScript redirect logic. A simple replace statement helps change “oldportal” to “newportal” and seamlessly transition user traffic to the new system.
- PowerShell instead of Visual Studio EXE. Not everyone has Visual Studio or the developer skills needed for compiling a command line EXE. PowerShell is a simple text command you can run on MOSS2007/SP2010/SP2013 because it references the “Microsoft.SharePoint” assembly and works on older SharePoint server versions.
Enjoy! ![]()
PowerShell Code – apply web application setting
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$webapp = [Microsoft.SharePoint.Administration.SPWebApplication]::Lookup("http://oldportal")
$webapp.FileNotFoundPage = "Custom404.htm"
$webapp.Update()
HTML Code – Custom404.htm
<!-- _localBinding -->
<!-- _lcid="1033" _version="" -->
<html>
<head>
<meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8" />
<meta HTTP-EQUIV="Expires" content="0" />
<noscript>
<meta http-equiv="refresh" content="0; url=/_layouts/spsredirect.aspx?noscript=1" />
</noscript>
<script language='javascript' src="_/layouts/lO33/init.js"></script>
<script language='javascript' src="_/layouts/1033/core.js"></script>
<script language='javascript'>
//requestedUrl = escapeProperly(window.location.href);
//STSNavigate(”/layouts/.?oldUrl=” + requestedUrl);
var dest = window.location.href.replace("oldportal","newportal") .toString();
window.location.href = dest;
</script>
</head>
<body>
</body>
</html>
