Программно создать страницу публикации MOSS - PullRequest
4 голосов
/ 12 февраля 2009

Я получаю сообщение об ошибке при создании страницы публикации 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 (). Количество == 1

Кажется, я не могу найти что-то полезное через Google и не могу найти в Reflector ничего, что могло бы помочь.

Ответы [ 3 ]

2 голосов
/ 12 февраля 2009

Я выяснил, в чем проблема, использованный ContentType был поврежден. Из-за другой проблемы у меня развертывание ContentTypes ( см. Этот вопрос ) Я программно создаю ContentType, но развертываю PageLayout с CAML. Это привело к тому, что AssociatedContentType был неверным, поэтому, когда я создал страницу, используя ее, MOSS не смог определить, какой ContentType использовать, и упал.

1 голос
/ 12 февраля 2009

Убедитесь, что сеть, которую вы используете, является веб-страницей публикации. Чтобы процитировать статью 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 голосов
/ 12 февраля 2009

попробуйте добавить сайт в ферму, а затем используйте этот код из социальной сети 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 );
...