Thursday, 5 February 2015

How to create SharePoint publishing page with custom page layout and custom page name programmatically using JSOM?

Here is a JavaScript code to achieve the above requirement-

JavaScript code to create SharePoint publishing page:
function createPublishingPage()
{
 context = SP.ClientContext.get_current();
 hostUrl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));
 hostcontext = new SP.AppContextSite(context, hostUrl);
 web = hostcontext.get_web();
 newPage = pubWeb.addPublishingPage(pageInfo);
 context.load(newPage);
 context.executeQueryAsync(
      function () {
      listItem = newPage.get_listItem();
      context.load(listItem);
      context.executeQueryAsync(

      changePublishingPage(listItem.get_fieldValues().FileLeafRef, 'MyLayout.aspx', 'newpagename');

      },
      function (sender, args) {
      alert('Failed to get new page: ' + args.get_message());
      });
      },

   function (sender, args) {
   alert('Failed to Add Page: ' + args.get_message());
   });
   },

 function (sender, args) {
 alert('Failed to get the PublishingWeb: ' + args.get_message());
 });
 },
function (sender, args) {
alert('Failed to get the hosting Web: ' + args.get_message());
});
}
JavaScript code to change page layout, title and url of the newly created publishing page:
function changePublishingPage(pageName, pageLayoutName, newpagename) {
var site = context.get_site();
var rootWeb = site.get_rootWeb();
context.load(rootWeb, 'ServerRelativeUrl');
context.load(site);
context.executeQueryAsync(function () {
    var rootUrl = rootWeb.get_serverRelativeUrl();

    //fetch the layout you want to set for newly created publishing page
    var pageFromDocLayout = rootWeb.getFileByServerRelativeUrl(rootUrl + "_catalogs/masterpage/" + pageLayoutName);
    var pageLayoutItem = pageFromDocLayout.get_listItemAllFields();
    var pageFile = rootWeb.getFileByServerRelativeUrl(rootUrl + "/Pages/" + pageName);
    var pageItem = pageFile.get_listItemAllFields();

    context.load(pageItem);
    context.executeQueryAsync(function () {

      //change page layout
      var itemValue = pageItem.get_item('PublishingPageLayout');
      itemValue.set_url(web.get_url() + '/_catalogs/masterpage/' + pageLayoutName);
      itemValue.set_description('Some description');

      //change title and url of newly created publishing page
      pageItem.set_item('PublishingPageLayout', itemValue);
      pageItem.set_item('Title', newpagename);
      pageItem.set_item('FileLeafRef', newpagename+'.aspx');

pageItem.update();
alert('success');
}, onFail);
}, onFail);
}

No comments:

Post a Comment