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 に答える