以编程方式修改Sharepoint非发布默认页面内容
本文关键字:默认 布默认 方式 编程 修改 Sharepoint | 更新日期: 2023-09-27 18:10:15
我需要修改默认的内容。在超过100个SharePoint 2010网站的aspx页面上做一个轻微的内容改变。
因为网站的数量,我想用编程的方式来做,要么在PowerShell中,要么通过编程一个控制台应用程序或类似的东西。
我发现很多网站/博客都描述了如何在pages库中查找默认页面,但这对我来说不起作用,因为即使这些网站有发布功能,pages库中也没有文件,而且据我所知,它不是wiki页面。
我试图修复的问题是,在ListViewXml标签的列表在主页上没有形成正确的。它在url中有两个?'s(查询字符串),我只是想替换"?RootFolder=" to "&RootFolder="
到目前为止,我已经尝试运行一个c#控制台,我已经能够找到默认值。但是我得到的内容不是所有的内容,只是结构。 using (SPSite siteCollection = new SPSite("my_site_url"))
{
SPWebCollection sites = siteCollection.AllWebs;
foreach (SPWeb site in sites)
{
try
{
SPFile file = site.GetFile(site.Url + "/default.aspx");
System.IO.Stream myStream = file.OpenBinaryStream();
System.IO.StreamReader reader = new System.IO.StreamReader(myStream);
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
finally
{
if (site != null)
site.Dispose();
}
我只是将文本输出到控制台以进行测试。我希望我可以做一个字符串替换,并把内容写回文件,并以某种方式保存它。
解决方案不一定是c#,我只需要一些自动化的方式来改变许多网站的主页,这似乎是最有希望的路线。目前我在SharePoint Designer中手动打开页面,做一个查找替换,然后点击保存按钮,这是非常繁琐的。
经过更多的搜索和头部撞击,我能够解决这个问题。
发现我实际上不能修改页面的代码。我需要修改页面上列表的xml,特别是列表工具栏的xml,甚至更具体地说是视图工具栏的xml。
下面的大部分代码来自http://www.sharepointchick.com/archive/2009/07/24/programmatically-adjusting-the-toolbar-of-a-listviewwebpart.aspx
最后的代码是:
SPSite siteCollection1 = new SPSite(<site>);
SPWeb myWebs = siteCollection1.OpenWeb();
foreach (SPWeb webItem in myWebs.Webs)
{
SPFile myFile = webItem.GetFile("default.aspx");
SPLimitedWebPartManager limitedWebPartManager = myFile.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
// Get all web parts that are available on the default.aspx page
SPLimitedWebPartCollection webParts = limitedWebPartManager.WebParts;
// Loop through the collection of all web parts on the page
foreach (System.Web.UI.WebControls.WebParts.WebPart webPartOnPage in webParts)
{
// Only try to set the toolbar type is the web part is a ListViewWebPart, other web part types don't have toolbars
if (webPartOnPage.GetType().Name == "ListViewWebPart")
{
ListViewWebPart listViewWebPart = webPartOnPage as ListViewWebPart;
// Get the view used in the web part by using reflection
PropertyInfo viewProp = listViewWebPart.GetType().GetProperty("View", BindingFlags.NonPublic | BindingFlags.Instance);
SPView webPartView = viewProp.GetValue(listViewWebPart, null) as SPView;
// This is necessary after the infrastructure update, without it you can't get to the XML of the view
webPartView.GetType().InvokeMember("EnsureFullBlownXmlDocument", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, webPartView, null, System.Globalization.CultureInfo.CurrentCulture);
PropertyInfo nodeProp = webPartView.GetType().GetProperty("Node", BindingFlags.NonPublic | BindingFlags.Instance);
XmlNode node = nodeProp.GetValue(webPartView, null) as XmlNode;
// Get the toolbar node from the XML of the view used in the web part
XmlNode toolbarNode = node.SelectSingleNode("Toolbar");
if (toolbarNode != null)
{
toolbarNode.InnerXml = toolbarNode.InnerXml.Replace("?RootFolder", "&RootFolder");
webPartView.Update();
}
}
}
}