是否可以分析webpart正在使用的页面?
我想从我的sharepoint服务器中删除一些webpart,但我不知道正在使用什么以及哪些没有使用?
有解决方案吗?
我目前正在使用moss2007
答案 0 :(得分:5)
添加到页面的每个Web部件都存储在页面本身中。没有中央商店记录每个Web部件的使用位置。
这意味着遗憾的是,您需要遍历站点中的每个Web部件页面以检索此信息。然后,您应该在每个页面上检查Web部件的程序集名称。将找到的所有Web部件添加到应用程序完成后输出的列表中。
SPWeb对象允许您使用SPWeb.GetLimitedWebPartManager()检索每个页面的Web部件管理器。使用SPLimitedWebPartManager.WebParts property检索Web部件集合。
答案 1 :(得分:4)
Alex's answer(遍历网站 - >网页>网页部件)很好,并且“正确”的方法可以做到这一点但在非常大的网站上相当昂贵。
另一种方法是数据库查询。所有常见的警告都适用于直接访问数据库:不要改变任何东西,随时可能破坏服务包等等,但假设我们都是大男孩: -
首先,您需要找到您感兴趣的网络部分的WebPartTypeId
接下来在所有内容数据库上运行它。
SELECT DISTINCT D.SiteID, D.WebId, W.FullURL as WebURL, D.Id As DocumentId,
D.DirName, D.LeafName, tp_ID As WebPartSK
FROM dbo.Docs D WITH (nolock)
INNER JOIN dbo.Webs W WITH (nolock) ON D.WebID = W.Id
INNER JOIN dbo.WebParts WP WITH (nolock) ON D.Id = WP.tp_PageUrlID
WHERE WP.tp_ListId Is Null AND WP.tp_Type Is Null AND WP.tp_Flags Is Null
AND WP.tp_BaseViewID Is Null AND WP.tp_DisplayName Is Null
AND WP.tp_Version Is Null
AND WP.tp_WebPartTypeId='<your web parts id>'
你可以反过来这样做(获取所有正在使用的WebPartTypeId的列表),但你不能从WebPartTypeId哈希获得程序集名称,所以你必须做一些Web部件的查找列表&gt; typeid的的。
答案 2 :(得分:3)
另一种方法是使用Gary Lapointe STSADM扩展,特别是enumPageWebParts
stsadm -o gl-enumpagewebparts -url "http://intranet/hr/pages/default.aspx" -verbose
它仅输出特定页面上正在使用的Web部件,但您可以为站点上的每个页面调用此部件,甚至可以添加命令来迭代站点中的所有页面。
答案 3 :(得分:2)
如果有人正在为SharePoint 2013寻找相同的查询。这就是。该视图已于2013年删除,具有相同字段的表名称为dbo.AllWebParts。
SELECT DISTINCT D.SiteID, D.WebId, W.FullURL as WebURL, D.Id As DocumentId,
D.DirName, D.LeafName, tp_ID As WebPartSK
FROM dbo.Docs D WITH (nolock)
INNER JOIN dbo.Webs W WITH (nolock) ON D.WebID = W.Id
INNER JOIN dbo.AllWebParts WP WITH (nolock) ON D.Id = WP.tp_PageUrlID
WHERE WP.tp_ListId Is Null AND WP.tp_Type Is Null AND WP.tp_Flags Is Null
AND WP.tp_BaseViewID Is Null AND WP.tp_DisplayName Is Null
AND WP.tp_Version Is Null
AND WP.tp_WebPartTypeId='<your web parts id>'
答案 4 :(得分:1)
我没有成功通过任何方法生成Web部件类型ID,我执行查询时根本没有得到任何结果。这是因为id永远不正确。
为了解决这个问题,我创建了一个新页面并插入了我感兴趣的Web部件的实例。然后我通过LeafName查询,给它我创建的页面(最好使其独一无二!)。这返回了一个结果,然后我可以使用它返回的tp_WebPartTypeId来查询整个内容数据库。
因此,如果您在生成ID时遇到问题,请尝试使用此方法。