Создание страницы SharePoint 2010 с помощью клиентской объектной модели - PullRequest
2 голосов
/ 01 июня 2011

Я пытаюсь создать страницы в библиотеке страниц 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 ]

2 голосов
/ 01 июня 2011

Проблема в том, что FileCreationInformation объект ожидая байтовый массив, и я не уверен, что перейти к нему.

Вы можете использовать любой метод, которым вы хотите, чтобы получить содержимое страницы в строку (прочитать его из файла, создать его с помощью StringBuilder и т. Д.), А затем преобразовать строку в байтовый массив с помощью

System.Text.Encoding.ASCII.GetBytes ()

0 голосов
/ 25 декабря 2014

Прежде всего, 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!"); 
}
...