Как эмулировать опцию «Удалить ссылки» редактора контента при удалении элемента? - PullRequest
3 голосов
/ 17 сентября 2011

У меня есть набор элементов, у которых есть поле Treelist, которое ссылается на элементы мультимедиа в библиотеке мультимедиа.Если я удаляю элемент мультимедиа, на который ссылается другой элемент, я получаю диалоговое окно «Нерабочие ссылки», в котором можно выбрать «Удалить ссылки», «Ссылка на другой элемент» или просто оставить неработающие ссылки.

ЧтоAPI / код вызывается, когда я выбираю Удалить ссылки?Я хотел бы выполнить то же действие программно в коде позади.

Для контекста мы разрешаем нашим рекламодателям загружать изображения и манипулировать их библиотекой изображений (через пользовательский веб-интерфейс).Поэтому, когда кто-то удаляет изображение из своего набора, очевидно, что мы не хотим оставлять неработающие ссылки на эти элементы библиотеки мультимедиа.

1 Ответ

3 голосов
/ 18 сентября 2011

Это будет база данных ссылок.Вы можете использовать его перед удалением элемента, чтобы найти источники ссылок:

Sitecore.Globals.LinkDatabase.GetReferrers(item)

Возвращенные объекты ItemLink содержат элемент и поле, на которое ссылается удаляемый элемент.Используйте соответствующий класс Field для удаления ссылки.

Хотя вы можете подумать, что метод RemoveLinks или RemoveReferences в LinkDatabase сделает то, что вы ищете, на самом деле он просто удаляет ссылки / ссылки изСама база данных ссылок.

РЕДАКТИРОВАТЬ: Небольшая работа с 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...