Softlanding: SharePoint Consulting & Managed Services | Vancouver, BC

    Delivering Solutions, Empowering Clients

    Softlanding specializes in SharePoint Solutions, Managed Services, Microsoft Enterprise Infrastructure and specialized IT Staff Augmentation. Our mission is to exceed your expectations by combining technical excellence, the highest ethical standards and a deep understanding of your business needs to provide you with the most effective, reliable and scalable solutions.

     SharePoint Summit 2014 Vancouver

    Come join us at SharePoint Summit 2014 in Vancouver on October 27 to 29. Register before September 5, 2014 and get 15% off. We'll see you there!

    Register >>

     SharePointROI Sustainment Services

    SharePointROI is a, fixed- fee managed service providing end-to-end SharePoint sustainment, user support and adoption services. Eliminate SharePoint expertise hiring headaches and get the most out of your SharePoint investment.

    Learn More >>

     2014 Profit 500 List

    Softlanding is proud to be listed on the 26th annual PROFIT 500 ranking of Canada’s Fastest-Growing Companies by Canadian Business and PROFIT magazines.

    More >>

     We're Hiring!

    We're on the lookout for fun, talented people to join our growing teams. If you're looking to move up in your career, come check us out.

    Openings >>



    Takes Place:
    Description: Come join us at the 2014 Vancouver SharePoint Summit from October 27 to 29, at the Renaissance Vancouver Harbourside Hotel.

    Takes Place:
    Description: Softlanding is listed on the 26th annual PROFIT 500 ranking of Canada’s Fastest-Growing Companies by Canadian Business and PROFIT.

     Featured Solutions

    ​Content Worker

    Contentworker provides full featured, legal focused document management functionality, extending SharePoint into a powerful, modern and intuitive matter centric,  document and email management solution.


     Hidden Title

    The Softlanding Cross Site Navigation Provider

    Allow users to seamlessly navigate across site collections and even web applications while still experiencing a consistent navigation look and feel. Contact us for more information.



    Posted on:
    Categories: SharePoint
    ScenarioWhen you click on the TimeSheet link in Project Server 2013 an error is shown.SolutionULS Logs showed the following stack trace[bucketHash3754B72C] Exception occured in method 'TimeSheet.CreateTimesheet' System.ArgumentException An item with the same key has already been added. at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer) at Microsoft.Office.Project.Server.Events.ServerEventManager.ConfiguredServerEvents.EventHandlerConfiguration.GetInstance(ProjectSite projectSite) at Microsoft.Office.Project.Server.Events.ServerEventManager.ConfiguredServerEvents..ctor(ProjectSite projectSite) at Microsoft.Office.Project.Server.Events.ServerEventManager.ConfiguredServerEvents.<>c__DisplayClass8.<GetInstance>b__7() at Microsoft.Office.Project.Server.Utility.LazySet`2.GetValue(TKey key, Func`1 instanceFactory) at Microsoft.Office.Project.Server.Events.ServerEventManager.ConfiguredServerEvents.GetInstance(Guid siteUid) at Microsoft.Office.Project.Server.Events.ServerEventManager.<GetServerEventManager>b__0(IPlatformContext context) at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) at Microsoft.Office.Project.Server.Events.ServerEventManager.GetServerEventManager(IPlatformContext platformContext) at Microsoft.Office.Project.Server.BusinessLayer.TimeSheet.CreateTimesheet(TimesheetDataSet dsDelta, PreloadType preloadType) at Microsoft.Office.Project.Server.Wcf.Implementation.TimeSheetImpl.<>c__DisplayClass45.<CreateTimesheet>b__44() at Microsoft.Office.Project.Server.Wcf.Implementation.WcfMethodInvocation.InvokeBusinessObjectMethod(String businessObjectName, String methodName, IEnumerable`1 actions) StackTrace at Microsoft.Office.Project.Server.Native.dll (sig=874dbfdc-4770-4b1a-81f8-2b3d83ee10e5|2|, offset=3C1E) at Microsoft.Office.Project.Server.Native.dll (offset=1255D)Based on the stack trace, I know the issue is that Microsoft.Office.Project.Server.Events.ServerEventManager.ConfiguredServerEvents.EventHandlerConfiguration.GetInstance() method returns two items with the same id.Open the code using JustDecompile or ReflectorIssue occurs at the highlighted line, where the code converts eventHandlersDataSet object to a Dictionary with the Key of PSEventID.Next, I looked at the ReadEventHandlerAssociations() method to see where it's getting its data from. The code lead us to a ReadEventReceivers() method.This code calls the "MSP_ADMIN_ReadEventReceivers" Stored Procedure and returns a EventHandlersDataSet.After dissecting the MSP_ADMIN_ReadEventReceivers Stored Procedure, I was able to create the following query"SELECT EVENT_ID FROM pub.MSP_EVENT_HANDLERS GROUP BY EVENT_ID"When I ran this query it showed that Event_ID 95 had two items.Removing the AxUtils.ResourceEventsForAxSync Event Handler from the "Server Side Event Handlers" menu in Central Administration resolved the issue.

    Posted on:
    Categories: SharePoint;PowerShell
    Symptoms After upgrading to SharePoint 2013 from SharePoint 2010, you notice that incoming email is not working. You can see that incoming emails are appearing in the drop folder of the server that you have configured to receive incoming emails, but they are never processed.Solution You can manually toggle incoming email on and off for each list that is configured to receive incoming email; however, if you have a lot of lists that are configured to receive incoming email, this is not a practical solution. The following PowerShell script will check all lists in your farm and essentially toggle incoming email off and on, which should resolve this issue. $sites = Get-SPSite -limit all foreach($site in $sites) foreach($web in $site.Allwebs) foreach($list in $web.lists) if(($list.CanReceiveEmail -eq "True") -and ($list.EmailAlias -ne $null)) Write-Host $web.Url Write-Host -foregroundcolor Green $list.Title Write-Host -foregroundcolor Yellow $list.EmailAlias $alias = $list.EmailAlias $list.EmailAlias = $null $list.Update() $list.EmailAlias = $alias $list.Update()