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.

     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: Interested to hear from our clients about projects and strategic partnerships we've been involved in? Good news, our Case Studies are live!

    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

    Connecting Talent and Resources for Better Performance

    Corix finds a scalable solution to communication issues and improves organizational performance in the process. Read more here


     Hidden Title

    Strategic IT to Support Organizational Change

    The BC First Nations Health Authority finds a strategic partner for a major transition, plus continued IT support for successful delivery of essential services. Read more here​. 



    Posted on:
    Categories: PowerShell;SharePoint
    Description: Remotely provisioning a list from CustomSchemaXml is easy once you know how to structure the XML.
    This PowerShell script will provi​sion a new list remotely using ListCreationInformation.CustomSchemaXml.Further below is an example of the XML to be fed in, which is the tricky part.​param(​ [Parameter(Mandatory = $true)][string]$webUrl, [Parameter(Mandatory = $true)][string]$schemaXmlFilePath, [Parameter(Mandatory = $true)][int]$listTemplateId ) $csom = [Reflection.Assembly]LoadWithPartialName('Microsoft.SharePoint.Client') $ctx = New-Object Microsoft.SharePoint.Client.ClientContext $webUrl $ctx.Load($ctx.Web.Lists) $ctx.Load($ctx.Web.ListTemplates) $ctx.ExecuteQuery() $schemaXml = [xml] (Get-Content $schemaXmlFilePath) $template = $ctx.Web.ListTemplates | WHERE $_.ListTemplateTypeKind -eq $listTemplateId $info = New-Object Microsoft.SharePoint.Client.ListCreationInformation $info.Title = $schemaXml.List.Title $info.Url = $schemaXml.List.Url $info.CustomSchemaXml = $schemaXml.OuterXml $info.TemplateType = $listTemplateId $info.TemplateFeatureId = $template.FeatureId $list = $ctx.Web.Lists.Add($info) $ctx.ExecuteQuery()​ This script works against SharePoint 2010 and SharePoint 2013, but requires PowerShell v3 or higher.​How to structure the XMLSimply grabbing the SchemaXml from an existing list does not work. An easy way to start is to use Visual Studio. Add a list to a SharePoint project and then grab the Schema.xml file. It can be used as-is. Here is an example generated when choosing the Custom List template.<?xml version="1.0" encoding="utf-8"?> <List xmlnsows="Microsoft SharePoint" Title="List1" FolderCreation="FALSE" Direction="$ResourcesDirection;" Url="Lists/List1" BaseType="0" xmlns="http//"> <MetaData> <ContentTypes> <ContentTypeRef ID="0x01"> <Folder TargetName="Item" /> </ContentTypeRef> <ContentTypeRef ID="0x0120" /> </ContentTypes> <Fields> <Field ID="fa564e0f-0c70-4ab9-b863-0177e6ddd247" Type="Text" Name="Title" DisplayName="$Resourcescore,Title;" Required="TRUE" SourceID="http//" StaticName="Title" MaxLength="255" /> </Fields> <Views> <View BaseViewID="0" Type="HTML" MobileView="TRUE" TabularView="FALSE"> <Toolbar Type="Standard" /> <XslLink Default="TRUE">main.xsl</XslLink> <RowLimit Paged="TRUE">30</RowLimit> <ViewFields> <FieldRef Name="LinkTitleNoMenu"></FieldRef> </ViewFields> <Query> <OrderBy> <FieldRef Name="Modified" Ascending="FALSE"></FieldRef> </OrderBy> </Query> <ParameterBindings> <ParameterBinding Name="AddNewAnnouncement" Location="Resource(wss,addnewitem)" /> <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" /> <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_ONET_HOME)" /> </ParameterBindings> </View> <View BaseViewID="1" Type="HTML" WebPartZoneID="Main" DisplayName="$Resourcescore,objectiv_schema_mwsidcamlidC24;" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" SetupPath="pages\viewpage.aspx" ImageUrl="/_layouts/15/images/generic.png?rev=23" Url="AllItems.aspx"> <Toolbar Type="Standard" /> <XslLink Default="TRUE">main.xsl</XslLink> <JSLink>clienttemplates.js</JSLink> <RowLimit Paged="TRUE">30</RowLimit> <ViewFields> <FieldRef Name="LinkTitle"></FieldRef> </ViewFields> <Query> <OrderBy> <FieldRef Name="ID"></FieldRef> </OrderBy> </Query> <ParameterBindings> <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" /> <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)" /> </ParameterBindings> </View> </Views> <Forms> <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" /> <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" /> <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" /> </Forms> </MetaData> </List>

    Posted on:
    Categories: SharePoint;SQL
    Symptoms For testing purposes we recently had to restore a production site to one of our staging environments. This site contains several SSRS report libraries. After restoring the production site to the staging environment we noticed that several reports produced the following error when opened At first this appeared to be a strange error because the data source was clearly set on for the RDL file. So, why was SharePoint complaining that the shared data source was invalid?One thing that I examined while trying to determine the cause of this error was the report server database. This is the database that is configured in your SSRS server configuration settings on your SSRS server, and it contains a great deal of metadata about your SSRS reports, datasets and data sources. By running the following query against the report server database I was able to see that the data source link for the RDL file was definitely correctSELECT DSID ,DS.ItemID ,Link ,C.Name AS ItemName ,DS.Name AS DSName FROM DataSource DS JOIN Catalog C ON DS.ItemID = C.ItemID In the first screenshot you can see that the 'ItemID' for the GWAOLAP.rsds data source is 75E84723-B162-45AE-B093-550394CCE3EF. This matches the 'Link' value for the RDL file, as seen in the second screenshot ('Link' refers to the data source reference in this case). So, everything appears to be in order here. The problem must lie elsewhere. Solution The solution turned out to be quite simple, even if it wasn't obvious from the error message given above. The RDL file was configured with several datasets. Each of these datasets has its own data source reference, and each of these references were set to null after a migration from the production environment. Each dataset needs to be configured with a data source reference. Once the data source links were configured for each of the datasets the error went away and the report loaded successfully. In summary, make sure that you set the data source references for your data sets in addition to the data source references for your RDL files.