Как программно создавать редактируемые вики-страницы в библиотеке страниц корпоративного вики-сайта

Я новичок в SharePoint. Я пытаюсь программно создать вики-страницу в библиотеке страниц корпоративного вики-сайта в SharePoint 2010. Вот мой код:

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».

Пожалуйста помоги.


person Zzz Zzz    schedule 30.10.2012    source источник


Ответы (2)


С помощью другой темы на sharepoint.stackexchange.com я придумал следующее решение:

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

Для пользы других вот код, который у меня сработал:

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;
}
person Zzz Zzz    schedule 31.10.2012
comment
Не выбрасывайте свой RootWeb - person Rawling; 01.11.2012
comment
привет, Удалось ли вам добавить содержимое по умолчанию Мое демонстрационное содержимое на свою вики-страницу? - person MicrosoftDevX; 25.03.2014

Как создать вики-страницу с помощью SSOM

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"
person Vadim Gremyachev    schedule 21.08.2014