我有一组具有Treelist字段的项目,该字段引用媒体库中的媒体项目。如果我删除了另一个项目引用的媒体项目,我会看到“Broken Links”对话框,它提供了删除链接,链接到另一个项目的选项,或者只是保留断开的链接。
选择删除链接时调用了哪些API /代码?我想在代码隐藏中以编程方式执行相同的操作。
对于上下文,我们允许我们的广告成员上传图像并操纵他们的图像库(通过自定义Web界面)。因此,当有人从他们的集合中删除图像时,显然我们不希望将损坏的链接留给这些媒体库项目。
答案 0 :(得分:3)
那将是链接数据库。您可以在删除项目之前使用它来查找引荐来源:
Sitecore.Globals.LinkDatabase.GetReferrers(item)
返回的ItemLink对象包含引用要删除的项目的项目和字段。使用适当的Field类删除引用。
虽然您可能认为LinkDatabase上的RemoveLinks
或RemoveReferences
方法会执行您要查找的内容,但实际上只是从链接数据库本身删除了链接/引用。
修改强>
一个小的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