2

我正在尝试通过客户端对象模型在 Sharepoint 2010 页面库中创建页面,但我找不到任何有关如何执行此操作的示例。我尝试了两种方法:

第一种是将Pages库视为列表,并尝试添加列表项。

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();    
}

上面的代码将在页面库中添加一个项目,但打开文件会显示一个我无法编辑的空白页面。通过阅读各种主题,我怀疑可能只能通过服务器端代码添加页面。有什么想法吗?

谢谢

4

2 回答 2

2

问题是 FileCreationInformation 对象需要一个字节数组,我不确定要传递给它什么。

您可以使用任何方法将页面内容转换为字符串(从文件中读取,使用 StringBuilder 创建它等),然后使用将字符串转换为字节数组

System.Text.Encoding.ASCII.GetBytes()

于 2011-06-01T13:22:33.323 回答
0

首先, SharePoint 2010中的客户端对象模型 (CSOM) 不支持发布 API。但是您可以考虑使用以下方法来演示如何使用 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!"); 
}
于 2014-12-25T12:00:39.113 回答