Sharepoint 以编程方式创建MOSS发布页面
我在创建MOSS发布页面时出错(这是一个完全干净的MOSS安装,还没有内置站点)。我正在使用我在很多博客上找到的代码,例如:Sharepoint 以编程方式创建MOSS发布页面,sharepoint,moss,Sharepoint,Moss,我在创建MOSS发布页面时出错(这是一个完全干净的MOSS安装,还没有内置站点)。我正在使用我在很多博客上找到的代码,例如: var pubWeb = PublishingWeb.GetPublishingWeb(Site.RootWeb); SPContentTypeId ctId = new SPContentTypeId(contentTypeId); var layouts = pubWeb.GetAvailablePageLayouts(ctId); var layout = layo
var pubWeb = PublishingWeb.GetPublishingWeb(Site.RootWeb);
SPContentTypeId ctId = new SPContentTypeId(contentTypeId);
var layouts = pubWeb.GetAvailablePageLayouts(ctId);
var layout = layouts[0];
var url = pageTitle.EndsWith(".aspx") ? pageTitle : pageTitle + ".aspx";
var newPage = pubWeb.GetPublishingPages().Add(url, layout);
但是,当我执行pubWeb.GetPublishingPages().Add
方法调用时,会出现以下错误:
FormatException-索引(基于零)必须大于或等于零且小于参数列表的大小
我已经检查了以下内容:
- ContentTypeId是有效的
- 布局有价值
- pubWeb.GetPublishingPages().Count==1
我似乎无法通过谷歌找到任何有用的东西,也无法在Reflector中找到任何有帮助的东西。尝试向农场添加一个站点,然后使用:
检查您使用的网站是否为发布网站。引用MSDN关于以下内容的文章:- 使用此方法之前,请检查 i发布Web方法以确认 上支持发布行为 此SPWeb类的实例。如果 上不支持发布 然后是方法和属性 发布Web包装器的 表现出人意料
我发现了问题所在,我使用的ContentType已损坏。由于另一个问题,我正在部署ContentTypes(),我正在通过编程创建ContentType,但使用CAML部署PageLayout。这导致AssociatedContentType不正确,因此当我使用它创建页面时,MOSS无法确定要使用哪种ContentType,因此失败了。谢谢!正是我所需要的:)
public void FillPublishingWebWithPages
(string publishingSiteCollection, int pagesToCreate)
{
try
{
using ( SPSite site = new SPSite( publishingSiteCollection ) )
{
using ( SPWeb web = site.OpenWeb() )
{
PublishingSite pubSite = new PublishingSite( site );
PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb( web );
SPContentTypeId articleContentTypeID =
new SPContentTypeId( "0x010100C568DB52D9D0A14D9B2FDCC96666E9F"+
"2007948130EC3DB064584E219954237AF3900242457EFB8B242478" );
PageLayout[] layouts = pubWeb.GetAvailablePageLayouts( articleContentTypeID );
PageLayout articlePageLayout = layouts[ 1 ];
// create a temp name...
string pageName = DateTime.Now.ToString( "yyyyMMdd-HHmmss" );
// create the specified number of pages
for ( int i = 0; i < pagesToCreate; i++ )
{
PublishingPage newPage =
pubWeb.GetPublishingPages().Add( string.Format( "{0}_Gend_Page_{1}.aspx", pageName, i ), articlePageLayout );
newPage.Title = "Hello";
newPage.ListItem[ "PublishingContactName" ] = "valuetest";
newPage.Update();
newPage.ListItem.File.CheckIn( "created" );
newPage.ListItem.File.Publish( "created" );
newPage.ListItem.File.Approve( "created" );
pubWeb.Update();
}
web.Update();
}
}
}
catch ( Exception ex )
{
throw new Exception(
"Error in Page CREATION ----FillPublishingWebWithPages----", ex );
}
return;
}
FillPublishingWebWithPages( http://server:12345/sites/test/subsite1/subsite2/Pages/, 5 );
// Get the PublishingWeb wrapper for the SPWeb that was passed in.
PublishingWeb publishingWeb = null;
if (PublishingWeb.IsPublishingWeb(web))
{
publishingWeb = PublishingWeb.GetPublishingWeb(web);
}
else
{
throw new System.ArgumentException("The SPWeb must be a PublishingWeb", "web");
}