2009-02-12 5 views
4

Je reçois une erreur lors de la création d'une page de publication MOSS (il s'agit d'une installation MOSS complètement propre, mais pas encore de site intégré). J'utilise le code que j'ai trouvé sur beaucoup de blogs, par exemple:Création par programme d'une page de publication 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); 

Mais quand je fais l'appel de méthode pubWeb.GetPublishingPages().Add je reçois l'erreur suivante:

FormatException - Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

J'ai vérifié la suivant:

  • ContentTypeId est valide
  • mise en page a une valeur
  • pubWe b.GetPublishingPages(). Count == 1

Je n'arrive pas à trouver quelque chose d'utile via Google et je ne trouve rien dans Reflector qui pourrait aider.

Répondre

2

J'ai découvert quel était le problème, le ContentType j'utilisais était corrompu. En raison d'un autre problème que je suis en train de déployer ContentTypes (see this question) je crée par programme le ContentType, mais en déployant le PageLayout avec CAML. L'AssociatedContentType a donc été incorrect. Par conséquent, lorsque j'ai créé la page à l'aide de ce paramètre, MOSS n'a pas pu déterminer quel ContentType utiliser et tomber.

+0

Merci pour cela! Exactement ce dont j'avais besoin :) –

0

essayer d'ajouter un site à la ferme, puis, utilisez 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; 

     } 

Exemple d'appel:

FillPublishingWebWithPages(http://server:12345/sites/test/subsite1/subsite2/Pages/, 5); 
1

Vérifiez que le Web que vous utilisez est un Web Publishing. Pour citer l'article de MSDN sur GetPublishingWeb: -

Before you use this method, check the IsPublishingWeb method to confirm that publishing behavior is supported on this instance of the SPWeb class. If publishing is not supported on the SPWeb, then the methods and properties of the PublishingWeb wrapper may behave unexpectedly.

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