删除项目时,如何模拟Content Editor的“删除链接”选项?

时间:2011-09-16 21:10:33

标签: c# asp.net sitecore sitecore6

我有一组具有Treelist字段的项目,该字段引用媒体库中的媒体项目。如果我删除了另一个项目引用的媒体项目,我会看到“Broken Links”对话框,它提供了删除链接,链接到另一个项目的选项,或者只是保留断开的链接。

选择删除链接时调用了哪些API /代码?我想在代码隐藏中以编程方式执行相同的操作。

对于上下文,我们允许我们的广告成员上传图像并操纵他们的图像库(通过自定义Web界面)。因此,当有人从他们的集合中删除图像时,显然我们不希望将损坏的链接留给这些媒体库项目。

1 个答案:

答案 0 :(得分:3)

那将是链接数据库。您可以在删除项目之前使用它来查找引荐来源:

Sitecore.Globals.LinkDatabase.GetReferrers(item)

返回的ItemLink对象包含引用要删除的项目的项目和字段。使用适当的Field类删除引用。

虽然您可能认为LinkDatabase上的RemoveLinksRemoveReferences方法会执行您要查找的内容,但实际上只是从链接数据库本身删除了链接/引用。

修改 一个小的Reflector工作提供了一个更完整的解决方案...如果您使用FieldTypeManager工厂获取字段CustomField,您可以在该字段上调用RemoveLink(ItemLink)

Field field = item.Fields[brokenField];
CustomField field2 = FieldTypeManager.GetField(field);
item.Editing.BeginEdit();
field2.RemoveLink(itemLink);
item.Editing.EndEdit();

这是未经测试的代码,通过引用Sitecore.Shell.Applications.Links.EditLinksForm

找到