4

我是 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] = "我的演示内容";

但这给出了一个无效的字段错误。

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

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

但结果是完全一样的。

我已确认网站的“SharePoint Server Publishing”功能已开启,网站集的“SharePoint Server Publishing Infrastructure”功能已开启。

请帮忙。

4

2 回答 2

4

在 sharepoint.stackexchange.com 上的其他线程的帮助下,我想出了这个解决方案:

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

为了他人的利益,这是对我有用的代码:

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;
}
于 2012-10-31T13:17:59.063 回答
3

如何使用 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;
}

电源外壳

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"
于 2014-08-21T09:51:48.467 回答