Please refer the following code snippet to create publishing page and set multi-value managed metadata based on another item:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Publishing;
using Microsoft.SharePoint.Client.Taxonomy;
public static string CreatePublishingPage(ClientContext context)
{
string pageLibrary = "Pages";
string pageLayout = "EnterpriseWiki";
string pageName = "MyNewPublishingPage.aspx";
string pageDisplayName = pageName.Split('.')[0];
string pageURL = string.Empty;
try
{
Web webSite = context.Web;
context.Load(webSite);
PublishingWeb web = PublishingWeb.GetPublishingWeb(context, webSite);
context.Load(web);
if (web != null)
{
// Get Pages Library
List pages = context.Site.RootWeb.Lists.GetByTitle(pageLibrary);
ListItemCollection existingPages = pages.GetItems(CamlQuery.CreateAllItemsQuery());
context.Load(existingPages, items => items.Include(item => item.DisplayName).Where(obj => obj.DisplayName == pageDisplayName));
context.ExecuteQuery();
// Check if page already exists
if (existingPages != null && existingPages.Count > 0)
{
// Page already exists
Console.WriteLine("Page already exists.\n");
pageURL = context.Web.ServerRelativeUrl + "/" + pageLibrary + "/" + pageName;
}
else
{
// Get Publishing Page Layouts
Console.WriteLine("Creating Page...\n");
List publishingLayouts = context.Site.RootWeb.Lists.GetByTitle("Master Page Gallery");
ListItemCollection allItems = publishingLayouts.GetItems(CamlQuery.CreateAllItemsQuery());
context.Load(allItems, items => items.Include(item => item.DisplayName).Where(obj => obj.DisplayName == pageLayout));
context.ExecuteQuery();
ListItem layout = allItems.Where(x => x.DisplayName == pageLayout).FirstOrDefault();
context.Load(layout);
File tempWikiPage = context.Site.RootWeb.GetFileByServerRelativeUrl("/sites/dev/Pages/Temp.aspx");
context.Load(tempWikiPage,items => items.ListItemAllFields);
context.ExecuteQuery();
// Create a publishing page
PublishingPageInformation publishingPageInfo = new PublishingPageInformation();
publishingPageInfo.Name = pageName;
publishingPageInfo.PageLayoutListItem = layout;
PublishingPage publishingPage = web.AddPublishingPage(publishingPageInfo);
TaxonomyFieldValueCollection sourceValue = tempWikiPage.ListItemAllFields["Subjects"] as TaxonomyFieldValueCollection;
string[] termValuesarrary;
List<string> termValues = new List<string>();
foreach (TaxonomyFieldValue taxProductFieldValue in sourceValue)
{
termValues.Add("-1;#" + taxProductFieldValue.Label + "|" + taxProductFieldValue.TermGuid);
}
termValuesarrary = termValues.ToArray();
string termValuesstring = string.Join(";#", termValuesarrary);
FieldCollection fields = context.Site.RootWeb.Lists.GetByTitle("Pages").Fields;
context.Load(fields);
context.ExecuteQuery();
Field SubjectField = fields.GetByTitle("Subjects");
context.Load(SubjectField);
context.ExecuteQuery();
TaxonomyField txField = context.CastTo<TaxonomyField>(SubjectField);
var newtermValues = new TaxonomyFieldValueCollection(context, termValuesstring, txField);
txField.SetFieldValueByValueCollection(publishingPage.ListItem, newtermValues);
publishingPage.ListItem["Title"] = pageDisplayName;
publishingPage.ListItem["Standard"] = tempWikiPage.ListItemAllFields["Standard"];
publishingPage.ListItem.Update();
publishingPage.ListItem.File.CheckIn(string.Empty, CheckinType.MajorCheckIn);
publishingPage.ListItem.File.Publish(string.Empty);
context.Load(publishingPage);
context.Load(publishingPage.ListItem.File, obj => obj.ServerRelativeUrl);
context.ExecuteQuery();
pageURL = context.Web.ServerRelativeUrl + "/" + pageLibrary + "/" + pageName;
Console.WriteLine("Page Created.\n");
}
}
}
catch (Exception e)
{
Console.WriteLine("Failed. Error: " + e);
}
return pageURL;
}