Well, we all know how we can create publishing pages in portal sites from UI. In portal sites, whenever we create a publishing page we need provide the name, title, description and a layout page. Once if we created the publishing page then we can check in, approve and publish it. All those steps we can do programmatically. Below I am giving the code snippet for creating publishing pages programmatically (add it into a specific folder) and after that redirect the user to that page with edit mode.

 

<codeSnippet>  

using

System;

using

System.Collections.Generic;

using

System.Text;

using

Microsoft.SharePoint;

using

Microsoft.SharePoint.Publishing;

namespace

ConsoleApplication3{

 

class Program

{

 

static void Main(string[] args){

 

string newPageUrl = “”; 

SPSecurity.RunWithElevatedPrivileges(delegate()// executing this code with elevated privileges will help whenever we create the publishing pages from a sharepoint portal site for an another portal site.If we create the publishing page within a site collection then this code will execute fine without elevated privileges.

{

 

using (SPSite site = new SPSite(http://sigr8-1b:45907/sites/sas&#8221;)) // provide your portal site URL

{

 

using (SPWeb web = site.OpenWeb()){

web.AllowUnsafeUpdates =

true; 

SPList list = web.Lists[“Pages”]; 

String url = list.RootFolder.ServerRelativeUrl.ToString(); 

// create a new folder

 

string strFolderName = “Folder7” ; 

SPListItem newFolder = list.Items.Add(url, SPFileSystemObjectType.Folder, strFolderName);newFolder.Update();

 

// if you want to add the new page in a existing folder you can take it by it’s ID like below

 

//SPListItem newFolder = list.Folders.GetItemById(3);

 

// creating a publishing web

 

PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(web); 

PageLayout[] layouts = publishingWeb.GetAvailablePageLayouts(); 

PageLayout layout = layouts[0]; 

string pageName = “MyPublishingPage5.aspx”

 

PublishingPage newPage = publishingWeb.GetPublishingPages().Add(newFolder.Folder.ServerRelativeUrl + “/”+ pageName, layout); 

// if you want to add the new page direclty inside the pages library then you can use the below line of code

 

//PublishingPage newPage = publishingWeb.GetPublishingPages().Add(pageName, layout);

 

 

// setting the URL value to the newPageUrl for redirecting the user after creating it

newPageUrl = web.Url +

“/” + newPage.Url;newPage.Description =

“This my sample publishing page”;newPage.Title =

“My Publishing Page”;newPage.Update();

 

 

//Now we can checkin the newly created page to the “pages” library

 

SPFile pageFile = newPage.ListItem.File; 

if (pageFile.CheckOutStatus != SPFile.SPCheckOutStatus.None){

pageFile.CheckIn(

“CheckedIn”);pageFile.Publish(

“publihsed”);}

 

// If you are executing this code in a web app then if you want to redirect the user to the newly created page with edit mode. Remember, we need to checkout the page before redireting the user to that page in edit mode, other wise you will get an Authoring error with message “You have not checked out this page. Click ‘Edit Page’ to edit the page.”

pageFile.CheckOut();

Response.Redirect(newPageUrl +

“?ControlMode=Edit&DisplayMode=Design”);}

}

});

}

}

}

 

 

</codeSnippet> 

Happy coding !

Advertisements