SharePoint Online – Setting custom home page in Site Collection and in Sub-Sites


In SharePoint Online, using PNP’s Remote Site Provisioning approach you can request and create customized site collections.  As part of site collection creation process, one of the option could be to upload custom page and set it as default welcome page for the Site Collection.  As part of site provisioning, if you have sub-sites created as well, you may want to set the same custom page as your sub-sites welcome page. 

 

Setting  SiteCollection’s Welcome Page

var wikiPages = web.Lists.GetByTitle("Pages");
web.Context.Load(wikiPages);
web.Context.ExecuteQuery();
Microsoft.SharePoint.Client.File wikiFile = wikiPages.RootFolder.GetFile("CustomDefault-page.aspx");
if (wikiFile.CheckOutType == CheckOutType.None)
   wikiFile.CheckOut();
 web.Context.Load(wikiFile);
web.Context.ExecuteQuery(); 
 var wikiPage = wikiFile.ListItemAllFields;
 web.Context.Load(wikiPage);
 web.Context.ExecuteQuery();
 wikiPage["PublishingPageLayout"] = web.ServerRelativeUrl + "/_catalogs/masterpage/PageFromDocLayout.aspx, Body only";
 wikiPage.Update();
  wikiFile.CheckIn(string.Empty, CheckinType.MajorCheckIn);
 web.Context.Load(wikiFile);
 web.Context.ExecuteQuery();
  //Set Welcome Home Page
 var rootFolder = web.RootFolder;
 rootFolder.WelcomePage = "Pages/CustomDefault-page.aspx";
 rootFolder.Update();
 web.Context.ExecuteQuery();


Setting  Sub-Site’s Welcome Page

 FileCreationInformation newFile = new FileCreationInformation();
 ctx.Load(hostWeb);
 ctx.ExecuteQuery();
 Microsoft.SharePoint.Client.File file = hostWeb.GetFileByServerRelativeUrl(hostWeb.ServerRelativeUrl + "/Pages/CustomDefault-page.aspx");
 ClientResult<Stream> data = file.OpenBinaryStream();
 hostWeb.Context.Load(file);
 hostWeb.Context.ExecuteQuery();
 if (data != null)
 {
     using (var memory = new MemoryStream())
      {
          byte[] buffer = new byte[file.Length];
          int nread = 0; 
          while ((nread = data.Value.Read(buffer, 0, buffer.Length)) > 0)
          {
              memory.Write(buffer, 0, nread);
          }
           memory.Seek(0, SeekOrigin.Begin);
           StreamReader fsReader = new StreamReader(memory);
           byte[] contents = null;
           using (Stream fStream = fsReader.BaseStream)
            {
                contents = new byte[fStream.Length];
                fStream.Read(contents, 0, (int)fStream.Length);
                 fStream.Close();
               } 
              newFile.Content = contents;
              newFile.Url = "CustomDefault-page.aspx";
              newFile.Overwrite = true; 
              var wikiPages = newWeb.Lists.GetByTitle("Pages");
              newWeb.Context.Load(wikiPages);
              newWeb.Context.ExecuteQuery(); 
              Microsoft.SharePoint.Client.File wikiFile = wikiPages.RootFolder.Files.Add(newFile);
              newWeb.Context.Load(wikiFile);
              newWeb.Context.ExecuteQuery(); 
              wikiFile.CheckIn(string.Empty, CheckinType.MajorCheckIn);
              newWeb.Context.Load(wikiFile);
              newWeb.Context.ExecuteQuery(); 
              //Set Welcome Home Page
              var rootFolder = newWeb.RootFolder;
              rootFolder.WelcomePage = "Pages/CustomDefault-page.aspx";
              rootFolder.Update();
              newWeb.Context.ExecuteQuery();
       }
    }

Comments (0)

Skip to main content