Programmatically instantiate a web part page in Sharepoint

前端 未结 3 1063
说谎
说谎 2020-12-29 14:44

Is there a simple way to add a web part page to a Sharepoint site programmatically, using either the object model or web services? It seems straight-forward to create lists

相关标签:
3条回答
  • 2020-12-29 15:01

    An alternative solution to the accepted answer from @AlexAngas is to use the NewWebPage method of the SharePoint Foundation RPC Protocol, as suggested 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);
    }
    

    Usage of the above extension method:

    web.CreateWebPartPage(yourList, "NewPage", 2);
    
    0 讨论(0)
  • 2020-12-29 15:04

    I'm going to take the route that this isn't a collaboration/publishing site as this isn't mentioned and wss is in the tag list. Pretty clunky in comparison to using a publishing site...

    First choose the web part page template you'd like to use from:

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

    Then set up a stream to the template and use SPFileCollection.Add() to add it to your document library. For example:

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

    Note: This solution assumes you have the US SharePoint version installed that uses the 1033 language code. Just change the path if different.

    0 讨论(0)
  • 2020-12-29 15:06

    Is it a collaboration/publishing site? If so you can the following blog articles should help:

    • Create and Publish web pages in Publishing SharePoint sites programmatically
    • Programmatically create pages - and Add Web Parts
    • Programmatically adding pages to a MOSS Publishing site
    0 讨论(0)
提交回复
热议问题