我是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发布基础结构”功能。
请帮忙。
答案 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)
<强> 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"