Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修改Sharepoint非发布默认页面内容程序_C#_Powershell_Sharepoint_Sharepoint 2010 - Fatal编程技术网

C# 修改Sharepoint非发布默认页面内容程序

C# 修改Sharepoint非发布默认页面内容程序,c#,powershell,sharepoint,sharepoint-2010,C#,Powershell,Sharepoint,Sharepoint 2010,我需要修改超过100个SharePoint 2010站点的default.aspx页面的内容,以便对页面内容进行轻微更改 由于站点数量众多,我希望以编程方式来实现这一点,可以在PowerShell中实现,也可以通过编写控制台应用程序或类似的方式实现 我发现很多网站/博客描述了如何在页面库中查找默认页面,但这对我来说并不适用,因为即使这些网站激活了发布功能,页面库中没有文件,而且据我所知,这不是一个wiki页面 我试图解决的问题是,主页上列表的ListViewXml标记格式不正确。url中有两个?

我需要修改超过100个SharePoint 2010站点的default.aspx页面的内容,以便对页面内容进行轻微更改

由于站点数量众多,我希望以编程方式来实现这一点,可以在PowerShell中实现,也可以通过编写控制台应用程序或类似的方式实现

我发现很多网站/博客描述了如何在页面库中查找默认页面,但这对我来说并不适用,因为即使这些网站激活了发布功能,页面库中没有文件,而且据我所知,这不是一个wiki页面

我试图解决的问题是,主页上列表的ListViewXml标记格式不正确。url中有两个?(查询字符串),我只想替换“?RootFolder=”to“&RootFolder=”的每个实例

到目前为止,我已经尝试运行一个c#控制台,并且能够找到default.aspx文件,但是我得到的内容并不是全部内容,只是结构

 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", "&amp;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();
}
}
}
}