Programaticamente instanciar uma página web part em Sharepoint
-
13-09-2019 - |
Pergunta
Existe uma maneira simples de adicionar uma página Web Part para um site do SharePoint programaticamente, usando o modelo de objeto ou serviços web? Parece simples e direta para criar listas e adicionar peças Web dessa maneira, mas não consigo encontrar um exemplo de como criar uma página de conteúdo.
Edit:. Para uma instalação de WSS simples (não MOSS)
Solução
Eu vou tomar o caminho que esta não é uma colaboração / site publicar como este não é mencionado e WSS está na lista tag. desajeitado muito em comparação ao uso de um site de publicação ...
Primeiro, escolha o modelo de página web part que você gostaria de usar a partir de:
C: \ Program Files \ Common servidor web Files \ Microsoft Shared \ extensions \ 12 \ TEMPLATE \ 1033 \ STS \ DOCTEMP \ SMARTPGS
Em seguida, criar um fluxo para o modelo e usar SPFileCollection.Add () para adicioná-lo à sua biblioteca de documentos. Por exemplo:
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);
}
Nota: Esta solução pressupõe que você tenha a versão dos EUA SharePoint instalado que usa o código do idioma 1033. Basta alterar o caminho se diferente.
Outras dicas
É uma colaboração / site publicar? Se assim você pode os seguintes artigos do blog deve ajudar:
Uma solução alternativa para a resposta aceita de @AlexAngas é usar a NewWebPage método do SharePoint Foundation Protocolo RPC , como sugerido aqui .
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);
}
O uso do método de extensão acima:
web.CreateWebPartPage(yourList, "NewPage", 2);