C# 修改Sharepoint非发布默认页面内容程序
我需要修改超过100个SharePoint 2010站点的default.aspx页面的内容,以便对页面内容进行轻微更改 由于站点数量众多,我希望以编程方式来实现这一点,可以在PowerShell中实现,也可以通过编写控制台应用程序或类似的方式实现 我发现很多网站/博客描述了如何在页面库中查找默认页面,但这对我来说并不适用,因为即使这些网站激活了发布功能,页面库中没有文件,而且据我所知,这不是一个wiki页面 我试图解决的问题是,主页上列表的ListViewXml标记格式不正确。url中有两个?(查询字符串),我只想替换“?RootFolder=”to“&RootFolder=”的每个实例 到目前为止,我已经尝试运行一个c#控制台,并且能够找到default.aspx文件,但是我得到的内容并不是全部内容,只是结构C# 修改Sharepoint非发布默认页面内容程序,c#,powershell,sharepoint,sharepoint-2010,C#,Powershell,Sharepoint,Sharepoint 2010,我需要修改超过100个SharePoint 2010站点的default.aspx页面的内容,以便对页面内容进行轻微更改 由于站点数量众多,我希望以编程方式来实现这一点,可以在PowerShell中实现,也可以通过编写控制台应用程序或类似的方式实现 我发现很多网站/博客描述了如何在页面库中查找默认页面,但这对我来说并不适用,因为即使这些网站激活了发布功能,页面库中没有文件,而且据我所知,这不是一个wiki页面 我试图解决的问题是,主页上列表的ListViewXml标记格式不正确。url中有两个?
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 以下大部分代码来自 最后一个对我起作用的代码是:
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();
}
}
}
}
SPSite siteCollection1=新SPSite();
SPWeb myWebs=siteCollection1.OpenWeb();
foreach(myWebs.Webs中的spwebwebitem)
{
SPFile myFile=webItem.GetFile(“default.aspx”);
SPLimitedWebPartManager limitedWebPartManager=myFile.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
//获取default.aspx页面上可用的所有web部件
SPLimitedWebPartCollection webParts=limitedWebPartManager.webParts;
//循环浏览页面上所有web部件的集合
foreach(System.Web.UI.WebControl.WebParts.WebPart WebPart网页中的网页)
{
//仅尝试设置工具栏类型,因为web部件是ListViewWebPart,其他web部件类型没有工具栏
如果(webPartOnPage.GetType().Name==“ListViewWebPart”)
{
ListViewWebPart ListViewWebPart=网页作为ListViewWebPart;
//使用反射获取web部件中使用的视图
PropertyInfo viewProp=listViewWebPart.GetType().GetProperty(“视图”,BindingFlags.NonPublic | BindingFlags.Instance);
SPView webPartView=viewProp.GetValue(listViewWebPart,null)作为SPView;
//这在基础设施更新之后是必需的,没有它,您就无法访问视图的XML
webPartView.GetType().InvokeMember(“EnsureRefullBlownXmlDocument”,BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod,null,webPartView,null,System.Globalization.CultureInfo.CurrentCulture);
PropertyInfo nodeProp=webPartView.GetType().GetProperty(“节点”,BindingFlags.NonPublic | BindingFlags.Instance);
XmlNode node=nodeProp.GetValue(webPartView,null)作为XmlNode;
//从web部件中使用的视图的XML中获取工具栏节点
XmlNode toolbarNode=node。选择SingleNode(“工具栏”);
如果(工具栏节点!=null)
{
toolbarNode.InnerXml=toolbarNode.InnerXml.Replace(“?RootFolder“,”&;RootFolder”);
webPartView.Update();
}
}
}
}