以编程方式创建MOSS发布页面

4

在创建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

我似乎无法通过Google找到任何有用的东西,也找不到Reflector中可以帮助的内容。

3个回答

2
我找到了问题所在,我使用的ContentType已经损坏。由于我还遇到另一个部署ContentTypes的问题(请参见此问题),我正在以编程方式创建ContentType,但是使用CAML部署PageLayout。这导致AssociatedContentType不正确,因此当我使用它创建页面时,MOSS无法确定要使用哪个ContentType并崩溃了。

1

检查您正在使用的网站是否为发布网站。引用MSDN关于GetPublishingWeb的文章:

在使用此方法之前,请检查IsPublishingWeb方法以确认此SPWeb类实例支持发布行为。如果SPWeb上不支持发布,则PublishingWeb包装器的方法和属性可能会出现意外行为。

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

0

尝试将一个站点添加到农场中,然后使用{{link1:来自社交MSDN的此代码}}:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接