WebPart“元数据”?
Posted
技术标签:
【中文标题】WebPart“元数据”?【英文标题】:WebPart "metadata"? 【发布时间】:2010-11-19 02:09:30 【问题描述】:我以前没有使用 webparts 来实现 sharepoint,但需要对 webpart 进行更改,这需要传播到大约 700 个网站。它是对 webpart 的属性之一的更改,需要更改值。有没有办法获取 webpart 的元数据并直接在数据库中更改它(我假设这是存储它的位置。)?
以下是场景:Webpart 包含应显示的文档类型(内部类型)的逗号分隔列表。现在有新的文档。需要添加到所有 700 个网站的类型。我需要一种枚举网站、获取 webpart 元数据并将这些新文档类型添加到 webpart 的方法。目前他们手动去每个网站,点击编辑,输入新的文档类型,然后保存。
【问题讨论】:
【参考方案1】:正如其他人所说,正确的方法是以编程方式实现这一点,而不是编辑内容数据库,这会使您的安装无法支持。我经常在由网站模板创建的网站组成的网站集中使用控制台应用程序来执行此操作。
这是一个更改 ListViewWebPart 的 Title 属性的示例。更新为包含递归循环的代码。我没有对此进行测试,但它应该可以工作。
private static void ProcessSiteCollection(string url)
using (SPSite siteCollection = new SPSite(url))
SPWeb rootWeb = siteCollection.RootWeb;
ProcessWebs(rootWeb);
private static void ProcessWebs(SPWeb parentWeb)
foreach (SPWeb web in parentWeb.Webs)
try
UpdateWebPart(web); // Set web part properties
ProcessWebs(web); // Recursively loop through children
finally
web.Dispose();
private static void UpdateWebPart(SPWeb web)
using (SPLimitedWebPartManager webPartManager =
web.GetLimitedWebPartManager("default.aspx", PersonalizationScope.Shared))
try
foreach (WebPart webPart in webPartManager.WebParts)
if (webPart.Title == "My Web Part")
ListViewWebPart listViewWebPart = (ListViewWebPart)webPart;
listViewWebPart.Title = "Updated Web Part";
webPartManager.SaveChanges(listViewWebPart);
web.Update();
break;
finally
webPartManager.Web.Dispose();
【讨论】:
这是否适用于我刚刚添加的场景。所有网站都是从模板创建的。 sharepoint 是否有办法枚举这些网站,并为每个网站获取一个 webpart 实例? 正如我的回答的第一个版本中提到的,是的,这可以做到,但我省略了它以保持简短。我现在用完整的代码示例更新了答案。【参考方案2】:直接访问共享点内容数据库是一个很大的“不可以”。这是官方的回答。 :)
话虽如此,我只查看过内容数据库,从未尝试过手动更改任何内容。
我的建议是修改现有 Web 部件以根据当前设置的属性修改属性。 (我假设某些当前设置的属性无效或需要根据基础结构的更改进行更新。)...如果是这种情况,您可以验证该属性;确保将当前属性更改为需要的属性,和/或确保将来的属性更改有效。
祝你好运!
【讨论】:
【参考方案3】:不要
说真的,不要进入内容数据库并对其进行编辑。这样一来,如果发生任何事情,您将不再受到支持,并且 Microsoft 将不再支持您(直到您将数据库从备份恢复到早期版本)。
您可以使用 API 访问您网站中的 Web 部件,下面是一些可以帮助您入门的代码:
Enumerate page webparts
【讨论】:
以上是关于WebPart“元数据”?的主要内容,如果未能解决你的问题,请参考以下文章