如何在 sharepoint 2007 中列出和编辑所有 Web 部件的 html?

Posted

技术标签:

【中文标题】如何在 sharepoint 2007 中列出和编辑所有 Web 部件的 html?【英文标题】:How to list and edit html of all web part in sharepoint 2007? 【发布时间】:2011-05-18 13:56:33 【问题描述】:

我是 sharepoint 的新手,我必须对所有 Web 部件进行非常简单的修改。我们有很多包含非常简单的 html 的 web 部件。 html 只包含一个链接和一个图片。

Web 开发人员放置了页面和图像的完整链接,这会导致一些问题。我想扫描所有的 web 部件 html 并用相对链接替换完整的链接。

有可能吗?我们有大量的页面和链接。手动完成需要2周!!!

谢谢!

编辑#2: 现在的问题是:是否可以列出我网站中的所有 aspx 文件? 我知道如何使用 url 访问 Web 部件内容:

using (SPLimitedWebPartManager manager = web.GetLimitedWebPartManager(
                "ca/Pages/Home.aspx", PersonalizationScope.Shared))
        
            foreach (System.Web.UI.WebControls.WebParts.WebPart wp in manager.WebParts)
            
                System.Console.WriteLine(wp.Title);
                if (wp.GetType().Equals(typeof(Microsoft.SharePoint.WebPartPages.ContentEditorWebPart)))
                
                    Microsoft.SharePoint.WebPartPages.ContentEditorWebPart thisWebPart = wp as Microsoft.SharePoint.WebPartPages.ContentEditorWebPart;

                    System.Console.WriteLine(thisWebPart.Content.InnerText );
                    System.Console.WriteLine(thisWebPart.Content.InnerXml);
                

            
        

编辑#1: 根据要求,他们是一个例子:

我想使用如下代码从所有共享 Web 部件中删除“http://www.mywebsite.com”:

<A title="" href="http://www.mywebsite.com/Pages/Career.aspx" target=""><IMG style="BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; BORDER-LEFT: 0px solid; BORDER-BOTTOM: 0px solid" src="http://www.mywebsite.com/images/Career.jpg" border=0></A>

【问题讨论】:

你能发布一个你想要做的替换的例子吗?修改前后的链接。 您使用的是什么类型的 Web 部件或自定义 Web 部件或内容编辑器 Web 部件或其他东西 @Ashutosh Singh:内容编辑器 webpart 【参考方案1】:

我不确定我是否得到了确切的要求。编写一个这样的程序怎么样?通过正则表达式检测链接并替换它们。

【讨论】:

这正是我想做的。它甚至简单的正则表达式:我只需要删除mywebsite.com 但我不知道是否可以迭代所有的webparts 并修改html 代码。我只知道手动“编辑html代码”按钮【参考方案2】:

如果您想实际更改 Sharepoint 中的内容,可能很难在代码中执行此操作。每个 Web 部件的工作方式都不同,因此没有适用于所有 Web 部件的标准解决方案。例如,CQWP 可以从各种列表中提取数据,因此对该 Web 部件进行更改的方法是更改​​它从中提取的列表中的数据。其他 Web 部件可能从 SQL Server、报告中提取数据,其中包含 IFrame 等。一些 Web 部件甚至可能将 URL 硬编码在自定义 DLL 中,您只能通过修改 DLL 所属的解决方案/功能来更改它,并且重新部署更新的版本。

但是,另一种解决方案是编写一个响应过滤器,它将获取 Sharepoint 的输出,并在每次从 Sharepoint 请求页面时动态地执行查找/替换。有关如何执行此操作的更多信息,请参阅http://aspnetresources.com/articles/HttpFilters。

【讨论】:

【参考方案3】:

在内容编辑器 Web 部件中,内容存储在内容标签下

<Content xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor"><![CDATA[<p>test document test document</p>]]></Content>

我可以在这里建议的是在 sharepoint 设计器中打开站点并为所有页面使用查找和替换选项

【讨论】:

【参考方案4】:

这有两个部分,第一个是循环浏览您网站中的所有 Web 部件页面 - 那里有很多示例,所以不要在这里重复,以免混淆。

第二部分是更新 Content 属性并保存 - 似乎这是您对updating the Content Editor Web Part (CEWP) programatically 的难题中缺少的部分,所以:-

using System.Xml;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebPartPages;

private void updateContentEditor(SPWeb web, string pageUrl)

    using (SPLimitedWebPartManager manager =
           web.GetLimitedWebPartManager(pageUrl, PersonalizationScope.Shared))
    
        foreach (WebPart wp in manager.WebParts)
        
            if (wp.GetType() == typeof(ContentEditorWebPart))
            
                ContentEditorWebPart cewp = wp as ContentEditorWebPart;
                cewp.Content.InnerXml;

                // See http://justgeeks.blogspot.com/2009/02/i-found-to-be-bit-tricky-to-update.html
                XmlDocument xmlDoc = new XmlDocument();
                XmlElement xmlElement = xmlDoc.CreateElement("MyElement");

                // Do you change logic here
                xmlElement.InnerText =
                   contentEditor.Content.InnerText.Replace(BEFORE, AFTER);

                // Save changes
                contentEditor.Content = xmlElement;
                manager.SaveChanges(cewp);
            
        
    

【讨论】:

以上是关于如何在 sharepoint 2007 中列出和编辑所有 Web 部件的 html?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Sharepoint (MOSS) 2007 中的当前语言或变体?

Sharepoint 2007 数据视图 Webpart 自定义参数

401 在 SharePoint 2007 中未经授权

sharepoint webpart xlsx 要列出

如何在Sharepoint中的“外观和感觉母版页”部分下列出母版页

SharePoint 2007 - 更新所有网站主页