Sharepoint 以编程方式创建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

我在创建MOSS发布页面时出错(这是一个完全干净的MOSS安装,还没有内置站点)。我正在使用我在很多博客上找到的代码,例如:

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");
}