如何以编程方式在Enterprise Wiki站点的Pages库中创建可编辑的Wiki页面

时间:2012-10-30 16:19:19

标签: c# sharepoint sharepoint-2010 sharepoint-api

我是SharePoint新手。我正在尝试以编程方式在SharePoint 2010中的企业Wiki网站的页面库中创建一个Wiki页面。这是我的代码:

using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
        SPWeb rootWeb = site.RootWeb;
        rootWeb.AllowUnsafeUpdates = true;
        SPList wiki = rootWeb.Lists["Pages"];
        SPFolder rootFolder = wiki.RootFolder;
        SPFile wikiPage = rootFolder.Files.Add(String.Format("{0}/{1}", rootFolder.ServerRelativeUrl, "MyWikiPage.aspx"), SPTemplateFileType.WikiPage);
        SPListItem wikiItem = wikiPage.Item;
        wikiItem["PublishingPageContent"] = "my demo content";
        wikiItem.UpdateOverwriteVersion();
        rootWeb.AllowUnsafeUpdates = false;
}

页面已创建,但问题是创建的页面不可编辑且未插入演示内容。在编辑模式下打开时,没有可用的内容空间,并且编辑选项显示为灰色。

我也试过像这样设置默认内容:

    wikiItem[SPBuiltInFieldId.WikiField] = "my demo content";

但是这会产生无效的字段错误。

我也尝试用这行代码创建页面:

    SPFile wikiPage = SPUtility.CreateNewWikiPage(wiki, String.Format("{0}/{1}", rootFolder.ServerRelativeUrl, "MyWikiPage.aspx"));

但结果完全一样。

我已确认已为该网站启用“SharePoint Server发布”功能,并为网站集启用了“SharePoint Server发布基础结构”功能。

请帮忙。

2 个答案:

答案 0 :(得分:4)

在sharepoint.stackexchange.com上我的另一个帖子的帮助下,我提出了这个解决方案:

我们需要创建一个新的发布页面并相应地更新内容类型属性,而不是使用常规的wiki操作例程来定位Pages库。

为了他人的利益,这里有适用于我的代码:

using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
    SPWeb rootWeb = site.RootWeb;
    rootWeb.AllowUnsafeUpdates = true;
    SPList wiki = rootWeb.Lists["Pages"];
    String url = wiki.RootFolder.ServerRelativeUrl.ToString();
    PublishingSite pubSite = new PublishingSite(rootWeb.Site);
    string pageLayoutName = "EnterpriseWiki.aspx"; //Page Layout Name
    string layoutURL = rootWeb.Url + "/_catalogs/masterpage/" + pageLayoutName;
    PageLayout layout = pubSite.PageLayouts[layoutURL];
    PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(rootWeb);
    PublishingPage newWikiPage;
    string myWikiPage = "MyWikiPage.aspx"; //Page name
    newWikiPage = publishingWeb.GetPublishingPages().Add(myWikiPage, layout);
    newWikiPage.Title = "My Wiki Page";
    newWikiPage.Update();
    rootWeb.AllowUnsafeUpdates = false;
}

答案 1 :(得分:2)

如何使用SSOM

创建Wiki页面

<强> C#

/// <summary>
/// Create Wiki Page
/// </summary>
/// <param name="wikiPages"></param>
/// <param name="pageName"></param>
/// <param name="pageContent"></param>
/// <returns></returns>
public static SPListItem CreateWikiPage(SPList wikiPages, string pageName, string pageContent)
{
   var web = wikiPages.ParentWeb;
   var pSite = new Microsoft.SharePoint.Publishing.PublishingSite(web.Site);
   var pageLayoutUrl = SPUtility.ConcatUrls(web.Site.Url,"/_catalogs/masterpage/EnterpriseWiki.aspx");
   var pageLayout = pSite.PageLayouts[pageLayoutUrl];
   var pWeb = Microsoft.SharePoint.Publishing.PublishingWeb.GetPublishingWeb(web);
   var wikiPage = pWeb.GetPublishingPages().Add(pageName, pageLayout);
   var wikiItem = wikiPage.ListItem;
   wikiItem["PublishingPageContent"] = pageContent;
   wikiItem.Update();
   return wikiItem;
}

<强>的PowerShell

if ((Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null)
{
    Add-PsSnapin Microsoft.SharePoint.PowerShell
}

Function Create-WikiPage([string]$WebUrl,[string]$PageName,[string]$PageContent)
{
    $web = Get-SPWeb $WebUrl
    $wikiPages = $web.Lists["Pages"]
    $pSite = New-Object Microsoft.SharePoint.Publishing.PublishingSite($web.Site) 
    $pageLayoutUrl = $web.Site.Url + "/_catalogs/masterpage/EnterpriseWiki.aspx"
    $pageLayout = $pSite.PageLayouts[$pageLayoutUrl]
    $pWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
    $wikiPage = $pWeb.GetPublishingPages().Add($PageName, $pageLayout);
    $wikiPage.Title = [System.IO.Path]::GetFileNameWithoutExtension($PageName)
    $wikiItem = $wikiPage.ListItem
    $wikiItem["PublishingPageContent"] = $pageContent
    $wikiItem.Update()
}

用法

Create-WikiPage -WebUrl "http://contoso.intranet.sp.dev/faq/" -PageName "FAQ.aspx" -PageContent "Welcome to FAQ"