Создание страницы SharePoint 2010 через объектную модель клиента
Я пытаюсь создать страницы в библиотеке страниц Sharepoint 2010 с помощью клиентской объектной модели, но не могу найти примеров того, как это сделать. Я попробовал два подхода:
Первый заключается в том, чтобы рассматривать библиотеку страниц как список и пытаться добавить элемент списка.
static void createPage(Web w, ClientContext ctx)
{
List pages = w.Lists.GetByTitle("Pages");
//ListItem page = pages.GetItemById(0);
ListItemCreationInformation lici = new ListItemCreationInformation();
ListItem li = pages.AddItem(lici);
li["Title"] = "hello";
li.Update();
ctx.ExecuteQuery();
}
Как и ожидалось, это не удалось с сообщением об ошибке:
To add an item to a document library, use SPFileCollection.Add()
Следующим подходом, который я попробовал, было добавить его в файл. Проблема в том, что объект FileCreationInformation ожидает байтовый массив, и я не уверен, что ему передать.
static void createPage(Web w, ClientContext ctx)
{
List pages = w.Lists.GetByTitle("Pages");
FileCreationInformation file = new FileCreationInformation();
file.Url = "testpage.aspx";
file.Content = new byte[0];
file.Overwrite = true;
ctx.Load(pages.RootFolder.Files.Add(file));
ctx.ExecuteQuery();
}
Приведенный выше фрагмент кода добавит элемент в библиотеку страниц, но при открытии файла появится пустая страница, которую я не могу редактировать. Читая различные темы, я подозреваю, что добавить страницы можно только с помощью кода на стороне сервера. Какие-нибудь мысли?
Спасибо
2 ответа
Проблема в том, что объект FileCreationInformation ожидает байтовый массив, и я не уверен, что ему передать.
Вы можете использовать любой метод, которым хотите получить содержимое страницы в строку (прочитать его из файла, создать его с помощью StringBuilder и т. Д.), А затем преобразовать строку в байтовый массив с помощью
System.Text.Encoding.ASCII.GetBytes()
Прежде всего, API публикации не поддерживается через клиентскую объектную модель (CSOM) в SharePoint 2010. Но вы могли бы рассмотреть следующий подход, который демонстрирует, как создать страницу публикации с использованием SharePoint 2010 CSOM.
Как создать страницу публикации с использованием SharePoint 2010 CSOM
public static void CreatePublishingPage(ClientContext ctx, string listTitle, string pageName, string pageContent)
{
const string publishingPageTemplate = "<%@ Page Inherits=\"Microsoft.SharePoint.Publishing.TemplateRedirectionPage,Microsoft.SharePoint.Publishing,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c\" %> <%@ Reference VirtualPath=\"~TemplatePageUrl\" %> <%@ Reference VirtualPath=\"~masterurl/custom.master\" %>";
var pagesList = ctx.Web.Lists.GetByTitle(listTitle);
var fileInfo = new FileCreationInformation
{
Url = pageName,
Content = Encoding.UTF8.GetBytes(publishingPageTemplate),
Overwrite = true
};
var pageFile = pagesList.RootFolder.Files.Add(fileInfo);
var pageItem = pageFile.ListItemAllFields;
if (!ctx.Site.IsPropertyAvailable("ServerRelativeUrl"))
{
ctx.Load(ctx.Site);
ctx.ExecuteQuery();
}
pageItem["PublishingPageLayout"] = string.Format("{0}_catalogs/masterpage/ArticleLeft.aspx, ArticleLeft",ctx.Site.ServerRelativeUrl);
pageItem["PublishingPageContent"] = pageContent;
pageItem.Update();
ctx.ExecuteQuery();
}
использование
using (var ctx = new ClientContext(url))
{
ctx.Credentials = new NetworkCredential("username", "password", "domain");
CreatePublishingPage(ctx, "Pages", "Greetings.aspx", "Welcome to SharePoint!");
}