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

时间:2009-02-12 01:29:07

标签: sharepoint moss

创建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 个答案:

答案 0 :(得分:2)

我发现问题是什么,我使用的ContentType已损坏。由于另一个问题,我正在部署ContentTypes(see this question)我正在以编程方式创建ContentType,但是使用CAML部署PageLayout。这导致AssociatedContentType不正确,因此当我使用它创建页面时,MOSS无法确定要使用的内容类型和翻倒。

答案 1 :(得分: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");
}

答案 2 :(得分:0)

尝试将网站添加到服务器场,然后使用this code from social 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 );