2009-06-11 7 views
7

Existe-t-il un moyen simple d'ajouter une page de composant WebPart à un site Sharepoint par programmation, en utilisant le modèle objet ou les services Web? Il semble simple de créer des listes et d'ajouter des composants Web de cette manière, mais je ne trouve pas d'exemple de création de page de contenu. Editer: Pour une installation WSS simple (pas MOSS).Instanciation par programme d'une page de composant WebPart dans Sharepoint

Répondre

13

Je vais prendre la route que ce n'est pas un site de collaboration/édition car ce n'est pas mentionné et wss est dans la liste des tags. Jolie clunky par rapport à l'utilisation d'un site de publication ...

d'abord choisir le modèle de page partie Web que vous souhaitez utiliser à partir de:

C: \ Program Files \ Common Files \ Microsoft Shared \ serveur web extensions \ 12 \ TEMPLATE \ 1033 \ STS \ DOCTEMP \ SMARTPGS

ensuite mis en place un cours d'eau au modèle et utiliser SPFileCollection.Add() pour l'ajouter à votre bibliothèque de documents. Par exemple:

string newFilename = "newpage.aspx"; 
string templateFilename = "spstd1.aspx"; 
string hive = SPUtility.GetGenericSetupPath("TEMPLATE\\1033\\STS\\DOCTEMP\\SMARTPGS\\"); 
FileStream stream = new FileStream(hive + templateFilename, FileMode.Open); 
using (SPSite site = new SPSite("http://sharepoint")) 
using (SPWeb web = site.OpenWeb()) 
{ 
    SPFolder libraryFolder = web.GetFolder("Document Library"); 
    SPFileCollection files = libraryFolder.Files; 
    SPFile newFile = files.Add(newFilename, stream); 
} 

Remarque: Cette solution suppose que vous avez installé la version US SharePoint qui utilise le code de langue 1033. Changez juste le chemin si différent.

+0

Il fonctionne: D !! Bon post Alex :-) !! – Muhammedh

+0

@Alex Est-il possible de définir la page maître de newpage.aspx comme SomeMasterPageName.master? Comment pourrais-je l'inclure dans le code? –

0

Une solution alternative à la réponse acceptée de @AlexAngas est d'utiliser le NewWebPage method du SharePoint Foundation RPC Protocol, comme suggéré here.

private static void CreateWebPartPage(this SPWeb web, SPList list, string pageName, int layoutTemplate) 
{ 
    const string newWPPage = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
            "<Batch>" + 
            "<Method ID=\"0,NewWebPage\">" + 
            "<SetList Scope=\"Request\">{0}</SetList>" + 
            "<SetVar Name=\"Cmd\">NewWebPage</SetVar>" + 
            "<SetVar Name=\"ID\">New</SetVar>" + 
            "<SetVar Name=\"Type\">WebPartPage</SetVar>" + 
            "<SetVar Name=\"WebPartPageTemplate\">{2}</SetVar>" + 
            "<SetVar Name=\"Overwrite\">true</SetVar>" + 
            "<SetVar Name=\"Title\">{1}</SetVar>" + 
            "</Method>" + 
            "</Batch>"; 
    var newWPPageBatchXml = string.Format(newWPPage, list.ID, pageName, layoutTemplate); 

    var result = web.ProcessBatchData(newWPPageBatchXml); 
} 

Utilisation de la méthode d'extension ci-dessus:

web.CreateWebPartPage(yourList, "NewPage", 2); 
Questions connexes